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と同じように実行してみてください。
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
#!/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のドキュメント(英文))