다음으로는 녹음과 키워드 인식을 하나의 프로그램으로 통합하고 싶습니다.
Python에서 음성 작업을 수행할 때 가장 먼저 떠오르는 것은 PyAudio입니다. 그러나 보드에 PyAudio를 설치하는 데 약간의 문제가 발생했습니다. Python 웨어하우스에는 이 보드에 해당하는 기성 소프트웨어 패키지가 없습니다. 소프트웨어 패키지를 보드에서 컴파일하고 생성해야 합니다. PyAudio는 PortAudio에 의존하며 PortAudio는 보드에 포팅되지 않았으므로 PyAudio를 사용할 수 없습니다. 당분간은 이 문제를 해결할 방법을 찾아보겠습니다. 제가 채택한 임시 방법은 앞서 언급한 오디오 테스트용 쉘 스크립트를 수정하여 1초 동안 음성을 녹음한 후 Python 프로그램을 호출하여 키워드 인식을 하는 것입니다. YES이면 개발에 LED 조명을 켜는 것입니다. 보드가 아니요인 경우 개발 보드의 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 조명 제어
또한, 현재 사용되는 모델은 사전 학습되어 있으며, 사용 편의성을 위해 추후 중국어 프롬프트 단어도 학습될 예정입니다. |