Daftar Isi:

Pengenal Suara Dapur Kustom: 4 Langkah
Pengenal Suara Dapur Kustom: 4 Langkah

Video: Pengenal Suara Dapur Kustom: 4 Langkah

Video: Pengenal Suara Dapur Kustom: 4 Langkah
Video: JANGAN CAKAP AKAK TAK PAYUNG!!! Mih Akak Belanja 😜 2024, November
Anonim
Image
Image
Pengenal Suara Dapur Kustom
Pengenal Suara Dapur Kustom

Untuk tugas akhir kami dalam kursus sistem interaktif musim semi ini, kami membuat sistem waktu nyata untuk mengidentifikasi dan memvisualisasikan suara umum di dapur menggunakan klasifikasi Mesin Support-Vector. Sistem ini terdiri dari laptop untuk pengambilan sampel/klasifikasi audio, dan tampilan Arduino/dot matrix untuk visualisasi. Berikut ini adalah panduan untuk membuat versi Anda sendiri dari sistem ini untuk suara dari dapur Anda sendiri.

Kasus penggunaan asli kami adalah sebagai perangkat untuk dapur individu tunarungu dan tuna rungu, tetapi sistem ini secara teoritis dapat disesuaikan untuk mengidentifikasi serangkaian suara dalam berbagai konteks. Dapur adalah tempat yang ideal untuk memulai, karena cenderung relatif tenang dan memiliki cukup banyak suara sederhana dan berbeda.

Repositori GitHub untuk proyek ini dapat ditemukan di sini.

Perlengkapan

  • Mikrokontroler Arduino Leonardo dengan header
  • KEYESTUDIO 16x16 Dot Matrix LED Display untuk Arduino
  • Kabel jumper papan tempat memotong roti
  • Kabel Micro-USB ke USB 2.0
  • Laptop dengan Jupyter Notebook (instalasi Anaconda)

    Panduan pemula untuk Jupyter Notebook dapat ditemukan di sini

  • Sejumlah besar batu bata LEGO yang tidak cocok untuk perumahan sistem

    (Tapi sebenarnya Anda bisa menggantinya dengan bahan bangunan DIY apa pun yang Anda suka!)

Langkah 1: Mengumpulkan Sampel Suara Dapur

Mengumpulkan Sampel Suara Dapur
Mengumpulkan Sampel Suara Dapur

Gambar Atas: Data audio yang diambil dari rekaman dentingan garpu dan pisau menggunakan proses pengumpulan ini

Untuk mengidentifikasi suara waktu nyata, kami perlu menyediakan model pembelajaran mesin kami dengan contoh kualitas untuk perbandingan. Kami membuat notebook Jupyter untuk proses ini, yang dapat diakses di sini atau melalui repositori GitHub proyek kami. Repositori juga berisi koleksi sampel dari dua dapur berbeda untuk tujuan pengujian.

Langkah 1.1: Salin buku catatan CollectSamples.ipynb ke direktori Notebook Jupyter Anda yang berfungsi dan buka.

Langkah 1.2: Jalankan setiap sel satu per satu, perhatikan catatan yang kami berikan di judul. Berhentilah ketika Anda mencapai satu yang berjudul "Contoh Rekaman".

CATATAN: Beberapa pustaka Python digunakan dalam buku catatan ini, dan masing-masing pustaka memerlukan penginstalan sebelum dapat berhasil diimpor ke proyek. Anda dapat melakukannya secara manual, meskipun panduan untuk instalasi perpustakaan dalam Jupyter Notebook dapat ditemukan di sini.

Langkah 1.3: Buat direktori kosong untuk menyimpan sampel Anda di dalam direktori kerja Anda untuk proyek ini.

Langkah 1.4: Edit variabel SAMPLES_LOCATION di sel "Sample Recording" agar sesuai dengan lokasi direktori kosong Anda.

Langkah 1.5: Tambahkan atau hapus suara sebanyak yang Anda suka ke variabel SOUND_LABELS.

