Em seguida, quero integrar a gravação e o reconhecimento de palavras-chave em um programa.
A primeira coisa que vem à mente ao realizar operações de voz em Python é PyAudio. No entanto, tive alguns problemas ao instalar o PyAudio na placa. Não existe um pacote de software pronto correspondente a esta placa no armazém Python. O pacote de software precisa ser compilado e gerado na placa. O PyAudio depende do PortAudio, e o PortAudio não foi portado na placa, portanto, o PyAudio não pode ser usado. por enquanto, encontraremos uma maneira de resolver esse problema mais tarde. O método temporário que adotei é modificar o script de shell para testar o áudio mencionado anteriormente, e deixá-lo gravar 1 segundo de voz, e então chamar o programa Python para reconhecimento de palavras-chave. Se for SIM, acenda a luz LED no desenvolvimento. placa, se for NÃO, desligue a luz LED na placa de desenvolvimento. Depois de ligar ou desligar a luz, um prompt correspondente será reproduzido. Para facilitar a depuração, os resultados da gravação serão reproduzidos automaticamente após a gravação para determinar se a gravação está correta. 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"
 Para o programa completo, consulte o pacote compactado*Anexo: yes-no-test.zip . O código do script principal é o seguinte: A julgar pelo vídeo abaixo, o efeito desejado é basicamente alcançado. Inicialmente, eu estava preocupado que o efeito de gravação do microfone da placa afetasse o reconhecimento, mas isso não parece ser um grande problema no momento. Como o método consiste em gravar primeiro em um arquivo e o tempo é de apenas 1 segundo, às vezes é bastante difícil de usar a gravação não é concluída se você falar um pouco devagar. Isso requer otimização subsequente do processamento de fala do Python.
[Jiandian Atomic i.MX93 Development Board Trial] Use a voz para dizer SIM ou NÃO para controlar as luzes LED
Além disso, o modelo usado atualmente é pré-treinado e as palavras de prompt em chinês serão treinadas posteriormente para facilitar o uso. |