Google AIY Projectsの第1段「Voice Kit」はわずか3500円でマイクアレイ、スピーカー・アンプ、スイッチなどがセットになっており、大変お買い得なキットです。サーボも接続することができるので、べゼリーを動かしてみましょう。
用意するもの
・Google AIY projetcts Voice Kit
・KSY Raspberry Pi Shop
・スイッチサイエンス
・ピンヘッダとハンダづけ機材
組み立て
・Voice HATにサーボをとりつけるには、ピンヘッダをハンダづけしなければなりません。3対のピンヘッダを3つ、Servo0、Servo1、Servo2にハンダづけします。3対のピンヘッダを買うのは難しいかもしれませんが、長いピンヘッダを買ってきてニッパーで切れば使えます。
・Voice HATにピンヘッダを差し込んだ状態で、ひっくりかえして裏側からハンダづけします。
・サーボをとりつけます。Servo0にStageサーボ、Servo1にBackサーボ、Servo2にHeadサーボをとりつけます。ケーブルの色にご注意ください。オレンジが信号線、赤が電源、茶がGNDです。
・Voice HATをラズパイに差し込み、スイッチ、スピーカー、マイクを接続します。マイクは両面テープでべゼリーの台座の前面パネルに内側から貼り付けます。
ソフトウェアの準備
・Vision Kitの公式マニュアルを見ながら、「cloud_speech_demo.py」が動かせるところまで進めてください。ボタンを押したあと予め設定したキーワードを喋ると、ラズパイが認識するというデモです。
・以下のサンプルプログラムを保存し、cloud_speech_demo.pyと同じように実行してみてください。
サンプルプログラム
#!/usr/bin/env python3
import sys
import aiy.audio
import aiy.cloudspeech
import aiy.voicehat
from time import sleep
from gpiozero import Servo
adj0=-0.05
adj1=0
adj2=0
max0=(2.0+adj0)/1000
min0=(1.0+adj0)/1000
max1=(2.0+adj1)/1000
min1=(1.0+adj1)/1000
max2=(2.0+adj2)/1000
min2=(1.0+adj2)/1000
servo0 = Servo(26,min_pulse_width=min0,max_pulse_width=max0)
servo1 = Servo(6,min_pulse_width=min1,max_pulse_width=max1)
servo2 = Servo(13,min_pulse_width=min2,max_pulse_width=max2)
def main():
aiy.audio.say("hi there")
recognizer = aiy.cloudspeech.get_recognizer()
recognizer.expect_phrase('hello')
recognizer.expect_phrase('what is your name')
recognizer.expect_phrase('how are you')
recognizer.expect_phrase('good bye')
button = aiy.voicehat.get_button()
aiy.audio.get_recorder().start()
aiy.audio.say("press the button and speak")
while True:
servo0.value=None
servo1.value=None
servo2.value=None
print('Press the button, and speak')
button.wait_for_press()
print('Listening...')
text = recognizer.recognize()
if text is None:
print('Sorry, I did not hear you.')
aiy.audio.say("hmmm")
else:
print('You said "', text, '"')
if 'hello' in text:
servo2.value=-0.5
aiy.audio.say("hi guys")
servo2.value=0
sleep(1)
elif 'what is your name' in text:
servo2.value=0.5
aiy.audio.say("I am Bezelie")
servo2.value=0
sleep(1)
elif 'how are you' in text:
servo0.value=0.5
aiy.audio.say("not bad")
servo0.value=-0.5
aiy.audio.say("thank you")
servo0.value=0
sleep(1)
elif 'goodbye' in text:
servo2.value=-0.5
aiy.audio.say("see you soon")
servo2.value=0
sleep(1)
exit (0)
else:
servo1.value=0.5
aiy.audio.say("hmmm")
servo1.value=0
sleep(1)
if __name__ == '__main__':
main()
解説
・27~30行目で認識するキーワードを定義しています。
・49行目以降で、キーワードが認識された場合の処理を記述しています。
・Voice Kitはクラウド型なので、やはり反応がちょっと遅いですね。
tips
・日本語対応の音声AIアシスタント「Google Assistant」として使う方法はこちらをご覧ください。現状では音楽・ラジオの再生や、ニュース読み上げ機能が使えないようなので、ちょっと残念ですね。
・上記サンプルプログラムで使用しているGPIOZEROモジュールは、サーボの制御以外にも様々な機能を備えています。(GPIOZEROのドキュメント(英文))




