日本語化その2.ブレッドボード&LEDライト【Google AIY Voice Kit】

前回はデモプログラムの一つであるcloudspeech_demo.pyを日本語化して、日本語の音声コマンドでAIYスピーカーのボタンのLEDを付いたり消したりができるようになりました。

日本語化できた!Cloud Speechのデモプログラム【Google AIY Voice Kit】
今回は、Google AIY Voice KitのCloud Speech のデモプログラムを日本語化して、日本語の音声コマンドで、LEDボタンの光を付いたり消したりできるようにします。

今回は、ブレッドボードに接続したLEDライトでも同じように日本語の音声コマンドでライトを付けたり、消したりできるようにします。



ブレッドボード上のLEDライトを日本語の音声で

AIYスピーカーに接続して、ブレッドボード上のLEDライトを設定することについては、こちらの記事をご参照ください。

Google AIY Voice Kitで電子工作~LEDライトを点灯~
おうちにGoogle Homeがやってきましたが、Google AIY Voice Kitでも、AIスピーカーの学習を進めております。 ...

今回は、こちらのLEDライトに関するプログラムを、日本語にしてみます。ついでに、「さようなら」でプログラムを終了するコマンドも追加しました。

やり方は前回と似ているので、難しくはないと思います。

i18n.pyのファイルの言語を確認

まず、srcフォルダの下のaiyフォルダに入っているi18n.pyのファイルを見てみます。

nanoエディタを使って、i18n.pyファイルを編集します。

nano src/aiy/i18n.py

このファイルの中ほどにある、「_DEFAULT_LANGUAGE_CODE = ‘en-US’」が

「_DEFAULT_LANGUAGE_CODE = ‘ja-JP’」に変更されているか確認します。変更してなかったら、「’ja=JP’」に書き換えましょう。Ctrl-Xの後、Enterで元に戻ってきて…。

led_demo.pyのファイルを編集

次は、src/led_demo.pyのファイルを編集します。このファイルは前回の記事で、新規作成したのものです。ファイルのバックアップを取っておきますが、ここでは新たに日本語版ということで、led_demo_jap.pyというファイルを新規作成してみます。

cp src/led_demo.py src/led_demo_jap.py

…とファイルをコピーして、led_demo_jap.pyを編集していきます。

「import」のパート

Nanoエディタでファイルを開いて…

nano src/led_demo_jap.py

プログラムの一番初めに、importに関するコマンドを追加します。まずは一番最初にこちら。

import os

import aiy.audio

「import aiy.audio」と書かれたプログラムの冒頭に、「import os」と加えます。これは、「さようなら」でプログラムを終了させるために使います。

次に、import…が並んだ下に、「aiy.i18n.set_language_code(‘ja-JP’)」の一行を追加します。前回の日本語化と同じパターンです。

import RPi.GPIO as GPIO
aiy.i18n.set_language_code('ja-JP')

メインのパート

そして、メインの場所を、どんどん日本語のフレーズに変更していきます。日本語のフレーズは自由に考えちゃって大丈夫ですが、音声認識でテキスト化できるものを書かないとAIYスピーカーが認識してくれないので、そこだけ注意です。たとえば、「電気を付けて」と「付けて」が漢字だとエラーになるので、「電気をつけて」とあえて、ひらがなにします。

def main():
        recognizer = aiy.cloudspeech.get_recognizer()
        recognizer.expect_phrase('電気をつけて')
        recognizer.expect_phrase('電気を消して')

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

        GPIO.setmode(GPIO.BCM)
        GPIO.setwarnings(False)
        GPIO.setup(26, GPIO.OUT)

        while True:
                print('ボタンを押して話してください')
                button.wait_for_press()
                print('聞き取り中…')
                text = recognizer.recognize()
                if text is None:
                        print('すみません。聞こえませんでした。')
                else:
                        print('あなたの言葉は "', text, '"')
                        if '電気をつけて' in text:
                            GPIO.output(26, GPIO.HIGH)
                        elif '電気を消して' in text:
                            GPIO.output(26, GPIO.LOW)
                        elif'さようなら' in text:
                            os._exit(0)

        GPIO.cleanup()

新たに追加したコマンド その1

ここで、日本語以外に変えた場所が2か所あります。

1つは、「さようなら」でプログラムが終了するコマンドを追加しました。「elif ‘電気を消して’…」関連の後に、

elif'さようなら' in text:
    os._exit(0)

と加えています。ここで、使用している「os._exit(0)」のために、冒頭で「import os」を加えていたわけですね。

新たに追加したコマンド その2

また、さようならコマンドの後に

GPIO.cleanup()

も追加しました。これは加えなくても良いのですが、次にプログラムを実行したときに、「このチャンネルは使用中ですが継続します…」みたいな英語のメッセージが出てくるのを避けるために入れました。