Agar contoh kode perekaman berfungsi, setiap baris variabel ini harus dipisahkan dengan koma dan dengan format berikut:

'ts':Suara("Suara yang Ditargetkan", "ts")

Langkah 1.6: Ketika semua label telah ditambahkan, evaluasi sel "Perekaman Sampel" dengan memulai proses pengumpulan sampel. Di output sel, Anda akan diminta untuk memasukkan kode pendek yang Anda kaitkan dengan setiap suara di label (yaitu, "ts" untuk TargetedSound). Jangan lakukan ini dulu.

Langkah 1.7: Bawa laptop Anda ke dapur dan letakkan di area yang kemungkinan besar akan Anda tempatkan sistem yang sudah jadi. Lokasi ini harus menjadi pusat untuk pengumpulan audio yang baik, dan kering dan jauh dari kemungkinan tumpahan untuk melindungi elektronik Anda.

Langkah 1.8: Siapkan suara target pertama Anda. Jika ini adalah bunyi bip timer oven, Anda dapat menyetel timer ke satu menit dan menunggu hingga hitungan mundur hingga 20 detik atau lebih sebelum melanjutkan ke langkah berikutnya.

Langkah 1.9: Ketik kode label ke prompt (yaitu, "ts"), dan tekan Enter/Return.

Sistem akan mulai mendengarkan peristiwa suara yang berbeda dari kebisingan sekitar ruangan. Setelah merasakan peristiwa suara ini, ia akan mulai merekam hingga merasakan suara di dalam ruangan telah kembali ke tingkat sekitar. Ini kemudian akan menyimpan audio sebagai file WAV 16-bit ke direktori yang diidentifikasi di SAMPLES_LOCATION dalam format:

TargetedSound_#_captured.wav

Bagian # dari nama file ini sesuai dengan jumlah sampel suara target yang telah Anda kumpulkan. Setelah file WAV disimpan, prompt akan berulang, memungkinkan Anda untuk mengumpulkan beberapa sampel suara yang sama dalam satu eksekusi sel.

JANGAN ubah nama file ini. Penting untuk langkah selanjutnya.

Langkah 1.10: Ulangi langkah 1.8 dan 1.9 hingga Anda mengumpulkan 5-10 sampel dari setiap suara.

Langkah 1.11: Masukkan "x" setelah selesai untuk keluar dari eksekusi.

PERINGATAN: Kegagalan untuk keluar dari sel dengan cara ini dapat menyebabkan Notebook mogok. Dalam hal ini, kernel Notebook harus direset dan setiap sel dijalankan kembali dari atas.

Langkah 1.11 (Opsional): Periksa data WAV file individual di sel "Visualisasi Suara Cepat" untuk memastikan Anda menangkap semua informasi yang diinginkan.

Beberapa kiat:

  • Rekam saat dapur Anda sepi.
  • Rekam hanya satu suara sekaligus. Sistem tidak dapat membedakan tumpang tindih dalam suara.
  • Cobalah untuk membuat setiap percobaan suara sekonsisten mungkin. Ini akan membantu keakuratan identifikasi.
  • Mengevaluasi ulang sel Perekaman akan mengatur ulang nilai # dalam nama file dan menimpa file yang ada yang cocok dengan # itu. Kami merasa paling mudah untuk merekam semua sampel dari satu suara sekaligus, lalu menghentikan sel Perekaman.
  • Jika sistem tidak menangkap suara yang Anda targetkan, coba turunkan nilai THRESHOLD (atur ke 30 untuk memulai) dan evaluasi ulang sel.
  • Jika rekaman dipicu oleh suara lain di luar yang ditargetkan, coba naikkan nilai THRESHOLD (diatur ke 30 untuk memulai) dan evaluasi ulang sel.

Langkah 2: Mempersiapkan Tampilan Arduino/Matriks

