Deskripsi Masalah
Saya ingin menggunakan pengenalan suara sebagai bagian dari proyek perangkat keras, yang saya ingin benar-benar mandiri (Saya menggunakan daya rendah kecil, perangkat kecepatan rendah seperti Arduino dan Raspberry Pi, Kinect dll, tidak menjalankan komputer tradisional dengan sebuah OS terlibat. Jadi proyek tertutup / mandiri).
Pengenalan suara bisa sangat rumit tergantung pada tingkat kecanggihan yang Anda inginkan. Saya memiliki apa yang saya yakini sebagai persyaratan yang relatif sederhana. Saya hanya ingin mengenali suara saya sendiri, dan saya memiliki kamus kecil berisi sekitar 20 kata yang ingin saya kenali. Jadi saya tidak memerlukan perpustakaan pengenal suara-ke-teks dan suara yang kompleks atau perangkat lunak pihak ke-3 yang luar biasa yang saya temukan melalui mesin pencari Internet (tidak ada kekurangan!). Saya percaya persyaratan saya "cukup sederhana" (masuk akal) bahwa saya dapat kode solusi saya sendiri. Saya bertanya-tanya apakah ada yang telah menulis proses mereka sendiri seperti ini, dan apakah metode saya cacat besar-besaran? Apakah ada cara yang lebih baik untuk melakukan ini tanpa memerlukan matematika tingkat tinggi atau harus menulis algoritma yang kompleks? Itulah solusi yang saya coba pikirkan di bawah ini.
Deskripsi Solusi
Saya akan menulis ini di C tetapi saya ingin membahas proses agnostik bahasa, dengan fokus pada proses itu sendiri. Jadi mari kita abaikan itu jika kita bisa.
1. Saya akan merekam kamus kata-kata saya untuk mencocokkan dengan yang diucapkan. Kita dapat membayangkan saya memiliki 20 rekaman dari 20 kata saya yang berbeda, atau mungkin frasa atau kalimat pendek dari dua atau tiga kata. Saya percaya ini membuat proses membandingkan dua file rekaman lebih mudah daripada benar-benar mengubah audio menjadi teks dan membandingkan dua string.
2. Mikrofon terhubung ke perangkat keras saya yang menjalankan kode saya. [1]. Kode terus mengambil contoh panjang tetap, katakanlah 10 msec panjang misalnya, dan menyimpan 10 sampel berturut-turut misalnya, dalam gaya logging melingkar. [2]. (Saya menemukan angka-angka ini dari atas kepala saya sehingga mereka hanya contoh untuk menggambarkan prosesnya).
[1] Ini kemungkinan akan dihubungkan melalui filter band-pass dan op-amp, seperti halnya rekaman kamus dibuat, untuk menjaga sampel audio yang disimpan dan dikumpulkan lebih kecil.
[2] Saya tidak yakin persis bagaimana saya akan mengambil sampel, saya perlu mencari metode meskipun saya menghasilkan angka numerik (integer / float / double) yang mewakili audio sampel 10msec (mungkin nilai CRC atau jumlah MD5 dll dari sampel audio), atau aliran angka (aliran pembacaan frekuensi audio mungkin). Akhirnya "sampel" akan menjadi angka atau angka. Bagian ini akan menjadi lebih banyak perangkat keras yang terlibat sehingga tidak benar-benar untuk diskusi di sini.
3. Kode melihat itu disimpan 10 sampel berturut-turut dan mencari peningkatan volume untuk menunjukkan kata atau frasa sedang dikatakan (istirahat dari keheningan) dan kemudian kenaikan adalah pengumpulan sampel berturut-turut untuk mengatakan 500 sampel misalnya. Itu berarti ia menangkap audio 5 detik dalam sampel 10 msec.
Sampel atau "irisan" inilah yang dibandingkan antara suara yang disimpan dan suara yang ditangkap. Jika persentase sampel yang diambil cukup tinggi dengan yang disimpan, kode menganggap kata yang sama.
The start of a store recording of the world "hello" for example,
stored words are split into 10 msec samples also
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming audio (me saying "hello") with some "blank" samples
at the start to symbolise silence
Incoming Sample No | 1| 2| 3| 4| 5| 6| 7| 8| 9|10| 11|12|
Incoming Sample Value | | | |20|27|38|46|16|59|77|200|78|
4. Setelah kode telah mengumpulkan aliran sampel penuh, itu kemudian memotong sampel kosong di awal untuk menghasilkan rekaman audio berikut. Itu juga bisa memindahkan set sampel mundur dan maju beberapa tempat untuk menyelaraskan lebih baik dengan sampel yang disimpan.
Ini menghasilkan set sampel seperti di bawah ini:
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming Sample No |-1| 1| 2| 3| 4| 5| 6| 7| 8|
Incoming Sample Value |20|27|38|46|16|59|81|201|78|
5. Saya percaya bahwa dengan memiliki nilai persentase untuk seberapa dekat setiap sampel harus, maka sampel 7 berbeda dengan nilai 1 yang kurang dari% 1, dan nilai persentase untuk jumlah total sampel yang harus berada dalam persentase pencocokan sampel mereka , kode ini memiliki tingkat akurasi yang mudah disesuaikan.
Saya belum pernah melakukan hal seperti ini dengan audio sebelumnya, itu bisa jadi banyak pekerjaan. Inilah mengapa saya mengajukan pertanyaan ini, jika Anda mungkin sudah tahu jawaban atas pertanyaan ini menjadi jelas (apa pun jawaban itu). Saya berharap ini tidak akan menjadi tugas komputasi besar karena beberapa perangkat keras yang akan saya gunakan akan menjadi hal-hal rendah. Dalam ratusan Megahertz (Mungkin 1Ghz menggunakan Rasp Pi over-clock). Jadi ini adalah cara yang agak kasar untuk mencocokkan sampel audio menggunakan daya komputasi yang lebih rendah. Saya tidak bertujuan untuk hasil instan, tetapi kurang dari 30 detik untuk bukti konsep yang layak.
PS Saya tidak memiliki perwakilan untuk memberi tag ini dengan tag baru seperti "audio", "audio recognition", "voice", "voice recognition" dll.