Seuraavaksi haluan integroida tallennuksen ja avainsanatunnistuksen yhdeksi ohjelmaksi.
Ensimmäinen asia, joka tulee mieleen suoritettaessa äänitoimintoja Pythonissa, on PyAudio. Kohtasin kuitenkin pieniä ongelmia PyAudion asentamisessa levylle. Python-varastossa ei ole valmiita tätä korttia vastaavaa ohjelmistopakettia. Ohjelmistopaketti on käännettävä ja generoitava levylle, eikä PortAudiota ole siirretty levylle, joten PyAudiota ei voi käyttää. toistaiseksi löydämme tavan ratkaista tämä ongelma. Väliaikainen menetelmä, jonka käytin, on muokata aiemmin mainitun äänen testaamiseen tarkoitettua shell-skriptiä ja antaa sen tallentaa 1 sekunti puhetta ja kutsua sitten Python-ohjelmaa avainsanan tunnistamista varten. Jos se on KYLLÄ, laita LED-valo päälle kortti, jos se on EI, sammuta kehityslevyn LED-valo Kun olet kytkenyt valon päälle tai pois päältä, soitetaan vastaava kehote. Viankorjauksen helpottamiseksi tallennustulokset toistetaan automaattisesti tallennuksen jälkeen sen määrittämiseksi, onko tallennus oikein. 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"
 Katso koko ohjelma pakatusta paketista*Liite: kyllä-ei-test.zip . Komentosarjan ydinkoodi on seuraava: Alla olevasta videosta päätellen vaadittu vaikutus saavutetaan periaatteessa. Alun perin pelkäsin, että levyn mikrofonin äänitysvaikutus vaikuttaisi tunnistukseen, mutta tällä hetkellä se ei tunnu olevan suuri ongelma. Koska menetelmä on nauhoittaa ensin tiedostoon ja aika on vain 1 sekunti, sen käyttö on joskus melko hankalaa, jos puhut hieman hitaasti. Tämä edellyttää Pythonin puheenkäsittelyn myöhempää optimointia.
[Jiandian Atomic i.MX93 Development Board -kokeilu] Käytä ääntä sanoaksesi KYLLÄ tai EI ohjataksesi LED-valoja
Lisäksi tällä hetkellä käytössä oleva malli on esiopetettu, ja kiinalaiset kehotussanoja opetetaan myöhemmin käytön helpottamiseksi. |