次は、録音とキーワード認識を 1 つのプログラムに統合したいと考えています。
Python で音声操作を実行するときに最初に思い浮かぶのは PyAudio です。ただし、PyAudio をボードにインストールするときに少し問題が発生しました。 Python ウェアハウスには、このボードに対応する既製のソフトウェア パッケージはなく、PyAudio はボード上でコンパイルおよび生成される必要があり、PortAudio はボードに移植されていないため、PyAudio は使用できません。当面は、この問題を解決する方法を後で見つけます。 私が採用した一時的な方法は、前述の音声をテストするためのシェル スクリプトを変更し、1 秒間の音声を録音し、キーワード認識のための Python プログラムを呼び出します。YES の場合、開発上の LED ライトをオンにします。 NO の場合、開発ボードの LED ライトをオフにします。ライトをオンまたはオフにすると、対応するプロンプトが再生されます。デバッグを容易にするために、録音後に録音結果が自動的に再生され、録音が正しいかどうかが判断されます。 INIT_FLAG="/home/root/shell/audio/.initialized_audio_device" PLAY_FILE="/home/root/shell/audio/short.mp3" RC_LOCAL_FILE="/etc/rc.local" DELETE_COMMAND="rm -f $INIT_FLAG" # 将开机自动删除音频初始化标志文件命令加入到开机自启中 if ! grep -qFx "$DELETE_COMMAND" "$RC_LOCAL_FILE"; then echo "$DELETE_COMMAND" >> "$RC_LOCAL_FILE" command -v "$1" > /dev/null 2>&1 amixer cset name='PCM Volume' 192 amixer cset name='Mono Mux' 'Stereo' amixer cset name='Playback De-emphasis' 2 amixer cset name='Capture Digital Volume' 192 amixer cset name='Capture Mute' 'on' amixer cset name='Capture Polarity' 'Normal' amixer cset name='3D Mode' 'No 3D' amixer cset name='ALC Capture Attack Time' 5 amixer cset name='ALC Capture Decay Time' 2 amixer cset name='ALC Capture Function' 'Stereo' amixer cset name='ALC Capture Hold Time' 2 amixer cset name='ALC Capture Max PGA' 3 amixer cset name='ALC Capture Min PGA' 6 amixer cset name='ALC Capture NG Switch' 'on' amixer cset name='ALC Capture NG Threshold' 9 amixer cset name='ALC Capture NG Type' 'Mute ADC Output' amixer cset name='ALC Capture Target Volume' 15 amixer cset name='ALC Capture ZC Switch' 'on' amixer cset name='Left Channel Capture Volume' 100% amixer cset name='Right Channel Capture Volume' 100% amixer cset name='Left Mixer Left Bypass Volume' 100% amixer cset name='Right Mixer Right Bypass Volume' 100% amixer cset name='Output 1 Playback Volume' 100% amixer cset name='Output 2 Playback Volume' 100% amixer cset name='ZC Timeout Switch' 'on' amixer cset name='Left PGA Mux' 'DifferentialL' amixer cset name='Right PGA Mux' 'DifferentialR' function init_board_mic() { check_command amixer && { amixer -q cset name='Differential Mux' 'Line 2' amixer -q cset name='Left Line Mux' 'Line 2L' amixer -q cset name='Right Line Mux' 'Line 2R' function init_headphone_mic() { check_command amixer && { amixer cset name='Differential Mux' 'Line 1' amixer cset name='Left Line Mux' 'Line 1L' amixer cset name='Right Line Mux' 'NC' check_command amixer && { amixer -q cset name='Left Mixer Left Bypass Switch' 'on' amixer -q cset name='Right Mixer Right Bypass Switch' 'on' amixer -q cset name='Left Mixer Left Playback Switch' 'off' amixer -q cset name='Right Mixer Right Playback Switch' 'off' check_command amixer && { amixer -q cset name='Left Mixer Left Bypass Switch' 'off' amixer -q cset name='Right Mixer Right Bypass Switch' 'off' amixer -q cset name='Left Mixer Left Playback Switch' 'on' amixer -q cset name='Right Mixer Right Playback Switch' 'on' check_command amixer && { amixer -q cset name='Left Mixer Left Bypass Switch' 'off' amixer -q cset name='Right Mixer Right Bypass Switch' 'off' amixer -q cset name='Left Mixer Left Playback Switch' 'off' amixer -q cset name='Right Mixer Right Playback Switch' 'off' amixer -q cset name='Left Line Mux' 'NC' amixer -q cset name='Right Line Mux' 'NC' function apply_config() { # read -r -p "请输入您的选择: " choice # if [[ "$choice" == "1" || "$choice" == "2" ]]; then printf "n应用麦克风配置项 %sn" "$choice" # 捕获Ctrl+C信号,并调用cleanup函数 # if ! check_initialized; then # printf "第一次运行,执行音频设备初始化...n" check_command arecord && arecord -f cd -d 1 -r 16000 "$RECORD_FILE" check_command aplay && aplay "$RECORD_FILE" output=$(python3 simple_audio.py --input=test.wav) if echo "$output" | grep -q ">>> YES"; then echo "Python程序输出YES,执行相应代码..." echo 1 > /sys/class/leds/sys-led/brightness echo heartbeat > /sys/class/leds/sys-led/trigger #gst-play-1.0 haodeyiweinindakai.mp3 aplay haodeyiweinindakai.wav elif echo "$output" | grep -q ">>> NO"; then echo "Python程序输出NO,执行其他代码..." echo none > /sys/class/leds/sys-led/trigger echo 0 > /sys/class/leds/sys-led/brightness #gst-play-1.0 haodeyiweininguanbi.mp3 aplay haodeyiweininguanbi.wav echo "Python程序输出未知结果,或者没有输出结果。" printf "n开始播音,按 Ctrl+C 可退出播音n" gst-play-1.0 --audiosink="alsasink" "$PLAY_FILE"
 完全なプログラムについては、圧縮パッケージを参照してください。※添付ファイル:yes-no-test.zip 。コア スクリプト コードは次のとおりです。 以下のビデオから判断すると、必要な効果は基本的に達成されています。当初は基板のマイク録音の影響で認識に影響が出るのではないかと心配していましたが、今のところ大きな問題はないようです。最初にファイルに録音する方法で、時間が1秒しかないので、少しゆっくり話していると録音が完了しない場合もあるので、かなり面倒です。これには、その後の Python の音声処理の最適化が必要です。
[Jiandian Atomic i.MX93 開発ボード トライアル] 音声を使用して「YES」または「NO」を言い、LED ライトを制御します
さらに、現在使用されているモデルは事前にトレーニングされており、中国語のプロンプト単語は使いやすくするために後でトレーニングされる予定です。 |