Я поїхав з pocketsphinx_continuous та звуковою карткою в $ 4 .
Для управління тим, що йому потрібно припинити прослуховування при використанні синтезу мови, я використовував amixer для обробки введення гучності до мікрофона (це було рекомендовано кращою практикою КМУ, оскільки механізм зупинки-запуску призведе до поганого розпізнавання)
echo "SETTING MIC IN TO 15 (94%)" >> ./audio.log
amixer -c 1 set Mic 15 unmute 2>&1 >/dev/null
За допомогою відповідної команди, щоб відключити прослуховування, коли грає синтез мови
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
Щоб обчислити правильний час для відключення звуку, я просто запускаю таксі через lua, а потім встановлюю unmute.sh (навпроти mute.sh) для запуску "х" секунд від запуску. Безсумнівно, існує безліч способів впоратися з цим. Я задоволений результатами цього методу.
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')
Щоб фактично схопити голос на пі, я використовую:
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
Знову ж таки, є й інші способи, але мені подобається такий результат.
Для синтезатора я використовував Cepstrals fledgling pi рішення, але він недоступний в Інтернеті, вам потрібно зв’язатися з ними безпосередньо, щоб домовитись про його придбання, і це коштує близько 30 доларів, щоб купити. Результати є прийнятними, проте виступ створює неприємні клацання та спливання, компанія відповіла, сказавши, що у них більше немає RaspPi і не бажає вдосконалювати продукт. YMMV
Розпізнавання голосу сягає приблизно 12% процесора, коли він працює "в режимі очікування", і під час розпізнавання короткочасний шип.
Голос створення створює приблизно 50-80% під час візуалізації.
Гра / сокс важить досить сильно, але я застосовую ефекти в реальному часі до переданих голосів під час їх відтворення;)
Пі сильно знімається, використовуючи кожне керівництво, яке я міг би зупинити непотрібні сервіси та працює в повному режимі CLI. 800 МГц перенасичений (найменший).
масштабування_правитель встановлено на: продуктивність
Повністю працює: працює при температурі близько 50ºC під прямим сонячним промінням і 38ºC у тіні. У мене встановлені тепловідводи.
Останній пункт: я фактично запускаю всю цю передачу на "Інтернеті" AI як хороший додатковий.
Пі обробляє все це безперешкодно, І відтворює будь-який мережевий аудіо в режимі реального часу, І повністю циркулює аудіо в будь-який інший блок Unix. тощо.
для обробки великого мовного навантаження на центральний процесор я застосував кешовану систему на основі md5sum, щоб одні й ті ж висловлювання не відображалися двічі. (приблизно 1000 файлів при загальній здатності 220 мб охоплює 70% висловлювань, які я, як правило, повертаюсь з AI), це дійсно допомагає знизити загальну кількість завантажених процесорів.
У принципі це все цілком можливо. однак розпізнавання голосу буде лише настільки ж добре, як якість ваших мікрофонів, ваша мовна модель, наскільки конкретно близькі голоси ваших предметів до оригінальної призначеної аудиторії (я використовую en_US модель для дітей en_UK, не ідеальна) та інші деталі деталей що зусиллям ви можете знизити до гідного результату.
І для запису, я вже все це робив колись на розпалі (і це теж працювало з cmu сфінксом та флітом). Сподіваюсь, це допомагає.