5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

エニプラAdvent Calendar 2021

Day 3

はじめてのGoogle AIY Voice Kit⑥【サンプルコード実行編】

Last updated at Posted at 2022-02-02

はじめに

前回のラズパイSSH接続編の記事はこちらから:information_desk_person:
今回はサンプルコード実行編です。
LEDの操作、ボタンの操作、スピーチ(発話)、マイクの機能を試していきたいと思います。

サンプルコードでできること

サンプルコードは公式サイトに記述してあります。
また、今回はこちらのサイトも併せて参考にさせていただきました。

サンプルコードでは、以下の機能を確認することができます。

  • LEDの操作
    • LEDのオン・オフ
    • LEDの点滅
    • LEDの明るさ調整
    • LEDの点滅形式
    • LEDをカラフルに点灯
    • LEDを好きな色で点灯
    • LEDを好きなパターンで点滅
  • ボタンの操作
    • ボタンの押しっぱなしを検出
    • ボタンを押した時・離した時を検出
  • スピーチ(発話)
    • テキストを発話
  • マイク
    • 録音・再生
  • 音声認識(Cloud Speech)
    • Speech to Text(書き取り)
  • Googleアシスタント
    • Goolge Home

LEDのオン・オフを実施してみる

ディレクトリとPythonファイルの作成

①以下のコマンドを入力し、作業用の「work」ディレクトリを作成します。

mkdir work

②以下のコマンドを入力し、workディレクトリに移動します。

cd work

③テキストエディタ「vi」(Raspberry Piに標準でインストールされています)を起動し、workディレクトリに「led_onoff.py」というファイルを作成します。(「.py」はPythonのファイルを意味しています)

sudo vi led_onoff.py

④viエディタが起動します。
viエディタはコマンドモードになっているため、キーボードをタイプしても何も入力できないようになっています。
そのため、キーボードの[i]を押し、コマンドモードから入力モードに変更します。

コードの記述

⑤以下のコードを入力します。

#!/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)

⑥コードを入力したら、ファイルを保存します。
この時、テキストを入力するモード(入力モード)になっているため、コマンドモードに戻します。
戻すためには、[esc]キーを押します。

⑦コマンドモードになったら、以下のコマンドを入力します。

:wq!

⑧[Enter]を押下し、作成したPythonのプログラムファイルを保存します。

プログラムの実行

⑨以下のコマンドを入力し、先程作成した「led_onoff.py」を実行します。

python3 led_onoff.py

実行結果

Tera Term画面
image.png

光りました!
IMG_0782.jpg

サンプルコード一覧

サンプルコードでできることで紹介したサンプルコードを以下にまとめました。

LEDの操作

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の点滅形式
#!/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)
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)
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
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)

マイク

録音・再生
#!/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-to-Text API)

Googleの「Cloud Speech-to-Text」というAPI(音声をテキストに変換する)を使用します。
「Speech-to-Text」を使用するためには、事前にGoogle Cloud PlatformでAPIを有効化し、秘密鍵(JSON)をホームディレクトリに配置しておく必要があります。
詳細な手順は別の記事で紹介予定です。

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

Googleアシスタント

「Google Assistant API」(Google Homeのようなアシスタント機能を提供する)を使用します。
こちらも事前にAPIを有効化し、サービスアカウントキーを取得する必要があります。
詳細な手順は別の記事で紹介予定です。

GoolgeHome
#!/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()
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?