Mempersiapkan Tampilan Arduino/Matriks
Mempersiapkan Tampilan Arduino/Matriks
Mempersiapkan Tampilan Arduino/Matriks
Mempersiapkan Tampilan Arduino/Matriks
Mempersiapkan Tampilan Arduino/Matriks
Mempersiapkan Tampilan Arduino/Matriks

Selanjutnya, kita akan menyiapkan sistem visualisasi menggunakan tampilan dot matrix LED Arduino Leonardo dan KEYESTUDIO 16x16. Ini untuk menampilkan prediksi model klasifikasi dari suara yang terdeteksi. Seperti sebelumnya, kami telah menyediakan semua file yang diperlukan baik di sini maupun di repositori GitHub proyek.

Langkah 2.1: Hubungkan matriks Arduino dan LED sesuai dengan diagram di atas. KEYESTUDIO menyertakan kabel untuk terhubung ke dot matrix mereka, tetapi kabel jumper papan tempat memotong roti akan diperlukan untuk menghubungkan kabel ini ke Arduino

Langkah 2.2: Buka "arduino_listener.ino" menggunakan Arduino IDE dan unggah ke Leonardo. Jika terhubung dengan benar, Anda akan melihat ikon "mendengarkan" (terlihat seperti Wi-Fi) seperti yang ditunjukkan pada gambar di atas.

Langkah 2.3: Siapkan ikon yang ingin Anda tampilkan untuk setiap suara target Anda. Untuk mengetahui LED mana yang menyala, ikon harus dikirim dari Arduino ke matriks sebagai array byte. Misalnya, ikon cangkir kopi kami (pada gambar di atas) dikirim 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, 0xf7, 0xfb 0xfb, 0xf7, 0x0f, 0xdf, 0x1f, 0xff, 0xff };

Kami menggambar ikon kami menggunakan alat online Dot2Pic, dengan 16 kolom, 16 baris, dan "monokromatik, 8 piksel per byte, pengaturan vertikal" dipilih dari menu tarik-turun. Milik kami dapat ditemukan di larik "sample_icon_bytes.txt".

CATATAN: Mungkin juga ada alat online yang dapat melakukan ini secara otomatis dengan file yang diunggah.

Langkah 2.4: Gambar setiap ikon. Setelah selesai menggambar, pilih "Convert to the array".

Langkah 2.5: Ganti ikon yang tidak diperlukan yang ditentukan di bagian atas kode "arduino_listening.ino" sesuai keinginan. Pastikan untuk menambahkan komentar yang menjelaskan ikon sehingga Anda ingat yang mana!

Langkah 2.6: Unggah kode baru ke Arduino. Jangan tutup dulu filenya, kita akan membutuhkannya untuk langkah selanjutnya.

Langkah 3: Menjalankan Pengklasifikasi dan Mengidentifikasi Suara

Menjalankan Pengklasifikasi dan Mengidentifikasi Suara
Menjalankan Pengklasifikasi dan Mengidentifikasi Suara
Menjalankan Pengklasifikasi dan Mengidentifikasi Suara
Menjalankan Pengklasifikasi dan Mengidentifikasi Suara

Sekarang saatnya untuk menyatukan sistem. Pipa klasifikasi, komunikasi Arduino, dan pengambilan audio langsung semuanya dilakukan melalui satu notebook Arduino, yang telah disediakan di sini atau dapat diakses melalui repositori GitHub proyek kami.

Langkah 3.1: Salin notebook FullPipeline.ipynb ke direktori Notebook Jupyter Anda yang berfungsi dan buka.

Langkah 3.2: Jalankan setiap sel satu per satu, perhatikan catatan yang kami berikan di judul. Tidak ada keluaran yang diharapkan. Berhenti ketika Anda mencapai sel berjudul "Muat Data Pelatihan".

Langkah 3.3: Edit variabel SAMPLES_LOCATION_ROOT di sel "Load the Training Data" ke direktori induk dari lokasi direktori sampel Anda sebelumnya. Kemudian, ubah variabel SAMPLES_DIR_NAME menjadi nama direktori Anda. Jadi jika Anda telah mengatur lokasi di CollectSamples.ipynb ke:

