前回はデモプログラムの一つであるcloudspeech_demo.pyを日本語化して、日本語の音声コマンドでAIYスピーカーのボタンのLEDを付いたり消したりができるようになりました。
今回は、ブレッドボードに接続したLEDライトでも同じように日本語の音声コマンドでライトを付けたり、消したりできるようにします。
ブレッドボード上のLEDライトを日本語の音声で
AIYスピーカーに接続して、ブレッドボード上のLEDライトを設定することについては、こちらの記事をご参照ください。
今回は、こちらの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とか絶対ムリです~。こうやって学習していくのかしら(^-^;。
何事もそうですが、人間って間違えながら学んでいくのねぇ、としみじみ。
今後も、次は何を日本語で言ってもらおうかな~と考えながら、いろいろ試してみたいと思います。
やさしくはじめるラズベリー・パイ ~電子工作で簡易ロボット&ガジェットを作ってみよう~
次の記事はこちら。
コメント
こんにちは。コメントありがとうございました。そして、素敵な情報も教えていただき、感謝です。日本語対応したんですね~。只今、出先なので、明日家に戻ったら、さっそく私も四苦八苦してみます。
はじめまして。
「Google AIY Voice Kit」を手に入れたので参考にさせていただいております。
以下ご参考までに、、
https://robotstart.info/2017/12/22/google-assistant-sdk.html
「Google Assistant SDK」がアップデートで日本語に対応したようなので、
現在日本語でしゃべらせようと四苦八苦しております(汗)。