前回、前々回でRaspberry PiにGoogle AssistantとSnowboyを入れた。
今回は、Snowboyを用いて自分の作成したホットワードでGoogleAssistantを起動させる。
方法については、以下の記事を参考にさせていただきました。めっちゃ感謝。
https://blog.mi.hdm-stuttgart.de/index.php/2017/08/18/2576/
SnowboyからGoogleAssistantのpushtotalkを呼び出す
/snowboy/examples/Python3/ ディレクトリにあるdemo.pyを複製して、ohayo.pyを作成。
記述を以下のように一部変更。
import snowboydecoder
import sys
import signal
from googlesamples.assistant.grpc.pushtotalk import main
interrupted = False
def signal_handler(signal, frame):
global interrupted
interrupted = True
def interrupt_callback():
global interrupted
return interrupted
model = "resources/models/ohayo.pmdl"
# capture SIGINT signal, e.g., Ctrl+C
signal.signal(signal.SIGINT, signal_handler)
detector = snowboydecoder.HotwordDetector(model, sensitivity=0.5)
print('Listening... Press Ctrl+C to exit')
# main loop
detector.start(detected_callback=main,
interrupt_check=interrupt_callback,
sleep_time=0.03)
detector.terminate()
model = "resources/models/ohayo.pmdl"の部分は自分の作成したpmdlファイルに合わせて適宜書き換えてください。
僕の場合は「おはよう」を登録した「ohayo.pmdl」を作成しました(過去記事参照)。
GoogleAssistantのpushtotalk.pyを書き換える
次に、以下のディレクトリにあるpushtotalk.pyを書き換える。
/home/pi/env/nyabot/lib/python3.5/site-packages/googlesamples/assistant/grpc
(ディレクトリ名「nyabot」は仮想環境名によって変わるので注意。適宜変更されたし。)
- リピートしないようにする
- キー入力を待たず、すぐに待受状態にする
書き換え箇所は、ファイルの最後の方にある以下の部分。
wait_for_user_trigger = not once
while True:
if wait_for_user_trigger:
click.pause(info='Press Enter to send a new request...')
continue_conversation = assistant.converse()
上記の部分を以下の内容に書き換え。
wait_for_user_trigger = once
while True:
if wait_for_user_trigger:
return
continue_conversation = assistant.converse()
pulseaudioをインストールする
これだけだと、環境によってはエラーが発生する模様。した。
pulseaudioをインストールすると解決するらしい。
pulseaudioは古いラズパイにはデフォルトで入っていたみたい?だけど、僕のにはなかったのでインストール。
$ sudo apt update $ sudo apt install pulseaudio
任意のホットワードでGoogleAssistantが起動する!
これで、自分の作成したホットワードでGoogleAssistantが起動するようになった。
$ source env/nyabot/bin/activate (nyabot)$ python snowboy/examples/Python3/ohayo.py
「おはよう(←ホットワード)、明日の東京の天気は?」
「明日の東京の天気は晴れです。」
あとはホットワードを変えれば、彼または彼女は、HAL9000にもドラえもんにもなってくれる。
きっとこんな感じ。
「HAL(←ホットワード)、君の名前は?」
「私はGoogleアシスタントです。」
なるほど。課題は多い。今回はここまで。
つづく。
追記
君の本当の名前を知りたかったよ……。