Daftar Isi:
- Langkah 1: Video
- Langkah 2: Perangkat Keras
- Langkah 3: Sepotong Kode
- Langkah 4: Mendapatkan Gambar
- Langkah 5: Alat dan Bahasa yang Digunakan
- Langkah 6: Mempersiapkan Dataset untuk Pelatihan
- Langkah 7: Jaringan Syaraf
- Langkah 8: Melatih Jaringan Saraf
- Langkah 9: Menguji Jaringan Neural
- Langkah 10: Hasil dan Bagian Selanjutnya…
- Langkah 11: Deteksi Objek
- Langkah 12: Video
- Langkah 13: Pelabelan
- Langkah 14: Pelabelan GUI
- Langkah 15: Perpustakaan Dibutuhkan
- Langkah 16: Sel yang Tersisa
2025 Pengarang: John Day | [email protected]. Terakhir diubah: 2025-01-13 06:57
Beberapa hari yang lalu, saya cedera pergelangan tangan kanan saya di gym. Setelah itu setiap kali saya menggunakan mouse komputer saya, itu menyebabkan banyak rasa sakit karena sudut pergelangan tangan yang curam.
Saat itulah saya tersadar " bukankah lebih bagus jika kita bisa mengubah permukaan apa pun menjadi trackpad " dan saya tidak tahu mengapa tetapi untuk beberapa alasan saya memikirkannya, film HER, saya akan membiarkan kalian mengetahuinya keluar. Itu adalah pemikiran yang menarik tetapi saya tidak tahu apakah saya bisa melakukannya, saya memutuskan untuk mencobanya.
Artikel ini menangkap apa yang keluar darinya.
Sebelum kita mulai, saya memiliki penafian-
' Di akhir artikel ini, saya tidak dapat mengubah permukaan apa pun menjadi trackpad tetapi saya tidak banyak belajar dan menambahkan alat-alat besar ke gudang senjata saya. Saya harap itu terjadi pada Anda juga'
Mari kita mulai.
Langkah 1: Video
Berikut adalah video kecil 5 menit yang mencakup semua langkah. Lihatlah.
Langkah 2: Perangkat Keras
Saya menyiapkan raspberry pi bersama dengan kamera raspberry pi pada ketinggian sekitar 45 cm. Ini memberi kita area pemantauan sekitar 25x25 cm di bawah kamera.
Raspberry pi dan kamera raspberry pi tersedia dengan mudah, hanya google dan Anda harus dapat menemukan toko lokal.
Lihatlah Tautan ini atau salah satu daftar putar Raspberry pi saya untuk mengaktifkan dan menjalankan pi tanpa kepala Anda.
Setelah pengaturan ini, kita memerlukan sepotong kode yang memutuskan apakah ada tangan di area yang dipantau kamera dan jika demikian, di mana itu.
Langkah 3: Sepotong Kode
Sepotong kode yang memungkinkan kita memutuskan apakah ada tangan di bidang minat menggunakan sesuatu yang disebut Neural Network. Mereka termasuk dalam kategori pemrograman di mana kami tidak mendefinisikan aturan untuk membuat keputusan, tetapi kami menunjukkan data jaringan saraf yang cukup sehingga aturan itu sendiri.
Dalam kasus kami, alih-alih mengkodekan tampilan tangan, kami menampilkan gambar jaringan saraf yang diambil dari raspberry pi yang berisi tangan dan yang tidak berisi tangan. Fase ini disebut pelatihan jaringan saraf dan gambar yang digunakan disebut dataset pelatihan.
Langkah 4: Mendapatkan Gambar
Saya login jarak jauh ke raspberry pi saya dan mengambil banyak gambar menggunakan perintah 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 tanpa tangan. 160 gambar tidak cukup untuk melatih jaringan saraf dengan benar tetapi harus cukup untuk bukti konsep.
Selain 160 gambar, saya mengambil 20 gambar lagi untuk menguji jaringan kami setelah dilatih.
Setelah dataset siap, saya mulai menulis kode untuk jaringan saraf.
Langkah 5: Alat dan Bahasa yang Digunakan
Saya menulis jaringan saraf saya di perpustakaan pembelajaran mendalam python yang disebut Keras dan kode ditulis di notebook jupyter dari anaconda navigator.
Langkah 6: Mempersiapkan Dataset untuk Pelatihan
Pertama (Gambar #1) Saya menyertakan semua perpustakaan yang diperlukan untuk proyek ini, yang meliputi PIL, matplotlib, numpy, os dan Keras. Di sel kedua notebook python (Gambar # 2) saya menentukan jalur ke dataset dan mencetak jumlah sampel. Sekarang kita perlu memuat semua gambar ke dalam array numpy, maka di sel ketiga (Gambar #2) saya membuat array numpy 82 (jumlah sampel tangan)+75 (jumlah sampel bukan tangan) yaitu 157x100x100x3. 157 adalah jumlah total gambar yang saya miliki, 100x100 adalah dimensi gambar yang diubah ukurannya dan 3 untuk lapisan warna merah, hijau dan biru dalam gambar.
Di sel keempat dan kelima, kami memuat gambar yang berisi tangan diikuti oleh gambar yang tidak berisi tangan dalam array numpy. Di sel keenam, kami membagi setiap nilai dengan 255 sehingga membatasi rentang nilai dari 0 hingga 1. (Gambar #3)
Saya minta maaf jika gambar terlampir tidak cukup baik. Berikut ini tautan ke repositori GITHUB agar Anda dapat melihat kodenya. Jangan lupa untuk mengganti nama jalur direktori dengan jalur Anda:).
Bergerak bersama.
Selanjutnya kita perlu memberi label pada setiap gambar, jadi, kita membuat array numpy satu dimensi dengan panjang 157. 82 entri pertama diatur ke 1 dan sisanya 75 entri diatur ke 0 menyampaikan jaringan saraf bahwa 82 gambar pertama berasal dari satu kelas dan sisanya dari yang lain.(Gambar #4)
Sekarang mari kita buat jaringan saraf.
Langkah 7: Jaringan Syaraf
Di sel kesembilan, kami mendefinisikan jaringan saraf kami. Ini berisi tiga pengulangan lapisan konvolusi diikuti oleh lapisan maxpool dengan 8, 12 dan 16 filter konvolusi masing-masing. Setelah itu kita memiliki dua jaring saraf padat. Melampirkan dua gambar untuk langkah ini. Pertama adalah snap kode yang membuat neural network dan kedua adalah representasi bergambar dari neural network dengan dimensi output dan operasi yang dianotasi.
Langkah 8: Melatih Jaringan Saraf
Di sel kesepuluh, kami mengonfigurasi pengoptimal jaringan saraf ke 'adam' dan fungsi kehilangan ke 'binary_crossentropy'. Mereka memainkan peran utama dalam bagaimana bobot jaringan diperbarui. Akhirnya ketika kami menjalankan sel kesebelas, jaringan saraf mulai berlatih. Saat jaringan sedang dilatih, perhatikan fungsi kerugian dan pastikan bahwa itu berkurang.
Langkah 9: Menguji Jaringan Neural
Setelah jaringan saraf dilatih, kita perlu menyiapkan kumpulan data uji. Kami mengulangi prosedur yang dilakukan untuk menyiapkan set pelatihan di sel ke-3, ke-4, ke-5 dan ke-6 pada data uji untuk membuat set uji. Kami juga menyiapkan label untuk set uji tetapi kali ini kami menjalankan model pada set data ini untuk mendapatkan prediksi dan bukan untuk melatih.
Langkah 10: Hasil dan Bagian Selanjutnya…
Saya mendapatkan akurasi pengujian 88% tetapi mengambil ini dengan sedikit garam karena dataset yang digunakan untuk melatih dan menguji model ini sangat sangat sangat kecil dan tidak memadai untuk melatih model ini dengan benar.
Bagaimanapun saya harap Anda menikmati artikel ini. Niat saya di balik latihan ini belum selesai dan hati-hati untuk bagian ke-2. Saya akan mengunggahnya sesegera mungkin.
Di bagian selanjutnya, kita akan melatih jaringan saraf lain yang akan memberi tahu kita lokasi tangan dalam gambar yang terdeteksi tangan.
Semua pertanyaan dipersilakan.
Jika ada yang tertarik menggunakan dataset kecil saya, beri tahu saya di komentar. Saya akan membuatnya tersedia.
Terima kasih sudah membaca. Saya akan melihat Anda segera dengan bagian kedua sampai saat itu mengapa Anda tidak membuat dan melatih jaringan saraf.
Sunting: - Langkah selanjutnya adalah untuk bagian kedua.
Langkah 11: Deteksi Objek
Pada langkah sebelumnya kami membuat NN yang memberi tahu kami apakah gambar uji berisi tangan atau tidak. Nah apa selanjutnya? Jika NN mengklasifikasikan gambar sebagai tangan yang berisi, kami ingin mengetahui lokasi tangan tersebut. Ini disebut deteksi objek dalam literatur visi komputer. Jadi mari kita latih NN yang melakukan hal yang persis sama.
Langkah 12: Video
Video berdurasi 3 menit yang menjelaskan semua langkah yang tersisa. Lihatlah.
Langkah 13: Pelabelan
Jika Anda ingin jaringan saraf ke lokasi keluaran tangan, kita perlu melatihnya sedemikian rupa yaitu tidak seperti jaringan saraf sebelumnya di mana setiap gambar diberi label baik dengan tangan dan tanpa tangan. Kali ini semua gambar dengan tangan akan memiliki empat label yang sesuai dengan koordinat diagonal kotak pembatas di sekitar tangan pada gambar tersebut.
Gambar terlampir dari file csv berisi label untuk setiap gambar. Harap dicatat bahwa koordinat dinormalisasi dengan dimensi gambar yaitu jika koordinat X atas berada pada piksel ke-320 pada gambar dengan lebar 640 piksel, kami akan memberi label sebagai 0,5.
Langkah 14: Pelabelan GUI
Anda mungkin bertanya-tanya bagaimana saya berhasil melabeli semua 82 gambar, saya menulis GUI dengan python yang membantu saya dengan tugas ini. Setelah gambar dimuat di GUI. Saya klik kiri pada koordinat atas dan klik kanan pada koordinat bawah kotak pembatas kemungkinan di sekitar tangan. Koordinat ini kemudian ditulis ke file berikut yang saya klik tombol berikutnya untuk memuat gambar berikutnya. Saya mengulangi prosedur ini untuk semua 82 kereta dan 4 gambar uji. Setelah label siap, saatnya pelatihan.
Langkah 15: Perpustakaan Dibutuhkan
Pertama kita perlu memuat semua perpustakaan yang diperlukan. Yang mana termasuk
- PIL untuk manipulasi gambar,
- matplotlib untuk merencanakan,
- numpy untuk operasi matriks,
- os untuk fungsionalitas yang bergantung pada sistem operasi dan
- keras untuk jaringan saraf.
Langkah 16: Sel yang Tersisa
Di sel ke-2, ke-3, ke-4 dan ke-5 kita memuat gambar ke dalam array numpy dan membuat array empat dimensi dari file csv untuk bertindak sebagai label. Di sel nomor 6 kami membuat jaringan saraf kami. Arsitekturnya identik dengan jaringan syaraf tiruan yang digunakan untuk klasifikasi kecuali dimensi output layer yaitu 4 dan bukan 1. Perbedaan lain berasal dari fungsi loss yang digunakan yaitu mean squared error. Di sel nomor 8 kami memulai pelatihan jaringan saraf kami setelah dilatih. Saya menjalankan model ini pada set pengujian untuk mendapatkan prediksi untuk kotak pembatas pada koordinat overlay kotak pembatas, mereka terlihat cukup akurat.
Terima kasih sudah membaca.