Isi kandungan:

Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2: 16 Langkah (dengan Gambar)
Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2: 16 Langkah (dengan Gambar)

Video: Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2: 16 Langkah (dengan Gambar)

Video: Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2: 16 Langkah (dengan Gambar)
Video: Raspberry Pi Cameras - The BIG Picture 2024, November
Anonim
Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2
Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2
Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2
Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2
Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2
Adakah Itu Tangan? (Kamera Raspberry Pi + Rangkaian Neural) Bahagian 1/2

Beberapa hari yang lalu, saya mencederakan pergelangan tangan kanan di gim. Selepas itu setiap kali saya menggunakan tetikus komputer, ia menyebabkan banyak kesakitan kerana sudut pergelangan tangan yang curam.

Ketika itulah saya memukul "tidakkah lebih baik jika kita dapat menukar permukaan apa pun menjadi trackpad" dan saya tidak tahu mengapa tetapi atas sebab tertentu saya memikirkannya, filemnya DI SINI, saya akan membiarkan kalian memikirkannya keluar. Itu adalah pemikiran yang menarik tetapi saya tidak tahu jika saya dapat melakukannya, saya memutuskan untuk mencubanya.

Artikel ini menangkap apa yang keluar daripadanya.

Sebelum kita memulakan, saya mempunyai penafian-

'Pada akhir artikel ini, saya tidak dapat mengubah permukaan apa pun menjadi trackpad tetapi saya tidak banyak belajar dan menambahkan alat besar ke gudang senjata saya. Saya harap itu berlaku juga kepada anda '

Mari kita mulakan.

Langkah 1: Video

Image
Image

Berikut adalah video kecil 5 minit yang merangkumi semua langkah. Tengoklah.

Langkah 2: Perkakasan

Perkakasan
Perkakasan

Saya menyediakan pi raspberry bersama dengan kamera raspberry pi pada ketinggian kira-kira 45 cm. Ini memberi kita kawasan pemantauan sekitar 25x25 cm di bawah kamera.

Kamera Raspberry pi dan raspberry pi mudah didapati, hanya google dan anda semestinya dapat mencari kedai tempatan.

Lihat Pautan ini atau salah satu senarai main Raspberry pi saya untuk menjadikan pi tanpa kepala anda berfungsi dan berjalan.

Mengikuti penyediaan ini, kami memerlukan sekeping kod yang memutuskan apakah ada tangan di kawasan yang dipantau oleh kamera dan jika ya di mana ia berada.

Langkah 3: Sepotong Kod

Sepotong Kod
Sepotong Kod
Sepotong Kod
Sepotong Kod

Sepotong kod yang membolehkan kita memutuskan sama ada terdapat kawasan menarik yang menggunakan sesuatu yang disebut Neural Network. Mereka tergolong dalam kategori pengaturcaraan di mana kita tidak menentukan peraturan untuk membuat keputusan tetapi kita menunjukkan cukup banyak data rangkaian saraf sehingga dapat menentukan peraturan sendiri.

Dalam kes kami, bukannya membuat kod seperti mana tangan kami menunjukkan gambar rangkaian neural yang diambil dari raspberry pi yang berisi tangan dan yang tidak mengandungi tangan. Fasa ini disebut latihan rangkaian saraf dan gambar yang digunakan disebut set data latihan.

Langkah 4: Mendapatkan Imej

Mendapatkan Imej
Mendapatkan Imej

Saya jauh-jauh log masuk ke raspberry pi saya dan menangkap banyak gambar menggunakan arahan berikut.

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame% 04d.jpg

Saya menangkap 80 gambar dengan tangan dan 80 gambar yang tidak mengandungi tangan. 160 gambar tidak cukup untuk melatih rangkaian saraf dengan betul tetapi harus cukup untuk bukti konsep.

Selain 160 gambar, saya menangkap 20 gambar lagi untuk menguji rangkaian kami setelah dilatih.

Setelah set data siap saya mula menulis kod untuk rangkaian neural.

Langkah 5: Alat dan Bahasa Yang Digunakan

Alat dan Bahasa Yang Digunakan
Alat dan Bahasa Yang Digunakan
Alat dan Bahasa Yang Digunakan
Alat dan Bahasa Yang Digunakan

Saya menulis rangkaian neural saya di pustaka pembelajaran mendalam python yang disebut Keras dan kod ditulis pada notebook jupyter dari navigator anaconda.

Langkah 6: Menyiapkan Set Data untuk Latihan