SAMPLES_LOCATION = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/NewDir"

Anda sekarang akan mengatur variabel-variabel ini ke:

SAMPLES_LOCATION_ROOT = "/Users/xxxx/Documents/KitchenSoundClassifier/MySamples/"SAMPLES_DIR_NAME = "NewDir"

Kami melakukan ini memungkinkan perubahan cepat pada pengklasifikasi dalam kasus ketidakakuratan. Anda dapat beralih di antara koleksi sampel yang berbeda untuk menyesuaikan data Anda.

Langkah 3.4: Evaluasi sel. Anda akan melihat setiap koleksi berhasil dimuat.

Langkah 3.5: Lanjutkan untuk menjalankan setiap sel satu per satu, perhatikan catatan yang kami sediakan di judul.

Langkah 3.6: Berhenti ketika Anda mencapai sel "Messaging Arduino". Tentukan port serial yang akan digunakan komputer Anda untuk berkomunikasi dengan Arduino dalam variabel PORT_DEF. Ini dapat ditemukan di Arduino IDE dan pergi ke Tools > Port.

Informasi lebih lanjut dapat ditemukan di sini.

Langkah 3.8: Buka kembali IDE Arduino Anda. Di tempat-tempat di mana Anda membuat perubahan pada ikon, catat huruf di sebelah nilai array, tetapi JANGAN mengubahnya. Dalam contoh di bawah ini, ini adalah "g".

// pembuangan sampahconst unsigned 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 "Messaging Arduino" pada Notebook) Ubah label di kamus self.sounds agar sesuai dengan label yang Anda gunakan dalam merekam sampel Anda, pastikan setiap label sesuai dengan satu huruf yang Anda catat sebelumnya melangkah. "Rekaman" dan "Mendengarkan" keduanya merupakan bagian dari fungsionalitas sistem inti dan tidak boleh diubah. JANGAN mengubah huruf kedua kecuali jika Anda merasa percaya diri dalam membuat beberapa perubahan tambahan pada kode Arduino juga, karena akan mengacaukan komunikasi dengan Arduino/matriks sebaliknya.

Langkah 3.8: Jalankan fungsi utama! Kode akan mengambil data pelatihan, mengekstrak fitur utamanya, memasukkannya ke dalam pipeline, membangun model klasifikasi, lalu mulai mendengarkan peristiwa suara. Saat merasakan satu, Anda akan melihat matriks berubah menjadi simbol rekaman (persegi dengan lingkaran di dalamnya) dan itu akan mengelompokkan data ini dan memasukkannya ke dalam model. Apa pun yang diprediksi model akan muncul beberapa detik kemudian pada tampilan matriks.

Anda dapat mengikuti output sel di bawah ini. Lihat seberapa akurat Anda bisa mendapatkannya!

Langkah 4: Membuat Perumahan LEGO

Membuat Perumahan LEGO
Membuat Perumahan LEGO
Membuat Perumahan LEGO
Membuat Perumahan LEGO
Membuat Perumahan LEGO
Membuat Perumahan LEGO

Ini adalah bagian yang menyenangkan! Anda telah melakukan semua langkah pembelajaran mesin yang serius dan menjalankan seluruh sistem ujung ke ujung, dan sekarang Anda dapat bermain dengan LEGO sebagai hadiah. Tidak ada banyak proses untuk detail di sini. Kami baru saja menambahkan blok yang kami suka di sana-sini tanpa terlalu mengkhawatirkan desain keseluruhan, dan kami akhirnya senang dengan hasilnya.

Biarkan gambar kami menjadi inspirasi untuk rumah kreatif Anda sendiri yang unik untuk dapur Anda. Kami menempatkan Arduino dan sebagian besar kabel dalam wadah berlubang, lalu mengamankan tampilan matriks di atas dengan overhang. Kami menambahkan sedikit kertas di atas layar untuk sedikit menyebarkan cahaya yang kami rasa membuat ikon lebih jelas.

Direkomendasikan: