Tôi đã đi với Pocketphinx_continupt và một thẻ âm thanh $ 4 .
Để quản lý thực tế rằng nó cần phải ngừng nghe khi sử dụng synth speech, tôi đã sử dụng amixer để xử lý âm lượng đầu vào mic (điều này được CMU khuyến nghị sử dụng tốt nhất vì công cụ dừng khởi động sẽ dẫn đến nhận dạng kém hơn)
echo "SETTING MIC IN TO 15 (94%)" >> ./audio.log
amixer -c 1 set Mic 15 unmute 2>&1 >/dev/null
Với một lệnh phù hợp để tắt tiếng khi nghe synth phát
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
Để tính toán thời gian phù hợp để tắt tiếng cho tôi, tôi chỉ cần chạy soxi qua lua và sau đó đặt unmute.sh (đối diện với chế độ câm.sh) để chạy "x" giây từ khi khởi động. Không có nghi ngờ rất nhiều cách để xử lý này. Tôi hài lòng với kết quả của phương pháp này.
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')
Để thực sự lấy giọng nói trên pi tôi sử dụng:
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
Một lần nữa, có những cách khác, nhưng tôi thích đầu ra của mình theo cách này.
Đối với synth tôi đã sử dụng giải pháp pi Cepstrals non trẻ, nhưng nó không có sẵn trực tuyến, bạn phải liên hệ trực tiếp với họ để sắp xếp để mua nó và khoảng 30 đô la để mua. Kết quả có thể chấp nhận được tuy nhiên bài phát biểu tạo ra một số nhấp chuột và pop khó chịu, công ty đã trả lời rằng họ không còn RaspPi và không sẵn lòng cải thiện sản phẩm. YMMV
Nhận dạng giọng nói nằm ở khoảng 12% CPU khi "không hoạt động" và tăng đột biến khi thực hiện một đoạn nhận dạng.
Việc tạo giọng nói tăng đột biến ở khoảng 50-80% khi kết xuất.
Vở kịch / sox nặng khá nhiều nhưng tôi áp dụng hiệu ứng thời gian thực cho giọng nói được kết xuất khi tôi phát chúng;)
Số pi bị tước đi rất nhiều khi sử dụng mọi hướng dẫn mà tôi có thể tìm thấy để dừng các dịch vụ không cần thiết và chạy ở chế độ CLI hoàn chỉnh. 800mhz quá xung nhịp (nhỏ nhất).
scaling_gocateor được đặt thành: hiệu suất
Khi chạy hoàn toàn: nó chạy ở khoảng 50 độ C dưới ánh sáng mặt trời trực tiếp và 38 độ C trong bóng râm. Tôi có tản nhiệt được trang bị.
Điểm cuối cùng: Tôi thực sự chạy tất cả các thiết bị này cho AI "điều khiển internet" như một phần phụ tuyệt vời.
Pi xử lý tất cả điều này một cách liền mạch, và phát ra bất kỳ âm thanh được nối mạng nào trong thời gian thực và âm thanh được lặp hoàn toàn cho bất kỳ hộp Unix nào khác. Vân vân.
để xử lý gánh nặng quá lớn của CPU tiếng nói, tôi đã triển khai một hệ thống bộ nhớ đệm dựa trên md5sum để các cách nói tương tự không được hiển thị hai lần. (khoảng 1000 tệp @ 220 mb tổng cộng bao gồm 70% các cách tôi thường lấy lại từ AI) điều này thực sự giúp giảm tổng tải CPU xuống.
Trong précis điều này là hoàn toàn có thể làm được. tuy nhiên, nhận dạng giọng nói sẽ chỉ tốt như chất lượng của mic của bạn, mô hình ngôn ngữ của bạn, mức độ cụ thể của giọng nói đối tượng của bạn đối với đối tượng dự định ban đầu (tôi sử dụng mô hình en_US cho trẻ em en_UK, không hoàn hảo) và các chi tiết nhỏ khác rằng với nỗ lực bạn có thể giảm xuống một kết quả tốt.
Và đối với hồ sơ, tôi đã làm tất cả điều này một lần trước đây trên một kindle (và điều đó cũng làm việc với nhân sư cmu và flite). Hi vọng điêu nay co ich.