Google AIY Voice Kit V2の基本操作サンプル集


Raspberry Piで動くGoogle AIY Voice Kit V2というスマートスピーカーキットの基本操作のサンプルをまとめました。LEDやボタン、オーディオの基本操作とGoogleアシスタントAPI、Cloud Speechのサンプル等を載せています。

Voice Kit V2

とは↓こんな感じ↓のダンボール型スマートスピーカーです。

LEDボタン・スピーカー・マイクが搭載されたラズベリーパイのキットです。自分で組み立てます。組立方法はとても簡単なので誰でも作れます。この値段でスマートスピーカーが作れるとは、なんていい時代なんでしょうか。

AIY with Python

組み立ては誰でもできますが、いざ何かしようと思うとプログラミングが必要です。Googleが用意してくれているPython用のライブラリを使用してプログラミングしていきます。というわけでリファレンス的に使えるVoice Kit V2の基本操作のサンプルをまとめておくことにしました。

なお、各スクリプトの1行目で #!/usr/bin/env python3 してるのは、Voice Kit用のRaspbianOSにはPython2系と3系の両方がインストールされているのですが、aiyライブラリがPython3環境にインストールされているので、必ずそちらを使用するようにしているためです。(シェルで普通にpythonを実行すると2系が実行されちゃいますからね・・・)

LED操作(V1・V2)

LEDボタンを光らせたり点滅させたりします。Voice KitにはV1とV2があるのですが、まずは両バージョンに対応している基本操作から。

LEDのオン・オフ

#!/usr/bin/env python3
import time
from aiy.board import Board, Led

print('LEDを点灯・消灯するサンプルです')
with Board() as board:
    print('点灯します')
    board.led.state = Led.ON
    time.sleep(3)
    print('消灯します')
    board.led.state = Led.OFF
    time.sleep(3)

LEDの点滅

#!/usr/bin/env python3
import time
from aiy.board import Board, Led

print('LEDを点滅させるサンプルです')
with Board() as board:
    board.led.state = Led.BLINK
    time.sleep(3)

LEDの明るさ調整

#!/usr/bin/env python3
import time
from aiy.board import Board, Led

print('LEDの明るさを変更させるサンプルです')
with Board() as board:
    print('まずは暗く')
    board.led.brightness = 0.1
    board.led.state = Led.ON
    time.sleep(3)
    board.led.state = Led.OFF
    print('次は明るく')
    board.led.brightness = 1.0
    board.led.state = Led.ON
    time.sleep(3)

LEDの点滅(色んなState)

#!/usr/bin/env python3
import time
from aiy.board import Board, Led

print('LEDを色んな感じで点滅させます')
with Board() as board:
    print('BLINK_3')
    board.led.state = Led.BLINK_3
    time.sleep(5)
    board.led.state = Led.OFF
    time.sleep(3)

    print('BEACON')
    board.led.state = Led.BEACON
    time.sleep(5)
    board.led.state = Led.OFF
    time.sleep(3)

    print('BEACON_DARK')
    board.led.state = Led.BEACON_DARK
    time.sleep(5)
    board.led.state = Led.OFF
    time.sleep(3)

    print('DECAY')
    board.led.state = Led.DECAY
    time.sleep(5)
    board.led.state = Led.OFF
    time.sleep(3)

    print('PULSE_SLOW')
    board.led.state = Led.PULSE_SLOW
    time.sleep(5)
    board.led.state = Led.OFF
    time.sleep(3)

    print('PULSE_QUICK')
    board.led.state = Led.PULSE_QUICK
    time.sleep(5)

↑BLINK_3〜DECAYは通常のBLINKと同じでした(?)。PULSE_SLOW/PULSE_QUICKはBLINKと違い、ボワーっと点滅します。

LED操作(V2のみ)

Voice Kit V2でのみ使用できるaiy.ledsライブラリです。

LEDをカラフルに点灯

#!/usr/bin/env python3
import time
from aiy.leds import Leds, Color

print('LEDをカラフルに点灯させるサンプルです')

COLORS = (
    Color.BLACK,
    Color.BLUE,
    Color.CYAN,
    Color.GREEN,
    Color.PURPLE,
    Color.RED,
    Color.WHITE,
    Color.YELLOW,
)

with Leds() as leds:
    for color in COLORS:
        for _ in range(2):
            leds.update(Leds.rgb_on(color))
            time.sleep(1)
            leds.update(Leds.rgb_off())
            time.sleep(1)

↑BLACKは黒とは言えない色でしたが・・・

LEDを好きな色で点灯

#!/usr/bin/env python3
import time
from aiy.leds import Leds, Color

print('LEDを好きな色に点灯させるサンプルです')

with Leds() as leds:
    # オレンジっぽい色
    leds.update(Leds.rgb_on(Color.blend(Color.RED, Color.YELLOW, 0.9)))
    time.sleep(3)

LEDを好きなパターンで点滅

#!/usr/bin/env python3
import time
from aiy.leds import Leds, Color, Pattern

print('LEDを好きなパターンで点滅させるサンプルです')

with Leds() as leds:
    print('チカチカと点滅 blink500')
    leds.pattern = Pattern.blink(400)
    leds.update(Leds.rgb_pattern(Color.BLUE))
    time.sleep(5)
    print('ブォーンブォーンと点滅 breathe500')
    leds.pattern = Pattern.breathe(800)
    leds.update(Leds.rgb_pattern(Color.RED))
    time.sleep(5)

ボタン

ボタンの押しっ放しを検出

