あっきぃ日誌

鉄道ブログのような技術系ブログのようななにか

Voice KitにI2Cポートを生やしてMicroDot pHATに喋った単語を表示させる

Raspberry Pi Advent Calendar 2017 最終日です。つかまんさんとかぶってて恐縮ですが、書いてなかったのでVoice Kitの話題。

adventar.org

ところで数日前にGoogle Assistant SDKに日本語対応が入ったようで、Voice Kitも日本語でやれるようになっていると思います。私もそのうち触りたい。

japanese.engadget.com

developers.googleblog.com

やっと本題。先日のOSC.EnterpriseでRaspberry Piの展示をしてほしいとしゃちょうからリクエストが来て、Enterprise感がある展示……?と思いながら、Voice HATになんか適当な一手間加えることにしました。

Ejectって言ったらCD-ROMドライブが開くものも作ってみたんですが、そんなのスピーカーに喋るかけてる間に手で押せやと言う気持ちにしかならなかったので、Micro Dot pHATをくっつけて喋った単語を表示する物体を作りました。

f:id:Akkiesoft:20171225212536j:plain

Voice Kitを組み立てていると気づくかと思いますが、Voice HATにはサーボモーターとかSPIとかI2Cとかのパターンが用意されていて、拡張していくことが可能になっています。この工作では、I2Cのスルーホールにピンヘッダーを立てて、そこにMicro Dot pHATを繋いだだけです。

f:id:Akkiesoft:20171225212940j:plain

Micro Dot pHATのピンアサインはpinout.xyzを参考に接続します。ほんとにI2Cだけなので、4本でいけます。

Micro Dot pHAT at Raspberry Pi GPIO Pinout

f:id:Akkiesoft:20171225213919j:plain

固定はひっつき虫で適当に。

f:id:Akkiesoft:20171225214053j:plain

ソフト的なセットアップは、Google AIYの専用ディストリを起動した後にapt-get コマンドでpimoroniパッケージをインストールして、pimoroni-dashboardコマンドでMicro Dot pHATのソフトウェアをインストールします。

/home/pi/Pimoroni/microdotphat/examples/から、scrolling-text.pyとsine-wave.pyの2つを/home/pi/AIY-voice-kit-python/srcにコピーします。

46ページ〜50ページのCloud Speech APIのセットアップを済ませて、以下のスクリプトを/home/pi/AIY-voice-kit-python/srcに置きます。cloudspeech_demo.pyを少しいじって、Micro Dot pHATのサンプルスクリプトに喋ったテキストを渡すだけです。何の工夫もない。聞き取り中に流れるサインウェーブすらサンプルを動かしているだけです。タダ乗り。

#!/usr/bin/env python3
import aiy.audio
import aiy.cloudspeech
import aiy.voicehat
import subprocess

def main():
  recognizer = aiy.cloudspeech.get_recognizer()

  button = aiy.voicehat.get_button()
  aiy.audio.get_recorder().start()

  scroll = subprocess.Popen([
    "/usr/bin/python","scrolling-text.py",
    "Press the button and speak"])
  while True:
    print('Press the button and speak')
    button.wait_for_press()
    scroll.kill()
    sinewave = subprocess.Popen(["/usr/bin/python","sine-wave.py"])
    print('Listening...')
    text = recognizer.recognize()
    sinewave.kill()
    if text is None:
      print('Sorry, I did not hear you.')
    else:
      text = text + "     "
      scroll = subprocess.Popen(["/usr/bin/python","scrolling-text.py",text])
      print('You said "', text, '"')

if __name__ == '__main__':
  main()

そんなわけで一晩で展示物をでっちあげてOSCでデモをしてみたのですが、わかったこととしては、賑やかな展示会場では雑音を拾ったり、無線LANがやられて通信できなくなったりして、ほぼデモにならないと言うことでした……。

さて、Google AIYでは早くも次のプロジェクトとしてVision Kitが発表されており、もうそろそろ海外では発売されるようです。このKitではカメラモジュールを使って映像解析とかそんなのができるみたいですね。日本とかPimoroniとかから買えるようになるのを楽しみにしたいところです。その前にカメラモジュール買い足さないとだめかしらん……?V1でも行ければ買い足さなくてもいいんだけど。

AIY Projects