私は、Siri や Amazon Echo に似た小さな音声認識プログラムの開発に取り組んでいます。これにより、自宅でいくつかの小さなタスクを簡素化できます。私は bash に非常に慣れていないので、Google Speech To Text サーバーへの継続的なデータ フローの必要性を減らすための支援をお願いします。現在、3 秒ごとに新しい音声ファイルを録音し、Google サーバーに送信して翻訳しています。この方法は非常に効率が悪いようです。コードのこの部分を以下に示します。
while :
do
trap CTRLc INT
echo "[speech-recog]: Recording"
(arecord -D $hardware -q -f S16_LE -d $duration -r 16000 | flac - -f --best --sample-rate 16000 -o /dev/shm/out.flac 1>/dev/shm/voice.log 2>/dev/shm/voice.log; curl -s -X POST$
sleep $sleepduration
echo "[speech-recog]: Recording"
(arecord -D $hardware -q -f S16_LE -d $duration -r 16000 | flac - -f --best --sample-rate 16000 -o /dev/shm/out.flac 1>/dev/shm/voice.log 2>/dev/shm/voice.log; curl -s -X POST$
sleep $sleepduration
done
代わりに、このスクリプトの音声をトリガーにすると、ネットワーク上のインターネット トラフィックの量が大幅に削減されるという仮説を立てました。音声トリガーとは、特定の音量以上の音が聞こえると、音声の録音を開始して Google に送信することを意味します。このサウンド トリガーを作成する方法や、これらのサーバーへの一般的な要求の量を単純に減らす方法について、誰かが提案を提供してくれれば、非常に役に立ちます。
さらに、現在の方法では、スピーカーが始まる前にいつでも録音が開始される可能性があるため、一部のオーディオが 2 つ以上のファイルに分割されます。音を聞いて録音を開始すると、この問題も解決します。
私のコードに関連するすべての提案を歓迎します。さらに情報が必要な場合は、コメントでリクエストしてください。知っておくべきことは何でも喜んで提供します. 私の質問に問題がある場合は、コメントを残してください。今後その間違いを犯さないようにします。bash スクリプトを以下に示します。
注: このスクリプトの目的は、Google Speech to Text サーバーからの応答を「SpeechLog.txt」というファイルに書き込むことです。
音声認識.sh
#!/bin/bash
hardware="plughw:1,0"
duration="3"
sleepduration="3.05"
lang="en"
hw_bool=0
dur_bool=0
lang_bool=0
CTRLc() {
echo "[speech-recog]: Terminating Faide master script. Are you sure (yes/no)?"
read ShouldQuit
if [ ${ShouldQuit^^} = "YES" ]
then
echo "[speech-recog]: Confirmation accepted, terminating script"
sudo python3 Cleanup.py
kill $$
else
echo "[speech-recog]: Denial accepted. Exiting confirmation request"
clear
echo "[speech-recog]: Listening..."
fi
}
for var in "$@"
do
if [ "$var" == "-D" ] ; then
hw_bool=1
elif [ "$var" == "-d" ] ; then
dur_bool=1
elif [ "$var" == "-l" ] ; then
lang_bool=1
elif [ $hw_bool == 1 ] ; then
hw_bool=0
hardware="$var"
elif [ $dur_bool == 1 ] ; then
dur_bool=0
duration="$var"
elif [ $lang_bool == 1 ] ; then
lang_bool=0
lang="$var"
else
echo "[speech-recog]: Invalid option, valid options are -D for hardware and -d for duration"
fi
done
CheckFile() {
LineCount=`cat SpeechLog.txt | wc -l`
if [ $LineCount -gt 1 ]
then
sudo rm /dev/shm/out.flac
sudo python3 VoiceMain.py
fi
}
clear
echo "[speech-recog]: Speech recognition initialized"
echo "[speech-recog]: Listening..."
while :
do
trap CTRLc INT
echo "[speech-recog]: Recording"
(arecord -D $hardware -q -f S16_LE -d $duration -r 16000 | flac - -f --best --sample-rate 16000 -o /dev/shm/out.flac 1>/dev/shm/voice.log 2>/dev/shm/voice.log; curl -s -X POST$
sleep $sleepduration
echo "[speech-recog]: Recording"
(arecord -D $hardware -q -f S16_LE -d $duration -r 16000 | flac - -f --best --sample-rate 16000 -o /dev/shm/out.flac 1>/dev/shm/voice.log 2>/dev/shm/voice.log; curl -s -X POST$
sleep $sleepduration
done