Isi kandungan:
- Bekalan
- Langkah 1: Mengumpulkan Sampel Suara Dapur
- Langkah 2: Menyiapkan Arduino / Matrix Display
- Langkah 3: Menjalankan Pengelas dan Mengenal Bunyi
- Langkah 4: Membuat Perumahan LEGO
Video: Pengecam Suara Dapur Custom: 4 Langkah
2024 Pengarang: John Day | [email protected]. Diubah suai terakhir: 2024-01-30 11:09
Untuk projek akhir kami dalam kursus sistem interaktif pada musim bunga ini, kami membuat sistem masa nyata untuk mengenal pasti dan memvisualisasikan bunyi biasa di dapur menggunakan klasifikasi Mesin Sokongan-Vektor. Sistem ini terdiri daripada komputer riba untuk pensampelan / klasifikasi audio, dan paparan Arduino / dot matrix untuk visualisasi. Berikut ini adalah panduan untuk membuat versi sistem anda sendiri untuk bunyi dari dapur anda sendiri.
Sarung penggunaan asal kami adalah sebagai alat untuk dapur individu pekak dan pendengaran, tetapi sistem ini secara teorinya dapat disesuaikan untuk mengenal pasti sekumpulan suara dalam berbagai konteks. Dapur adalah tempat yang ideal untuk memulakan, kerana cenderung agak sepi dan berisi sejumlah suara sederhana dan berbeza.
Repositori GitHub untuk projek ini boleh didapati di sini.
Bekalan
- Arduino Leonardo Mikrokontroler dengan tajuk
- Paparan LED KEYESTUDIO 16x16 Dot Matrix untuk Arduino
- Kawat pelompat papan roti
- Kabel mikro-USB ke USB 2.0
-
Komputer riba dengan Jupyter Notebook (pemasangan Anaconda)
Panduan pemula untuk Jupyter Notebook boleh didapati di sini
-
Sebilangan besar batu bata LEGO yang tidak sesuai untuk perumahan sistem
(Tetapi anda boleh menggantinya dengan bahan binaan DIY yang anda mahukan!)
Langkah 1: Mengumpulkan Sampel Suara Dapur
Gambar Di Atas: Data audio diambil dari merakam garpu dan pisau yang bergumpal bersama-sama menggunakan proses pengumpulan ini
Untuk mengenal pasti bunyi masa nyata, kita perlu menyediakan model pembelajaran mesin kita dengan contoh yang berkualiti untuk perbandingan. Kami membuat notebook Jupyter untuk proses ini, yang dapat diakses di sini atau melalui repositori GitHub projek kami. Repositori ini juga mengandungi koleksi sampel dari dua dapur yang berbeza untuk tujuan ujian.
Langkah 1.1: Salin buku nota CollectSamples.ipynb ke direktori Jupyter Notebook anda yang berfungsi dan buka.
Langkah 1.2: Jalankan setiap sel satu demi satu, perhatikan setiap nota yang telah kami berikan dalam tajuk. Berhenti apabila anda mencapai tajuk yang bertajuk "Contoh Rakaman".
CATATAN: Beberapa perpustakaan Python digunakan dalam buku nota ini, dan masing-masing memerlukan pemasangan sebelum berjaya diimport ke dalam projek. Anda boleh melakukannya secara manual, walaupun panduan pemasangan perpustakaan di dalam Jupyter Notebook boleh didapati di sini.
Langkah 1.3: Buat direktori kosong untuk menyimpan sampel anda dalam direktori kerja anda untuk projek ini.
Langkah 1.4: Edit pemboleh ubah SAMPLES_LOCATION di sel "Rakaman Sampel" untuk memadankan lokasi direktori kosong anda.
Langkah 1.5: Tambah atau keluarkan seberapa banyak suara yang anda mahu ke pemboleh ubah SOUND_LABELS.
Agar kod rakaman sampel berfungsi, setiap baris pemboleh ubah ini mesti dipisahkan dengan koma dan bentuk berikut:
'ts': Suara ("Bunyi Sasaran", "ts")
Langkah 1.6: Apabila semua label telah ditambahkan, menilai sel "Rakaman Sampel" dengan memulakan proses pengumpulan sampel. Dalam output sel, anda akan diminta memasukkan kod pendek yang anda kaitkan dengan setiap suara di label (iaitu, "ts" untuk TargetedSound). Jangan buat ini.
Langkah 1.7: Bawa komputer riba ke dapur dan letakkan di kawasan yang kemungkinan besar anda akan meletakkan sistem yang sudah siap. Lokasi ini harus menjadi pusat pengumpulan audio yang baik, dan kering dan jauh dari tumpahan yang mungkin untuk melindungi elektronik anda.
Langkah 1.8: Sediakan suara sasaran pertama anda. Sekiranya ini adalah bip pemasa ketuhar, anda mungkin menetapkan pemasa menjadi satu minit dan menantinya menghitung hingga 20 saat atau lebih sebelum meneruskan ke langkah seterusnya.
Langkah 1.9: Ketikkan kod label ke prompt (iaitu, "ts"), dan tekan Enter / Return.
Sistem akan mula mendengar acara bunyi yang berbeza dari kebisingan persekitaran bilik. Setelah merasakan peristiwa bunyi ini, ia akan mula merakam sehingga merasakan bunyi di dalam bilik telah kembali ke tahap sekitar. Ia kemudian akan menyimpan audio sebagai fail WAV 16-bit ke direktori yang dikenal pasti dalam SAMPLES_LOCATION dalam format:
TargetedSound _ # _ ditangkap.wav
Bahagian # nama fail ini sesuai dengan jumlah sampel suara yang anda kumpulkan. Setelah fail WAV disimpan, permintaan akan berulang, membolehkan anda mengumpulkan beberapa sampel bunyi yang sama dalam satu pelaksanaan sel.
JANGAN menukar nama fail ini. Penting untuk langkah seterusnya.
Langkah 1.10: Ulangi langkah 1.8 dan 1.9 sehingga anda telah mengumpulkan 5-10 sampel setiap bunyi.
Langkah 1.11: Masukkan "x" apabila selesai untuk keluar dari pelaksanaan.
PERINGATAN: Kegagalan untuk mematikan sel dengan cara ini boleh menyebabkan Notebook rosak. Dalam kes ini, kernel Notebook mesti diset semula dan setiap sel berjalan semula dari atas.
Langkah 1.11 (Pilihan): Periksa data WAV setiap fail dalam sel "Visualisasi Suara Pantas" untuk memastikan anda menangkap semua maklumat yang diinginkan.
Sedikit tips:
- Rakam ketika dapur anda sunyi.
- Rakam hanya satu suara sekaligus. Sistem tidak dapat membezakan pertindihan bunyi.
- Cuba buat setiap percubaan suara yang konsisten mungkin. Ini akan membantu ketepatan pengenalan.
- Menilai semula sel Rakaman akan menetapkan semula nilai # dalam nama fail dan menimpa fail yang ada yang sepadan dengan #. Kami merasa paling mudah untuk merakam semua sampel satu bunyi sekaligus, kemudian hentikan sel Rakaman.
- Sekiranya sistem tidak mengambil suara yang disasarkan, cuba turunkan nilai THRESHOLD (tetapkan ke 30 untuk memulakan) dan nilaikan semula sel.
- Sekiranya rakaman dipicu oleh bunyi lain di luar yang disasarkan, cuba tingkatkan nilai THRESHOLD (tetapkan ke 30 untuk memulakan) dan nilaikan semula sel.
Langkah 2: Menyiapkan Arduino / Matrix Display
Seterusnya, kita akan mengatur sistem visualisasi menggunakan paparan dot matrix Arduino Leonardo dan KEYESTUDIO 16x16 LED. Ini untuk menghasilkan ramalan model klasifikasi bunyi yang dikesan. Seperti sebelumnya, kami telah menyediakan semua fail yang diperlukan di sini dan di repositori GitHub projek.
Langkah 2.1: Kabel matriks Arduino dan LED mengikut rajah di atas. KEYESTUDIO merangkumi wayar untuk disambungkan ke matriks dotnya, tetapi kabel jumper papan roti akan diperlukan untuk menyambungkan wayar ini ke Arduino
Langkah 2.2: Buka "arduino_listener.ino" menggunakan Ardunio IDE dan muat naik ke Leonardo. Sekiranya dikabelkan dengan betul, anda akan melihat ikon "mendengar" (kelihatan seperti Wi-Fi) seperti yang ditunjukkan dalam gambar di atas.
Langkah 2.3: Siapkan ikon yang ingin anda paparkan untuk setiap bunyi sasaran anda. Untuk mengetahui LED mana yang akan menyala, ikon mesti dihantar dari Arduino ke matriks sebagai tatasusunan bait. Sebagai contoh, ikon cawan kopi kami (dalam gambar di atas) dihantar ke matriks dalam format ini:
{
0xff, 0xff, 0xff, 0xff, 0xfc, 0xfb, 0xbb, 0x5b, 0xeb, 0xfb, 0xfb, 0xfc, 0xfe, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x0f, 0xf, 0xf, 0xf, 0xf 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff};
Kami menarik ikon kami menggunakan alat dalam talian Dot2Pic, dengan 16 lajur, 16 baris, dan "monokromatik, 8 piksel per bait, tetapan menegak" yang dipilih dari menu lungsur. Kita boleh didapati dalam array "sample_icon_bytes.txt".
CATATAN: Mungkin ada juga alat dalam talian yang dapat melakukannya secara automatik dengan fail yang dimuat naik.
Langkah 2.4: Lukis setiap ikon. Setelah selesai melukis, pilih "Convert to array".
Langkah 2.5: Ganti ikon yang tidak diperlukan yang ditentukan di bahagian atas kod "arduino_listening.ino" seperti yang dikehendaki. Pastikan anda menambah komen yang menerangkan ikon sehingga anda ingat yang mana!
Langkah 2.6: Muat naik kod baru ke Arduino. Jangan tutup fail, kami memerlukannya untuk langkah seterusnya.
Langkah 3: Menjalankan Pengelas dan Mengenal Bunyi
Kini tiba masanya untuk menyatukan sistem. Saluran klasifikasi, komunikasi Arduino, dan tangkapan audio langsung semuanya dilakukan melalui satu notebook Arduino tunggal, yang telah disediakan di sini atau dapat diakses melalui repositori GitHub projek kami.
Langkah 3.1: Salin buku nota FullPipeline.ipynb ke direktori Jupyter Notebook yang berfungsi dan buka.
Langkah 3.2: Jalankan setiap sel satu demi satu, perhatikan setiap nota yang telah kami berikan dalam tajuk. Tidak ada output yang diharapkan. Berhenti apabila anda mencapai sel yang bertajuk "Muatkan Data Latihan".
Langkah 3.3: Edit pemboleh ubah SAMPLES_LOCATION_ROOT dalam sel "Muatkan Data Latihan" ke direktori induk lokasi direktori sampel terdahulu anda. Kemudian, ubah pemboleh ubah SAMPLES_DIR_NAME ke nama direktori anda. Oleh itu, jika anda telah menetapkan lokasi di CollectSamples.ipynb kepada:
SAMPLES_LOCATION = "/ Pengguna / xxxx / Dokumen / KitchenSoundClassifier / MySamples / NewDir"
Anda sekarang akan menetapkan pemboleh ubah ini kepada:
SAMPLES_LOCATION_ROOT = "/ Pengguna / xxxx / Dokumen / KitchenSoundClassifier / MySamples /" SAMPLES_DIR_NAME = "NewDir"
Kami melakukan ini memungkinkan perubahan pesat pada pengklasifikasi sekiranya berlaku ketidaktepatan. Anda boleh beralih antara koleksi sampel yang berbeza untuk menyesuaikan data anda.
Langkah 3.4: Menilai sel. Anda mesti melihat setiap koleksi berjaya dimuatkan.
Langkah 3.5: Terus jalankan setiap sel satu demi satu, perhatikan setiap nota yang telah kami berikan dalam tajuk.
Langkah 3.6: Berhenti semasa anda mencapai sel "Messaging Arduino". Tentukan port bersiri yang akan digunakan komputer anda untuk komunikasi dengan Arduino dalam pemboleh ubah PORT_DEF. Ini boleh didapati di Arduino IDE dan pergi ke Tools> Port.
Maklumat lebih lanjut boleh didapati di sini.
Langkah 3.8: Buka semula Arduino IDE anda. Di tempat di mana anda membuat perubahan pada ikon, buat catatan huruf di sebelah nilai array, tetapi JANGAN mengubahnya. Dalam contoh di bawah, ini adalah "g".
// pelupusan sampahst tidak ditandatangani char g [1] [32] = {0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xf8, 0xf7, 0xf7, 0xfb, 0xff, 0xfe, 0xfd, 0xfb, 0xff, 0xff, 0xff, 0xff, 0xff, 0x2f, 0x27, 0xc3, 0x03, 0xc3, 0x27, 0x2f, 0xff, 0xef, 0xdf, 0xbf, 0xff, 0xff,};
Langkah 3.7: (Kembali ke sel "Pemesejan Arduino" dari Notebook) Tukar label dalam kamus self.sound agar sesuai dengan label yang anda gunakan dalam merakam sampel anda, pastikan setiap label sesuai dengan satu huruf yang anda catat sebelumnya langkah. "Rakaman" dan "Mendengarkan" adalah sebahagian daripada fungsi sistem teras dan tidak boleh diubah. JANGAN mengubah huruf kedua kecuali anda merasa yakin untuk membuat beberapa perubahan tambahan pada kod Arduino juga, kerana ini akan merosakkan komunikasi dengan Arduino / matriks sebaliknya.
Langkah 3.8: Jalankan fungsi utama! Kod tersebut akan mengambil data latihan, mengekstrak ciri utamanya, memasukkannya ke dalam perancangan, membina model klasifikasi, dan kemudian mula mendengar peristiwa yang baik. Apabila merasakannya, anda akan melihat matriks berubah menjadi simbol rakaman (persegi dengan bulatan di dalamnya) dan ia akan membahagikan data ini dan memasukkannya ke dalam model. Apa sahaja yang diramalkan oleh model akan muncul beberapa saat kemudian di paparan matriks.
Anda boleh mengikuti output sel di bawah. Lihat seberapa tepat anda boleh mendapatkannya!
Langkah 4: Membuat Perumahan LEGO
Ini adalah bahagian yang menyeronokkan! Anda telah melakukan semua langkah pembelajaran mesin yang serius dan menjalankan keseluruhan sistem end-to-end, dan sekarang anda boleh bermain dengan LEGO sebagai ganjaran. Tidak banyak proses untuk diperincikan di sini. Kami baru saja menambahkan blok yang kami sukai di sana sini tanpa terlalu bimbang tentang keseluruhan reka bentuknya, dan akhirnya kami gembira dengan hasilnya.
Benarkan gambar kami berfungsi sebagai inspirasi untuk perumahan kreatif anda sendiri yang unik untuk dapur anda. Kami meletakkan Arduino dan sebahagian besar pendawaian dalam casing berlubang, kemudian mengamankan paparan matriks di atas dengan overhang. Kami menambahkan sedikit kertas di atas paparan untuk menyebarkan cahaya sedikit yang kami rasa menjadikan ikon lebih jelas.
Disyorkan:
Sistem Pengecam dan Pemadam Kebakaran Berdasarkan Pemprosesan Imej: 3 Langkah
Sistem Pengecaman dan Pemadam Kebakaran Berdasarkan Pemprosesan Imej: Halo kawan-kawan ini adalah sistem pengesanan dan pemadam api berasaskan pemprosesan imej menggunakan Arduino
Pengecam Gerak Tangan: 5 Langkah
Hand Motion Recognizer: Gambaran keseluruhanDalam projek ini, kami akan membuat sarung tangan yang dapat mengenali beberapa pergerakan tangan asas, menggunakan MicroBit, dan beberapa sensor. Kami akan menggunakan keupayaan Bluetooth pada MicroBit, bersama dengan Aplikasi Android dan Pelayan Web untuk melatih
Robp Pengecam Tanda Lalu Lintas Raspberry Pi 4: 6 Langkah
Robp Pengecam Tanda Lalu Lintas Raspberry Pi 4: Arahan ini berdasarkan projek universiti saya. Tujuannya adalah untuk membuat sistem di mana jaringan saraf menganalisis gambar dan kemudian berdasarkan pengakuan akan memberitahu robot arduino untuk bergerak melalui Ros. Sebagai contoh jika tanda belok kanan dikenali
Pengecam Digit Dengan Python: 3 Langkah
Digit Recognizer With Python: Un tema yang sangat popular dan populariti "Computer Vision" que terdiri daripada perisian latarea de crear capaz de reconocer patrones dentro de imágenes. Yang boleh dibayangkan, anda boleh mengizinkan dan memperbesar
Pengecam berbilang bahasa Dengan AIY: 4 Langkah
Pengecam berbilang bahasa dengan AIY: Di stesen angkasa lepas. Terdapat banyak angkasawan di sana. Angkasawan berasal dari banyak planet (negara). jadi, untuk ituAI harus berfungsi dalam banyak bahasa di sana