もっと使いやすくしたい?
前回の記事で、動作的には実現できましたが、実際に使う際にはいくつか問題があります。
①起動後、デモプログラムが音声操作可能になるまでかなり時間がかかるが、その操作可能になるタイミングが分からない。
②ボタンを押した後、音声受付可能になったら、効果音を鳴らして知らせる。
③発話を受けて、内部の音声処理が完了したら、効果音を鳴らして知らせる。
①「listen.wav」←ボタン押し後、音声受付開始時に鳴る音
②「OK.wav」←音声認識完了時に鳴る音
2つの効果音ファイルを「home」>「pi」>「AIY-voice-kit-python」>「src」に保存します。
LED⊕の配線を「3.3V」からGPIO24に変更します。
これでGPIO24に電気が流れればLEDが点灯、流れなければ消灯になります。
②中段当たりの「# Start the voicehat button trigger.」行の下に以下の赤字の文字列を追加します。(赤文字部分をコピーしてペーストして下さい。)
そのまま保存します。
①起動後、デモプログラムが音声操作可能になるまでかなり時間がかかるが、その操作可能になるタイミングが分からない。
②ボタンを押して、すぐに発話すると失敗する時がある。(音声受付までにタイムラグあり)
どうもこの問題はラズパイZero自体の処理速度が遅い事が原因で、これはどうしようもなさそうです。
解決策として、操作時に手掛かりになるように音や光で分からせる事が出来れば、今より使い易くなりそうです。
どうもこの問題はラズパイZero自体の処理速度が遅い事が原因で、これはどうしようもなさそうです。
解決策として、操作時に手掛かりになるように音や光で分からせる事が出来れば、今より使い易くなりそうです。
イメージはこんな感じ
①音声操作可能になった時点で、前面のLED(ボタン兼用)を点灯して知らせる。②ボタンを押した後、音声受付可能になったら、効果音を鳴らして知らせる。
③発話を受けて、内部の音声処理が完了したら、効果音を鳴らして知らせる。
①「listen.wav」←ボタン押し後、音声受付開始時に鳴る音
②「OK.wav」←音声認識完了時に鳴る音
2つの効果音ファイルを「home」>「pi」>「AIY-voice-kit-python」>「src」に保存します。
LEDの配線を変更
LED⊕の配線を「3.3V」からGPIO24に変更します。
これでGPIO24に電気が流れればLEDが点灯、流れなければ消灯になります。
次はプログラムの変更ですが…
---------------------------------------------------------------------------------------------------------------
以下の説明について。
当方、プログラミングについてはほとんど素人です。
ネットにある関連記事を参考に、適当にプログラムのコードを弄ってます。
結果オーライで運よく上手くいっているだけの可能性が大きいです。
ですので、もし参考にされる場合は、あくまで自己責任でお願いします。
---------------------------------------------------------------------------------------------------------------
以下の説明について。
当方、プログラミングについてはほとんど素人です。
ネットにある関連記事を参考に、適当にプログラムのコードを弄ってます。
結果オーライで運よく上手くいっているだけの可能性が大きいです。
ですので、もし参考にされる場合は、あくまで自己責任でお願いします。
---------------------------------------------------------------------------------------------------------------
デモプログラムをメモ帳アプリで開く
「home」>「pi」>「AIY-voice-kit-python」>「src」> 「examples」>「voice」にあるデモプログラム「assistant_library_with_button_demo.py」をメモ帳アプリ「Text Editor」で開きます。
---------------------------------------------------------------------------------------------------------------
今回、変更する「assistant_library_with_button_demo.py」ですが、前回の記事の修正済みファイルである事を前提に、それに変更を加えています。
---------------------------------------------------------------------------------------------------------------
「assistant_library_with_button_demo.py」を変更する
「assistant_library_with_button_demo.py」に追加する文字列は以下のようです。
①ファイルの先頭近くにある「import」項目に「import RPi.GPIO as GPIO」を追加します。
①ファイルの先頭近くにある「import」項目に「import RPi.GPIO as GPIO」を追加します。
------------------------------------------------------------------------------------
import logging
import platform
import sys
import threading
import subprocess
import logging
import platform
import sys
import threading
import subprocess
import RPi.GPIO as GPIO
------------------------------------------------------------------------------------
------------------------------------------------------------------------------------
これはGPIOの制御を可能にするライブラリーを読み込むための記述です。
②中段当たりの「# Start the voicehat button trigger.」行の下に以下の赤字の文字列を追加します。(赤文字部分をコピーしてペーストして下さい。)
------------------------------------------------------------------------------------
if event.type == EventType.ON_START_FINISHED:
self._board.led.status = Led.BEACON_DARK # Ready.
self._can_start_conversation = True
# Start the voicehat button trigger.
GPIO.setmode(GPIO.BCM)
GPIO.setup(24,GPIO.OUT)
GPIO.output(24, 1)
logging.info('Say "OK, Google" or press the button, then speak. '
'Press Ctrl+C to quit...')
------------------------------------------------------------------------------------
この記述の動作を簡単に説明すると、デモプログラムが起動して、ボタン押し可能になった時点でGPIO24に3.3Vを流し、LEDを光らせる、というものです。
③さらにその下の「subprocess.call('pkill -KILL -f mplayer', shell=True)」行の下に、以下の赤字の文字列を追加します。(赤文字部分をコピーしてペーストして下さい。)
------------------------------------------------------------------------------------
elif event.type == EventType.ON_CONVERSATION_TURN_STARTED:
subprocess.call('pkill -KILL -f mplayer', shell=True)
subprocess.call('speaker-test -Dplughw:0,1 -r 22050 -c1 -l1 -t wav -w /home/pi/AIY-voice-kit-python/src/listen.wav', shell=True)
self._can_start_conversation = False
self._board.led.state = Led.ON # Listening.
------------------------------------------------------------------------------------
この記述の動作を簡単に説明すると、ボタンを押して、音声受付可能になった時点で「listen.wav」を鳴らす、というものです。
④さらにその下の前回追加した「ラジオ1」呼び出しのための記述の中の「self._assistant.stop_conversation()」行の下に、以下の赤字の文字列を追加します。(赤文字部分をコピーしてペーストして下さい。)
------------------------------------------------------------------------------------
if text == 'ラジオ 1':
self._assistant.stop_conversation()
subprocess.call('speaker-test -Dplughw:0,1 -r 22050 -c1 -l1 -t wav -w /home/pi/AIY-voice-kit-python/src/OK.wav', shell=True)
subprocess.call('mplayer -ao alsa:device=plughw=0.1 -playlist http://yp.shoutcast.com/sbin/tunein-station.pls?id=1473372 &', shell=True)
------------------------------------------------------------------------------------
この記述の動作を簡単に説明すると、「ラジオ1」として音声認識が完了した時点で「OK.wav」を鳴らす、というものです。
以下、「ラジオ2」、「ラジオ3」呼び出しのための記述でも同様に変更します。
「main.py」ファイルを上書きする
「Start dev terminal」ターミナル画面を出して、「sudo cp src/examples/voice/assistant_library_with_button_demo.py ~/AIY-projects-python/src/main.py」と入力して、Enterキーを押します。
これは変更したデモプログラムで「main.py」というファイルを上書きする手順です。
「main.py」が再起動後、自動実行されるプログラムファイルになります。
「main.py」が再起動後、自動実行されるプログラムファイルになります。
実際の動作は?
ラズパイを再起動させて、動作を確認します。
起動開始して2分くらいで前面のLED(ボタン兼用)が点灯。
起動開始して2分くらいで前面のLED(ボタン兼用)が点灯。
ボタンを押すと、一拍あって効果音「listen.wav」が鳴る。
その後「ラジオ1」と発話すると、一拍あって効果音「OK.wav」が鳴る。
しばらくして、指定したWebラジオが再生されればOKです。
---------------------------------------------------------------------------------------------------------------
もし、うまく動作しない場合は、前回の記事でやったように、一旦自動起動を停止してから、「Start dev terminal」ターミナル画面で、変更したデモプログラムファイル自体を実行してみると、記述間違い、等が確認し易いです。
---------------------------------------------------------------------------------------------------------------
コメント
コメントを投稿