プログラムを保存して、いざ実行してみますと…

src/led_demo_jap.py

音声でLEDライトが点灯!

ブレッドボード上のLEDライトが点灯しました。 パチパチパチ!

ターミナル画面を見ると、このように表示されています。

今回は「さようなら」というと、プログラムが終了しているのが分かります。

(おまけ)LEDライトを点滅させてみる

ついでなので、LEDライトを点滅させるプログラムも追加してみます。

こちらは、クジラ飛行机さんの「やさしくはじめるラズベリーパイ」の本で、「Lチカ」ことLEDライトを点滅させるプログラムの学習をしたので、これをAIYスピーカーの音声認識に応用してみようと思ったのでした。

今度は「チカチカ」の音声でLEDライトが10回点滅するようにします。

先ほどのsrc/led_demo_jap.pyのファイルを、再びnanoエディタで開きます。

「import」のパート

nano src/led_demo_jap.py

こちらのプログラムの冒頭にimport…がズラズラ並んでいるところに、「import time」を追加します。

import RPi.GPIO as GPIO
import time              # Sleepを利用する
aiy.i18n.set_language_code('ja-JP')

これは、ライトが点滅する間の時間(sleep)のために利用します。Pythonだと、#の後にコメントを書き込めるとのこと。へぇーと思いながら、さっそく利用。クジラ飛行机さんの「やさしくはじめるラズベリーパイ」の本、かなり勉強になります。分かりやすいし、ホント、感謝です(^^♪。

メインのパート

次に、「recognizer…電気を消して」の下に「recognizer.expect_phrase(‘チカチカ’)」を加えます。

recognizer.expect_phrase('電気を消して')
recognizer.expect_phrase('チカチカ')
button = aiy.voicehat.get_button()

さらに、「elif…電気を消して」と「elif…さようなら」の間に、チカチカのためのコマンドを追加します。

elif '電気を消して' in text:
    GPIO.output(26, GPIO.LOW)
elif 'チカチカ' in text:
    for i in range(10):
        print("i=", i)
        GPIO.output(26, GPIO.HIGH)
        time.sleep(0.3) # 0.3秒待つ
        GPIO.output(26, GPIO.LOW)
        time.sleep(0.3) # 0.3秒待つ
elif 'さようなら' in text:

0.3秒間隔で、LEDライトの点灯を10回繰り返す、となっていますが、ここの数字は、いろいろ変えて、自分が好きなものを選んでみると良いですね。

LEDライトの点滅成功!

こんな感じで、プログラムを変更して、保存し、再び実行してみますと…。

src/led_demo_jap.py

LEDライトがチカチカ点滅しました!

AIYスピーカーでLチカ、成功です!!!(^◇^)

ターミナル画面にはこんな感じで表示されます。

1つずつできることが増えていくのって、やはり嬉しいですね。

間違えながら学ぶ

なんか、カンタンにできました!って書いたように思われるかもしれませんが、実際は、プログラムを実行して、Syntax ErrorとかInvalid charactersとかエラーの連続を味わっています。

自分で言うのも何ですが、なんとまぁ、書き損じの多いこと…。「in text:」と書くべき言葉を抜かしたり、「GPIO.HIGH」の「.(ドット)」を忘れたり… 。エラーが出るたびに、今度はどこだ!と慣れっこになってる自分がいます。書いて1回でOKとか絶対ムリです~。こうやって学習していくのかしら(^-^;。

何事もそうですが、人間って間違えながら学んでいくのねぇ、としみじみ。

今後も、次は何を日本語で言ってもらおうかな~と考えながら、いろいろ試してみたいと思います。

次の記事はこちら。

AIYスピーカーを、ほぼ日本語版Google Homeに【Google Assistant SDKアップデート】
Google Assistant SDKが日本語対応したとの情報を受け、AIYスピーカーと格闘し、試行錯誤の末、日本語で話しかけて、日本語で答えてくれるレベルに何とか到達しました。日本語でほぼGoogle Home化成功。その過程をメモしておきます。

コメント

  1. こんにちは。コメントありがとうございました。そして、素敵な情報も教えていただき、感謝です。日本語対応したんですね~。只今、出先なので、明日家に戻ったら、さっそく私も四苦八苦してみます。

  2. RD-Style FAQ より:

    はじめまして。
    「Google AIY Voice Kit」を手に入れたので参考にさせていただいております。

    以下ご参考までに、、
    https://robotstart.info/2017/12/22/google-assistant-sdk.html
    「Google Assistant SDK」がアップデートで日本語に対応したようなので、
    現在日本語でしゃべらせようと四苦八苦しております(汗)。

error: Content is protected !!