#!/usr/bin/env python3
from aiy.board import Board, Led

print('ボタンの押しっ放しを検出するサンプルです(CTRL+Cで終了)')

with Board() as board:
    while True:
        print('ボタンを押しっ放しにしてください...')
        board.button.wait_for_press()
        print('オン! 今度は離してみて!')
        board.led.state = Led.ON
        board.button.wait_for_release()
        print('オフ!')
        board.led.state = Led.OFF

ボタンを押した時・離した時を検出

#!/usr/bin/env python3
from aiy.board import Board, Led

print('ボタンが押された時・離された時に処理を実行するサンプルです(CTRL+Cで終了)')

def on_pressed():
    print('押したよね!')

def on_released():
    print('離したよね!')

with Board() as board:
    board.button.when_pressed = on_pressed
    board.button.when_released = on_released
    print('ボタンを押してみて...')
    while True:
        pass

スピーチ

aiy.voice.ttsというライブラリで、テキストを発話するAPIです(Text−To-Speech)。ただしこれ、まだ日本語には対応していません・・・。というわけでサンプルは英語です。

テキストを発話

#!/usr/bin/env python3
import aiy.voice.tts

print('Text−To-Speech(発話)のサンプルです(英語)')

# 普通に
aiy.voice.tts.say("Hello, I'm yoshiko.")
# 気取って
aiy.voice.tts.say("What have you got for me tonight?", lang='en-GB')
# 大声で
aiy.voice.tts.say("Put a sock in it!", volume=100)
# 1オクターブ上
aiy.voice.tts.say("Lovely weather today.", pitch=200)
# 早口で
aiy.voice.tts.say("The quick brown fox jumped over the lazy dog.", speed=150)

マイク

基本的にはrecord_fileとplay_wavしているだけです。

録音・再生

#!/usr/bin/env python3
import time
import threading

from aiy.board import Board, Led
from aiy.voice.audio import AudioFormat, play_wav, record_file

with Board() as board:
    print('ボタンを押して録音開始')
    board.led.state = Led.ON
    board.button.wait_for_press()
    board.led.state = Led.OFF

    done = threading.Event()
    board.button.when_pressed = done.set

    def wait():
        start = time.monotonic()
        while not done.is_set():
            duration = time.monotonic() - start
            print('録音中: %.02f 秒 [ボタンを押してストップ]' % duration)
            time.sleep(0.5)

    record_file(AudioFormat.CD, filename='audio_record.wav', wait=wait, filetype='wav')
    print('ボタンを押して再生')
    board.led.state = Led.ON
    board.button.wait_for_press()
    board.led.state = Led.OFF

    print('再生中...')
    play_wav('audio_record.wav')
    print('終了')

↑ボタンを押して録音開始、もう一度押したら停止、さらにもう一回押して保存した音声を再生です。

音声認識(Cloud Speech)

GoogleのCloud Speechを利用します。SpeechToTextというAPIで、これは音声をテキストに変換するAPIです。使用するためには事前にGoogle Cloud PlatformでAPIを有効化し、認証キーファイル(JSON)をホームディレクトリに配置しておく必要があります。詳細な手順は以下の公式に従って下さい。

CUSTOM VOICE USER INTERFACE

Speech to Text(書き取り)

#!/usr/bin/env python3
import datetime
from aiy.board import Board
from aiy.cloudspeech import CloudSpeechClient

print('Speech To Text(書き取り)のサンプルです("終了"と言うと終了します)')
client = CloudSpeechClient()
with Board() as board:
    while True:
        print('聴き取り中・・・')
        text = client.recognize(language_code='ja-JP',
                                hint_phrases=('今何時', '今日の天気は', '終了'))
        if text is None:
            print('何かしゃべってよ')
            continue

        print('「{}」と言いましたね!'.format(text))

        if '今何時' in text:
            now = datetime.datetime.now()
            print(now)
        if '今日の天気は' in text:
            print('たぶん晴れじゃないかなあ')
        elif '終了' in text:
            print('え?もう行っちゃうの・・・?')
            break

指定しておきたい定型文があれば、上記のようにhint_phrasesとして登録しておきます。こうしておくとCloudSpeechClient#recoginizeによる音声認識時に優先的にその語を検出してくれるようになります。要は発音が少しボケていてもちゃんと聴き取ってくれるようになるってイメージですね。あらかじめボイスコマンドを設定しておきたいときには便利なオプションだと思います。

Googleアシスタント

いわゆるGoogle Homeのようなアシスタント機能を提供するAPIです。Assistant APIといいます。これも事前にAPIを有効化し、サービスアカウントキーを入手しておく必要があります。以下の公式の手順に従って下さい。

GET CREDENTIAL

Goolge Homeもどき

#!/usr/bin/env python3
from aiy.assistant.grpc import AssistantServiceClientWithLed
from aiy.board import Board
print('Google Homeもどきのサンプルです(CTRL+Cで終了)')

with Board() as board:
    assistant = AssistantServiceClientWithLed(board=board,
                                              volume_percentage=50,
                                              language_code='ja-JP')
    while True:
        print('ボタンを押して会話を始めましょう')
        board.button.wait_for_press()
        print('スタート!')
        assistant.conversation()

最後に

まあこれだけあれば大体のことはできると思います。テキスト→発話の日本語ができないのは痛いですが、これに関しては別のライブラリで一応解決できますので、後日また書こうかな。

参考

関連する記事


コメントする

メールアドレスが公開されることはありません。

CAPTCHA


このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください