のぼゆエンジニアリング

ゼロから機械設計を勉強してみたりするブログ

Google AIY Voice Kit 2.0 に日本語で任意の言葉を話しかけて、指定した返答を読み上げてもらう方法



スポンサーリンク

Google AIY Voice Kit 2.0 に日本語で任意の言葉を話しかけて、指定した返答を読み上げてもらう方法

今年(2018年)の夏に発売された、Google AIY Voice Kit V2を購入しました。
これに日本語で任意の言葉を話しかけて、指定した答えを日本語音声で返してもらう方法を紹介します。

英語だと容易なんですが、日本語で同じことをさせるのに苦労しました。

また、Google AIY Voice Kit 2.0にはラズベリーパイが搭載されていますので、プログラミングはPythonですることができます。

サンプル課題の実演動画

具体的にどんな動作なのか?
サンプル課題で動画を録ってみました。

繰り返して!(Repeat after me)

合言葉



Google AIY Voice Kitとは?

スマートスピーカーを自作するキットです。
完成されたモノではなく、自分で組み立てて設定する必要があります。

とはいえ、最初の立ち上げまでは簡単です。
PC(ラズベリーパイ;Raspberry Pi Zero WH)、スピーカーやマイク、OSやデモファイルがインストールされたSDカードもついています。

▼アマゾンで購入できます

採用されたラズベリーパイはRaspberry Pi Zero WHなので、無線接続ができて配線がすっきりするのも良いです。
(セットアップから有線コードは電源コードだけで完結します。)

▼なお、電源は別売りです。
私は秋月で買いました。

具体的な実現方法を以下に書いていきます。

方法のあらまし

こんな図を作ってみました。

Google AIY Voice Kit 2.0 に日本語で任意の言葉を話しかけて、指定した返答を読み上げてもらう方法の仕組み図

「あなたの言葉を聞いて文字に変換し、それを受け取り、指定した言葉を日本語で言うプログラム」をpythonで書いてラズベリーパイ上で実行します。

音声を文字化したり日本語を発声する機能は、APIやソフトを利用します。

詳しくは後述しますが、下記技術の組み合わせで実現できます。



詳細

実験環境

私の実験環境は、下記の通りです。

  • 使用キット:Google AIY Voice Kit Ver.2.0
  • ラズベリーパイの諸設定はWindows10のPCからSSH接続
  • 使用ターミナルソフト:Tera Term



1.組立~セットアップ

キットを箱から出して、組み立てます。

詳しいセットアップ方法は、公式サイトのマニュアルが一番わかりやすいです。
英語ですが、写真がたくさんあるので、詰まることは少なかったです。

▼公式サイトの説明ページ

初めから、丁寧に手順通りに進めて下さい

ちなみにWindowsやMacのPCがあるなら、SSH接続がおすすめです。

直接Voice Kitのラズベリーパイに画面やマウスやキーボードを繋げられますが、結構大変です。
差し込み口が少ないので、USBハブまで必要になってごちゃつきます。

セットアップはまた改めて記事にする予定です。

2.Google Cloud Speech APIを導入

音声を聞き取り、文字に変換する」という機能を受け持ちます。

前のバージョンは、assistant機能の一環でもっと手軽に使えた?みたい(後述)ですが、今は独立したAPIを使うように公式マニュアルに指示がありました。

音声を文字として認識できれば、あとはプログラムで好きなように扱えますよね。

AIY Voice Kit への導入は、下記のVoice Kitの公式マニュアルが一番詳しいです。

▼こちらの指示に沿って、進めて下さい。
注意
使用量に応じて、課金されます。
毎月60分までは無料ですが、思わぬ課金に注意して下さい。
金額の詳細は公式のガイドへ。


3.Open JTalkの導入

AIY Voice Kitでは、英語は発声できても日本語には対応していません(後述)。

そこで、日本語の音声合成発声ソフトを導入します。
Open JTalkというソフトを使います。

導入は、下記の記事がとても参考になりました。


 3.1 まずはセットアップ

まず、上記サイトのOpen JTalkのセットアップおよび音声ファイルのセットアップの通りにインストール、セットアップします。


 3.2 モジュールとして、ファイルを作っておく

日本語を喋らせたい際に、好きなタイミングで呼び出せるよう、モジュールとしてファイルを作っておきます。

上記サイトの時間をしゃべらせる以外の部分のコードを、jtalk.pyとして保存しておきます。


ちなみに、保管場所に注意して下さい。