Menyiapkan Set Data untuk Latihan
Menyiapkan Set Data untuk Latihan
Menyiapkan Set Data untuk Latihan
Menyiapkan Set Data untuk Latihan
Menyiapkan Set Data untuk Latihan
Menyiapkan Set Data untuk Latihan
Menyiapkan Set Data untuk Latihan
Menyiapkan Set Data untuk Latihan

Pertama (Gambar # 1) Saya memasukkan semua perpustakaan yang diperlukan untuk projek ini, yang merangkumi PIL, matplotlib, numpy, os dan Keras. Di sel kedua notebook python (Gambar # 2) saya menentukan jalan ke set data dan mencetak jumlah sampel. Sekarang kita perlu memuatkan semua gambar ke dalam susunan numpy, oleh itu di sel ketiga (Gambar # 2) Saya membuat susunan numpy 82 (bilangan sampel tangan) +75 (bilangan sampel bukan tangan) iaitu 157x100x100x3. 157 adalah jumlah gambar yang saya miliki, 100x100 adalah ukuran gambar ukuran kami dan 3 untuk lapisan warna merah, hijau dan biru dalam gambar.

Di sel keempat dan kelima, kami memuatkan gambar yang berisi tangan diikuti oleh gambar yang tidak mengandungi tangan dalam susunan numpy. Di sel keenam, kita membahagikan setiap nilai dengan 255 sehingga mengehadkan julat nilai dari 0 hingga 1. (Gambar # 3)

Saya minta maaf sekiranya gambar yang dilampirkan tidak cukup bagus. Berikut adalah pautan ke repositori GITHUB untuk anda melihat kodnya. Jangan lupa ganti nama laluan direktori dengan jalan anda:).

Bergerak bersama.

Seterusnya kita perlu melabel setiap gambar, jadi, kita membuat susunan numpy satu dimensi dengan panjang 157. 82 entri pertama diatur ke 1 dan selebihnya 75 entri diatur ke 0 menyampaikan rangkaian saraf yang 82 gambar pertama adalah dari satu kelas dan selebihnya dari yang lain. (Gambar # 4)

Sekarang mari kita buat rangkaian saraf.

Langkah 7: Rangkaian Neural

Rangkaian neural
Rangkaian neural
Rangkaian neural
Rangkaian neural

Di sel kesembilan, kita menentukan rangkaian saraf kita. Ia mengandungi tiga pengulangan lapisan konvolusi diikuti oleh lapisan maxpool dengan 8, 12 dan 16 penapis konvolusi masing-masing. Berikutan itu, kita mempunyai dua jaring saraf yang padat. Melampirkan dua gambar untuk langkah ini. Pertama adalah snap kod yang membuat rangkaian neural dan yang kedua adalah perwakilan bergambar dari rangkaian neural dengan dimensi output dan operasi yang dijelaskan.

Langkah 8: Latihan Rangkaian Neural

Latihan Neural Network
Latihan Neural Network

Di sel kesepuluh, kami mengkonfigurasi pengoptimal rangkaian neural untuk 'adam' dan fungsi kerugian menjadi 'binary_crossentropy'. Mereka memainkan peranan utama dalam bagaimana bobot rangkaian dikemas kini. Akhirnya ketika kita menjalankan sel kesebelas, rangkaian saraf mula melatih. Semasa rangkaian sedang melihat fungsi kehilangan dan pastikan ia menurun.

Langkah 9: Menguji Rangkaian Neural

Menguji Rangkaian Neural
Menguji Rangkaian Neural

Setelah rangkaian saraf dilatih, kita perlu menyediakan set data ujian. Kami mengulangi prosedur yang dilakukan untuk menyediakan set latihan pada sel ke-3, ke-4, ke-5 dan ke-6 pada data ujian untuk membuat set ujian. Kami juga menyediakan label untuk set ujian tetapi kali ini kami menjalankan model pada set data ini untuk mendapatkan ramalan dan tidak melatih.

Langkah 10: Hasil dan Bahagian Seterusnya…

Hasil dan Bahagian Seterusnya…
Hasil dan Bahagian Seterusnya…

Saya mendapat ketepatan ujian sebanyak 88% tetapi ambil ini dengan sedikit garam kerana dataset yang digunakan untuk melatih dan menguji model ini sangat kecil dan tidak mencukupi untuk melatih model ini dengan betul.

Bagaimanapun saya harap anda menikmati artikel ini. Niat saya di sebalik latihan ini belum selesai dan berjaga-jaga untuk bahagian ke-2. Saya akan memuat naiknya secepat mungkin.

Di bahagian seterusnya, kami akan melatih rangkaian saraf lain yang akan memberitahu kami lokasi tangan dalam gambar yang dikesan tangan.

Semua pertanyaan dialu-alukan.

Sekiranya ada yang berminat untuk menggunakan set data kecil saya, beritahu saya dalam komen. Saya akan menyediakannya.

Terima kasih untuk membaca. Saya akan berjumpa dengan anda dengan bahagian kedua sehingga kemudian mengapa anda tidak membuat dan melatih rangkaian saraf.

Edit: - Langkah seterusnya adalah untuk bahagian kedua.

Langkah 11: Pengesanan Objek

Pengesanan Objek
Pengesanan Objek

Pada langkah sebelumnya kami membuat NN yang memberitahu kami sama ada gambar ujian mengandungi tangan atau tidak. Nah apa seterusnya? Sekiranya NN mengelaskan gambar sebagai tangan yang ada, kami ingin mengetahui lokasi tangan. Ini disebut pengesanan objek dalam literatur penglihatan komputer. Oleh itu, mari kita latih NN yang sama.

Langkah 12: Video

Image
Image

Video 3 minit yang menerangkan semua langkah yang tinggal. Tengoklah.

Langkah 13: Pelabelan

Melabelkan
Melabelkan
Melabelkan
Melabelkan
Melabelkan
Melabelkan

Sekiranya anda mahukan rangkaian saraf untuk mengeluarkan lokasi tangan, kita perlu melatihnya sedemikian rupa, tidak seperti rangkaian neural sebelumnya di mana setiap gambar dilabel sama ada dengan tangan dan tanpa tangan. Kali ini semua gambar dengan tangan akan mempunyai empat label yang sesuai dengan koordinat pepenjuru dari kotak pengikat di sebelah tangan dalam gambar itu.

Gambar fail csv yang dilampirkan mengandungi label untuk setiap gambar. Harap maklum bahawa koordinat dinormalisasi dengan dimensi gambar iaitu jika koordinat X atas berada pada 320 piksel dalam gambar dengan lebar 640 piksel, kami akan melabelkannya sebagai 0,5.

Langkah 14: Melabel GUI

Melabel GUI
Melabel GUI
Melabel GUI
Melabel GUI
Melabel GUI
Melabel GUI
Melabel GUI
Melabel GUI

Anda mungkin tertanya-tanya bagaimana saya berjaya melabelkan semua 82 gambar, baik saya menulis GUI di python yang membantu saya menjalankan tugas ini. Setelah gambar dimuat dalam GUI. Saya klik kiri pada koordinat atas dan klik kanan pada koordinat bawah kemungkinan kotak pengikat di sekitar tangan. Koordinat ini kemudian ditulis ke fail berikut yang saya klik butang seterusnya untuk memuatkan gambar seterusnya. Saya mengulangi prosedur ini untuk semua 82 gambar kereta api dan 4 ujian. Setelah label siap, sudah tiba masanya latihan.

Langkah 15: Perpustakaan Diperlukan

Perpustakaan Diperlukan
Perpustakaan Diperlukan
Perpustakaan Diperlukan
Perpustakaan Diperlukan
Perpustakaan Diperlukan
Perpustakaan Diperlukan

Mula-mula kita perlu memuatkan semua perpustakaan yang diperlukan. Yang merangkumi

  • PIL untuk manipulasi gambar,
  • matplotlib untuk merancang,
  • numpy untuk operasi matriks,
  • os untuk fungsi yang bergantung pada sistem operasi dan
  • keras untuk rangkaian saraf.

Langkah 16: Sel yang Tinggal

Sel yang Tinggal
Sel yang Tinggal
Sel yang Tinggal
Sel yang Tinggal
Sel yang Tinggal
Sel yang Tinggal
Sel yang Tinggal
Sel yang Tinggal

Pada sel ke-2, ke-3, ke-4 dan ke-5 kita memuatkan gambar ke dalam susunan numpy dan membuat susunan empat dimensi dari fail csv untuk bertindak sebagai label. Dalam nombor sel 6 kita membuat rangkaian saraf kita. Senibina identik dengan rangkaian saraf yang digunakan untuk klasifikasi kecuali dimensi lapisan keluaran yang 4 dan bukan 1. Perbezaan lain datang dari fungsi kerugian yang digunakan iaitu ralat kuasa dua. Dalam nombor sel 8, kami memulakan latihan rangkaian neural kami setelah dilatih, saya menjalankan model ini pada set ujian untuk mendapatkan ramalan untuk kotak pembatas pada koordinat overlay dari kotak pengikat yang kelihatannya cukup tepat.

Terima kasih untuk membaca.

Disyorkan: