Saya menggunakan pocketsphinx_continuous dan kartu suara seharga $ 4 .
Untuk mengelola fakta bahwa itu perlu berhenti mendengarkan ketika menggunakan synth bicara saya menggunakan amixer untuk menangani untuk memasukkan volume ke mic (ini direkomendasikan praktik terbaik oleh CMU karena mesin berhenti-start akan menghasilkan pengakuan yang lebih buruk)
echo "SETTING MIC IN TO 15 (94%)" >> ./audio.log
amixer -c 1 set Mic 15 unmute 2>&1 >/dev/null
Dengan perintah yang cocok untuk menonaktifkan suara mendengarkan ketika synth pidato diputar
FILE: mute.sh
#!/bin/sh
sleep $1;
amixer -c 1 set Mic 0 unmute >/dev/null 2>&1 ;
echo "** MIC OFF **" >> /home/pi/PIXIE/audio.log
Untuk menghitung waktu yang tepat untuk membisukan untuk saya jalankan soxi via lua dan kemudian atur unmute.sh (kebalikan dari mute.sh) untuk menjalankan "x" detik dari startup. Tidak ada keraguan banyak cara untuk menangani ini. Saya senang dengan hasil metode ini.
LUA SNIPPET:
-- Begin parallel timing
-- MUTE UNTIL THE SOUNDCARD FREES UP
-- "filename" is a fully qualified path to a wav file
-- outputted by voice synth in previous operation
-- GET THE LENGTH
local sample_length = io.popen('soxi -D '..filename);
local total_length = sample_length:read("*a");
clean_length = string.gsub(total_length, "\n", "") +1;
sample_length:close();
-- EXAMPLE LOGGING OUTPUT...
--os.execute( 'echo LENGTH WAS "'.. clean_length .. '" Seconds >> ./audio.log');
-- we are about to play something...
-- MUTE, then schedule UNMUTE.sh in x seconds, then play synth output
-- (have unrolled mute.sh here for clarity)
os.execute( 'amixer -c 1 set Mic '..mic_level..' unmute 2>&1 >/dev/null ');
os.execute( 'echo "** MIC OFF **" >> ./audio.log ');
-- EXAMPLE LOGGING OUTPUT...
-- os.execute( 'echo PLAYING: "'.. filename..'" circa ' .. clean_length .. ' Seconds >> ./audio.log ');
os.execute( './unmute.sh "'.. clean_length ..'" &');
-- THEN PLAY THE THING WHILE THE OTHER PROCESS IS SLEEPING
os.execute( './sounds-uncached.sh '..filename..' 21000')
Untuk benar-benar meraih suara pada pi saya gunakan:
pocketsphinx_continuous -bestpath 0 -adcdev plughw:1 -samprate 20000 \
-nfft 512 -ds2 -topn2 -maxwpf 5 -kdtreefn 3000 -kdmaxdepth 7 -kdmaxbbi 15 \
-pl_window 10 -lm ./LANGUAGE/0892-min.lm -dict ./LANGUAGE/0892-min.dic 2>&1 \
| tee -i 2>/dev/null >( sed -u -n -e 's/^.\{9\}: //p' ) \
>( sed -u -n -e 's/^READY//p' \
-e 's/^Listening//p' -e 's/^FATAL_ERROR: \"continuous\.c\"\, //p') \
> /dev/null
Sekali lagi, ada cara lain, tapi saya suka output saya dengan cara ini.
Untuk synth saya menggunakan solusi pi Cepstral pemula, tetapi tidak tersedia secara online Anda harus menghubungi mereka secara langsung untuk mengatur untuk membelinya dan itu adalah sekitar $ 30 untuk membeli. Hasilnya dapat diterima namun pidatonya membuat beberapa klik dan muncul tidak menyenangkan, perusahaan telah menjawab mengatakan mereka tidak lagi memiliki RaspPi dan tidak mau meningkatkan produk. YMMV
Pengenalan suara duduk di sekitar 12% CPU ketika "idle", dan lonjakan sebentar ketika melakukan sepotong pengakuan.
Pembuatan suara melonjak sekitar 50-80% saat rendering.
Drama / sox berbobot cukup besar tetapi saya menerapkan efek waktu-nyata untuk suara yang diberikan saat saya memainkannya;)
Pi dilucuti habis menggunakan setiap panduan yang saya temukan untuk menghentikan layanan yang tidak diperlukan dan berjalan dalam mode CLI lengkap. 800 mhz over-clocked (terkecil).
scaling_governor diatur ke: performance
Ketika sepenuhnya berjalan: beroperasi pada sekitar 50ºC di bawah sinar matahari langsung dan 38ºC di tempat teduh. Saya memiliki heat sink.
Poin terakhir: Saya benar-benar menjalankan semua perlengkapan ini untuk AI "didorong internet" sebagai tambahan yang bagus.
Pi menangani semua ini dengan mulus, Dan memainkan audio jaringan apa pun secara real-time, Dan audio yang sepenuhnya dilingkarkan ke kotak Unix lainnya. dll.
untuk menangani beban overhead CPU speech yang besar, saya telah menerapkan sistem caching berbasis md5sum sehingga ucapan yang sama tidak diberikan dua kali. (sekitar 1000 file @ 220 mb total mencakup 70% ucapan yang biasanya saya dapatkan dari AI) ini benar-benar membantu menurunkan total beban CPU secara keseluruhan.
Dalam précis ini semua bisa dilakukan. namun pengenalan suara hanya akan sebagus kualitas mikrofon Anda, model bahasa Anda, seberapa spesifik tutup mata pelajaran Anda dengan audiens yang dituju (saya menggunakan model en_US pada anak-anak en_UK, tidak sempurna) dan detail kecil lainnya bahwa dengan upaya Anda dapat mengurangi hasil yang layak.
Dan sebagai catatan, saya sudah melakukan semua ini sebelumnya pada kindle (dan itu bekerja juga dengan cmu sphinx dan flite). Semoga ini membantu.