Voice Kitのドライバやモジュール類(i18n.pyとかaudio.pyとか)が入っているフォルダに入れておいて下さい。後々楽です。
デフォルトでは、下記になります。


~/AIY-voice-kit-python/src/aiy



4.デモコードを元に実行ファイルを作る

cloudspeech_demo.pyというファイルを探して下さい。
このファイルは、「音声を聞き取って、指定した音声で答える」ためのデモコードです。

ただし、そのままでは英語での受けごたえしかできません

そこで、私はこんな風に変更しました。
このコードは、冒頭で紹介したサンプル課題を動作させるものです。

注意が必要な個所は、コードにコメントとして記述しています。


念のため上書きせず、cloudspeech_demo_jp.pyという名前をつけて、保存しています。

補足
Windowsでプログラムを書いている場合、改行コードをLFで保存しておいて下さい。
CR+LFだとエラーが出る可能性があります。

テキストエディタなら簡単に設定変更できるはずです。
例えば、私が使っているMeryでは下図のような感じで、保存時に指定できます。



5.パーミッション(permission)を、変更しておく

早速実行したくなりますが、ちょっとまって下さい。
実行しても、エラーになるはずです。

作ったファイルに、実行権限を与えておきましょう。 

作ったファイルを置いているフォルダをカレントフォルダにして、次のコマンドを実行しました。


sudo chmod a+x cloudspeech_demo_jp.py


▼この記事がすごく勉強になりました。



5.実行

さぁさぁ、これでやっと実行できます。

作ったファイルを置いているフォルダをカレントフォルダにして、次のコマンドを実行します。

すると、冒頭で紹介したサンプル課題を動作させられます。


./cloudspeech_demo_jp.py




ちなみに英語の場合

もちろん、英語でも受け答えが可能です。
英語の場合はとてもらくちんです。

英語音声は、元から音声システムが入っているので、デモコードの通りに動かすだけです。

私は発音が悪いので長い単語はなかなか聞き取ってもらえず、短い単語で頑張りました。

合言葉(山、川)と、繰り返しをやってみました。


デフォルトのデモコード(cloudspeech_demo.py)は、声でVoicekitのLEDを制御するようになっていました。
しかしそのままではLEDのコードが古い?ようでエラーが出てしまいます。
なのでLEDの制御部分は全部消しました。

こんなコードで実行しました。



悩んだ事柄のメモ

日本語で任意の受け答えをさせるにあたり、色々と苦労しました。
その中で私が特に詰まったり、注意が必要だった事を挙げておきます。

オリジナルの動作をさせるには、Assistantは使わない

Google Assistant APIでは、オリジナルな処理はできないようです。

例えば、当ブログのこの記事のように「任意の言葉を聞き取らせて、任意の返答を貰う、任意の関数を実行するなど。

Voice Kit 1.0ではできたとか、できないとかgithubやraspberrypiのフォーラムでも情報が発散していて収集するのがしんどかったです。

聞き取りは日英問わずAPI必要

人間の音声を聞いてテキスト化する機能は、公式マニュアルの指示にしたがい、今回はAPIを使いました。

しかし昔のバージョンのVoice kitでは、assistant機能の一環でもっと手軽に使えたようです。

例えば、このサイトを見て下さい。

action.pyというモジュールに、任意の言葉を書けるようになっていますよね。
でも現在のGoogle AIY Voice Kit 2.0には、action.pyはありません。

思わぬAPI課金に注意

Google Cloud Speech APIは多言語に対応していてとても便利ですが、使用量によって有料です。
毎月60分までは無料なので、テスト程度なら大丈夫だと思いますが、思わぬ課金に注意して下さい。

例えば、今回のサンプル課題のコードは「ボタンを押したら音声認識開始」します。
聞こえなかったり、所定の動作が終わるとまたボタンの待機に戻ります。

これが常時聞きっぱなしになると、大変なことになりそうです。

60 分超、100 万分までは$0.006 米ドル/15 秒です。

金額の詳細は公式のガイドへ。

発話(読み上げ)は日本語未対応

AIY Voice Kit 2.0には「aiy.audioというモジュールが入っていて、aiy.say()という関数で喋らせることができる」と公式マニュアルにかいてありました。

ただし、これは英語だけ。
他の言語では、対応した音声発声エンジンを入れる必要があります。

これに気付くのにしばらくかかってしまい、エラーを延々と眺め続けていました.......。



© 2018 のぼゆエンジニアリング
About記事一覧お問合せ