Google Homeとかを買うほどでもないけど音声認識してHueとかいじったりしたいなあなどと考えていたら、Google Assistant SDKというやつを導入すれば色んな端末がGoogle Homeっぽい感じになるということを聞いたのでわけも分からずにやってみた。
今回のゴールはとりあえず音声認識させてTwitterに投稿させること。
マイクは手元に余っていた適当なUSBマイクを繋げた。
サンワサプライ USBマイクロホン ブラック MM-MCUSB21BK
- 出版社/メーカー: サンワサプライ
- メディア: Personal Computers
- 購入: 5人 クリック: 7回
- この商品を含むブログを見る
Raspberry Piにつなぐスピーカーなんて持ってなかったけどRaspberry Pi 2にはミニジャックが付いていたのでイヤフォンを刺してがんばって聞き取りながら進めた。
とりあえず公式ドキュメントっぽいやつに従って導入を進めた。 Introduction to the Google Assistant Library | Google Assistant SDK | Google Developers
何回か詰まったが、以下の対応で何とかなった気がする。
- Raspbian wheezyとかいうクソ古い環境だったのでサンプルのビルドがわけの分からない理由でコケまくる。結局、jessieのpython3やgccやbuild-essentialをインストールしたら何とかなった
- もっと新しい環境(testingとか)を使わなかったのは、apt-getのバージョンが古すぎて新しい環境のパッケージリストをうまく取り扱えて無さそうだったため……そもそもwheezyを使うべきでないので、元気があるなら新しい環境へちゃんとアップグレードした方が良いと思う。元気はない
- 日本語的に「オーケーグーグル」や英語的に「OK Google」だとなぜかほとんど認識されず、英語的に「Hey Google」だと大体認識された
- マイクの品質が低すぎるとか、ホットワードの設定がおかしいとか、様々な可能性がありそう
- マイクの感度が悪い気がしたので、amixerで設定した
- Linux/ALSA/amixer - とある技術の私書目録を参考に
-c 1
などとしてUSBマイクを指定した - 感度は勘で70%くらいにしておいた
- Linux/ALSA/amixer - とある技術の私書目録を参考に
- サンプルスクリプトが
[3788:3816:ERROR:audio_input_processor.cc(748)] Input error
みたいなエラーを吐いた時はどうやら別のプロセスがマイクを掴んでいるときのようなので、pkill arecord
などとして当該のプロセスを殺す
その後はRaspberry Pi にGoogle Assistant SDKを搭載して「OK Google」してみる。 - Qiitaを参考にTwitterに投稿させるIFTTTのアプレットを作成して、何度か適当に喋っていたらうまくいった。
「今日 は いい 天気 です ね」
— shimobayashi (@shimobayashi) 2018年1月28日
その後自動起動させたいと思って先ずは雑にコマンドの末尾にアンパサンドを付けて実行してみたが、そうするとなぜかInput errorが出てしまうのでバックグラウンド起動させられていない……。 調べてみた雰囲気ではsystemdを使って自動起動できてそうな人はいる感じだけど、wheezyなのでアップグレードしないと試せない……。
というわけで、動かすことはできたけど今日は実用レベルまで持っていけ無さそうな雰囲気になってきた。残念。また元気があったら調べたい。 ここまで書いて、余ってるAndroid端末にGoogle Assistantアプリを入れて音声でロック解除できるようにしたら、それを使えば良いのでは……?という気がしてきている(メイン端末はセキュリティ上の観点からやれない)。けど手持ちのAndorid端末全部まともな状態じゃないんだよな……。 iPadは鎮座しているものも迂遠なことをしないとIFTTTと連携できないっぽいし、役に立たない。