Raspberry Pi 3 Model B で Google Assistant SDK を使うまでにやったこと

f:id:km1983:20171211001608j:plain

普通に音声デバイスを使いたい方は Google Home を購入するのがオススメなのですが、一部の特殊な処理をやりたいがために自作に挑戦した話です。

 

 

■きっかけ

「料理中とか手が塞がっているときに音声でテレビのチャンネルを切り替えられたらいいな」というニーズから。
Google Home + Nature Remo or IRKit というのが家電操作としてはオーソドックスなようですが、そうしなかったのは動作の遅延時間が気になったためです。
Google Home からの処理を IFTTT 経由で伝えるわけなのですが、IFTTT には最大15分の遅延があって、チャンネル変更とか即時性が求められるものだと用途としてきついかなと思いました。(実際のところ、ほとんど遅延はないようですが)

 

そこで、Google Assistant SDK をラズパイに入れて、音声認識結果から直接家電操作の処理を起動させるようにしたらいいのではないかと考えました。

 

■買ったもの
ラズベリーパイ3 (Raspberry Pi 3B made in JAPAN) 技適対応 日本製 + 5.1V/2.5A ラズベリー財団公式アダプタ 【本体+アダプタ セット品】



Kuman Raspberry piに適用 サウンドカード モジュール i2sインターフェース 専用PiFi Digi/ DAC+ / HIFI デジタルオーディオカードピンボード Raspberry pi 3 2 Model B B +対応 V2.0ボード ラズベリーパイdac SC08


サンワサプライ WEB会議高感度USBマイク MM-MCUSB22


cocopar®ラズベリーパイ Raspberry Pi B+/2 Bに適用する1.2.4層スタック クリア アクリルケース (4層ケース)


irMagician-高性能/低価格 赤外線リモコン

 

 

もともと持っていたもの
・スピーカー

 

■やったこと

history ベースで、やらなくてよかったとか無駄なところは「#」つけて、「<-」でコメントつけてあります。

1 sudo passwd root
2 sudo apt-get update
3 sudo apt-get upgrade
4 sudo rpi-update
5 sudo apt-get install vim
# 6 sudo vim /etc/dhcpcd.conf
7 ifconfig
8 sudo vim /etc/dhcpcd.conf <- IP固定
9 sudo touch /boot/ssh
10 sudo reboot
11 sudo passwd pi <- これもっと最初の方でやるべき
12 sudo vim /etc/ssh/sshd_config <- SSHのポート番号変更
13 sudo reboot
14 exit
// PC から scp で公開鍵 (id_rsa.pub) 受けとっておく
# 15 mv id_rsa.pub .ssh/authorized_keys
# 16 ls
# 17 ls -al
18 mkdir .ssh
19 mv id_rsa.pub .ssh/authorized_keys
# 20 vim /etc/ssh/sshd_config
21 sudo vim /etc/ssh/sshd_config <- 公開鍵 SSH 以外で入れないように変更
# 22 exit
23 chmod 600 .ssh/authorized_keys
24 sudo reboot
25 exit
# 26 ls
27 lsusb
28 sudo apt-get install portaudio19-dev libffi-dev libssl-dev
29 arecord -l
30 aplay -l
# 31 uname -a
32 sudo vim /etc/modules
# 33 ls -l /boot/config.txt
# 34 less /boot/config.txt
35 sudo vim /boot/config.txt
# 36 lsmod
37 sudo vim /etc/modprobe.d/raspi-blacklist.conf
38 sudo reboot
39 aplay -l
# 40 history
# 41 arecord -r 16000 -f S16_LE test.wav
# 42 arecord -l
43 arecord -D plughw:1,0 test.wav
44 aplay test.wav
45 sudo apt-get install python3-dev python3-venv
46 python3 -m venv google-assistant-env
# 47 google-assistant-env/bin/pyton -m pip install --upgrade pip setuptools
48 google-assistant-env/bin/python -m pip install --upgrade pip setuptools
49 source google-assistant-env/bin/activate
# 50 python -m pip install --upgrade https://github.com/googlesamples/assistant-sdk-python/releases/download/0.3.0/google_assistant_library-0.0.2-py2.py3-none-linux_armv7l.whl
# 51 python -m pip install --upgrade google-assistant-library
# 52 python -m pip install --upgrade google-auth-oauthlib[tool]
# 53 history
54 sudo python3 -m pip install --upgrade google-assistant-sdk[samples]
# 55 google-assistant-demo
56 google-oauthlib-tool --client-secrets /home/pi/GoogleAssistantFiles/client_secret.json --scope https://www.googleapis.com/auth/assistant-sdk-prototype --save --headless
# 57 google-assistant-demo
# 58 lsmodule
# 59 lsmod
# 60 google-assistant-demo
# 61 ls /dev/
62 sudo apt-get install pulseaudio pavucontrol <- これ45あたりでやるべき
63 google-assistant-demo

25までが共通的な初期設定で、27から44までがサウンドカード関係の設定で、45から Google Assistant の設定ですね。


■結果
想定していた処理はできました。

独自処理を入れこみたいときは google-assistant-demo ではなく google-assistant-sdk/googlesamples/assistant/library/hotword.py を使います。
https://developers.google.com/assistant/sdk/reference/library/python/
にあるように ON_RECOGNIZING_SPEECH_FINISHED で帰ってきた text の中身を見て、特定キーワードが入っていたら irMagician から赤外線信号を飛ばして家電を操作するようにしました。


■想定外だったこと
・英語のみ
ニュースで Google Assistant が日本語対応したというのをみていたので日本語が使えるかと思っていたのですが、どうも Google Assistant SDK はまだ日本語対応していないようで。
なので英語での使用となっています。

 

・使えるサービスがほとんどない
Google Home のようにニュースを教えてくれたり、音楽を再生してくれたり、そういったことができません。
できないというか、初期状態でそういうサービスと連携されていません。
なぜか天気は答えてくれますけど。
なので、ただの音声検索マシンみたいな状態です。

 

・スペック不足
音声認識結果のあと、キーワードではなく自然言語処理をしてから判定をしたかったのですが、CoreNLP を使おうとしたらヒープ不足で動かず。
たとえば、「study」と「studies」は文字列一致だと別物ですけど意味としては同じものなので、NLP の処理で元の形である「study」にしてから判定という流れにしたかったわけです。

 

・エラーハンドリングが困難
認識開始とか、認識終了とか、状態の通知は飛んでくるのですが、基本的に得られる情報がほとんどありません。
なので、問題が起きて止まったりしてもうまくハンドリングできなかったり。
稀にエラーも出ていないのにまったく反応しなくって、Assistant を再起動したら復活、とかいうこともあります。


■感想
やってみてどうだったかというと、やってよかったと思います。
ラズパイを使うこと自体が初めてだったのでいい勉強になりました。
Python に親しむきっかけになりましたし。

 

あと、英語で使っていることもあって、英語の勉強には役立っています。
What is ~ ?
と言えば英英辞典のように英語で単語の説明してくれますし、
Repeat after me, ~
と言えばネイティブの発音とスピードで言い返してくれますし、
What is ~ in Japanese ?
と言えば日本語で答えてくれます。(なぜかここは日本語OK)
他にも独自処理を追加することでまだまだ勉強への活用範囲は広げられそう。

 

 

以上。
Google Assistant SDK は可能性は感じられるものの、普通に使う分には Google Home を買うのがオススメです。