- 話題のスマートスピーカーを作ってみました。
- さまざまなスマートスピーカーが登場しています。
- "Google Home"は2017年10月6日発売。1万4000円
- "Google Home mini"は2017年10月23日発売。6000円
- "Amazon Echo"は$180、日本未発売。
- "Amazon Echo Dot"は$50
- "Amazon Tap"は$140
- "SONY スマートスピーカーLF-S50G"は2017年12月9日発売予定。24,880円
- 実は自分でも作れます。
- しかも「英語」ではなく「日本語」を認識します。
- 自分で作れば、カスタマイズできます。自分で機能拡張できます。
- 市販品では機能に不満があってもカスタマイズできません。
- 音声認識の正確性(音声認識率)は100%ではありません。
- 誤認識や認識しないことがあります。他の音に邪魔されたりします。
- 似たような音に反応して誤認識したり、認識しなかったりします。
- あらかじめご了承ください。
- このため、「起動ワード」があり、その後数秒しか認識しない仕組みで、誤動作を防止します。
- Google は「OK Google」が起動ワードです。
- Amazon は「Alexa」が起動ワードです。
- それでも誤動作はゼロではありません。
- そもそもスマートスピーカーとは何でしょうか。何ができるのでしょうか。
- 簡単にいうと、音声認識リモコン端末です。
- 音声を認識して何かを制御します。
- ただし、人の代わりをする完全な人工知能(AI)は存在しないので、ある決められたことしかできません。
- 事前に決められた目的に用途が限定されています。
- 例えば、次のような事前に決められたことしかできません。
- 登録された家電を制御します。
- 登録された音楽を再生します。
- 気温や時刻を教えてくれます。
- キッチンタイマーを起動して、時間が経過すると教えてくれます。
- まだまだ用途は限定されています。
- 現在のところ100%完全に音声認識できないので、機能を限定するしかありません。
- 不完全な状態で、なんでもできるようにしてしまうと、犬の声に反応してネットで家を買ってしまうかもしれません。
- 危険なので、機能を限定せざるを得ないのです。
- なんでもできるような過度の期待を持たないようにしましょう。
- とはいえ、音声認識は便利です。寝る前に音声でテレビを消したり、布団から出ずに音声でエアコンをつけたりできます。
- ぐうたら生活には欠かせません。
- 仕様は予告なく変更することがあります。
- 個人利用に限定され、著作権者の許可なく商用利用できません。
- 直接間接に関わらず、使用によって生じたいかなる損害も筆者は責任を負いません。
- Pumpkin Pi (C)2016 All rights reserved by Y.Onodera.
- スマートスピーカーの材料集めです。
- (1)Raspberry Pi 3(Raspberry PI3 B、マルツ)
USB電源、マイクロUSBケーブル、マイクロSDカード(16GB)も必要です。- (2)拡張ボード(PumpkinPi、マルツ)
音声入力と赤外線送受信します。- (3)マイク・アンプ(AE-MICAMP、秋月)
増幅度は40dB=100倍です。通常は出力にカップリング・コンデンサ(10uF程度)が必要です。
PumpkinPiの入力でカップリングしているので、今回は不要です。
声の大きさにもよりますが、20cm前後の距離で音声認識率が高いです。- (4)アンプ(AE-PAM8012、秋月)
増幅度は18dB=13倍です。- (5)スピーカー(F77G98-6、秋月)
- (6)ケース(食品用タッパ、直径13cm高さ8cm、100円ショップ、イノウエ化学、ID-903)
- (7)その他(3.5mmミニプラグ、ネジなど)
- Raspberry Pi 3を使って処理します。音声認識ソフト(Julius)を使います。
- 拡張ボードは音声入力ボードであり、赤外線送受信機能もあります。
- Raspberry Pi 3のA/V端子は4極です。GNDと左音声のみを使います。MP-435(秋月)
- PumpkinPiの入力端子は3極です。右音声と左音声を接続しモノラルとして使います。MP-319(秋月)
- スピーカーに合わせてケースに穴をあけます。
- 配線図です。
- アンプ(AE-PAM8012)はA/V端子(4極)に接続します。
- マイクアンプ(AE-MICAMP)はPumpkinPiの入力端子(3極)に接続します。
- アンプの電源(5V)はPumpkinPi上の5Vから取ります。
- マイクアンプ用電源にノイズが入り込むと発振したり、音声にノイズが乗り、音声認識率が落ちます。
- そのためマイクアンプの電源(4.7V)はPumpkinPi上のLP3985-IM-4.7の6ピンから取ります。
- 部品がショートしないように絶縁対策してケースに組み込んでください。
- SD Card FormatterでフォーマットしたマイクロSDカード(16GB)を用意します。
- マイクロSDカードを使いまわさないでください。他の実験と共用すると機能競合して動きません。
- Raspberry Pi 3用のOS(Rasbian)をマイクロSDカード(16GB)にインストールします。
- 拡張ボードPumpkinPiのソフトウェアをインストールします。このとき音声認識ソフトも自動的にインストールします。
- Pumpkin Piのセットアップはこちらをご覧ください。
カスタマイズのステップ
- スマートスピーカーとして動作するようにカスタマイズします。
- まずは「起動ワード」を登録します。ここでは「ポチ」としました。自由に決めることができます。
- 「起動ワード」を認識してから10秒以内しか音声認識しないようにします。
- 機能を限定するために、認識する言葉も限定し、あらかじめ登録しておきます。
- 認識した言葉に対応する起動シェルを作成します。このシェルに処理内容を記述します。
- シェルで赤外線リモコン送信すれば、音声認識リモコンです。
- シェルで音楽を再生するもよし、シェルで合成音声を出力するもよし、シェルでネット検索するもよし、あとはあなた次第です。
- 「音声の登録」と「起動シェル」を自分好みにカスタマイズします。
ファイル一覧
- 音声登録ファイルcommand.yomiを編集します。
- 音声登録シェル・スクリプトsetup.shを実行します。
- 起動シェルをキックするスクリプトremocon.pyを編集します。
- 起動シェル*.shを作成します。
- 音声認識システムをstop.shで停止します。
- 音声認識システムをstart.shで開始します。
音声登録ファイル ~/julius-kit/grammar-kit-master/command/command.yomi 音声のリストです。 音声登録シェル・スクリプト ~/julius-kit/grammar-kit-master/command/setup.sh command.yomiを書き換えたら実行します。 起動シェルをキックするスクリプト ~/PumpkinPi/Remocon/remocon.py 音声に応じたシェルをキックするように修正します。 起動シェル・スクリプト ~/PumpkinPi/Remocon/*.sh 音声に応じた起動シェル・スクリプトを置きます。 Julius開始・スクリプト ~/PumpkinPi/Remocon/start.sh 音声認識システムを開始します。 Julius停止・スクリプト ~/PumpkinPi/Remocon/stop.sh 音声認識システムを停止します。command.yomiを書き換えたら一旦停止します。
- command.yomiの例
- remocon.pyの修正部を抜粋
- onAIRCON.shの例
- PumpkinPiを利用するヒントです。
- LEDの出力設定 $ gpio -g mode 5 out
- LEDのオン $ gpio -g write 5 1
- LEDのオフ $ gpio -g write 5 0
- 赤外線リモコンの受信方法 $ ./getIR2
- 赤外線リモコンの送信方法 $ sudo ./setIR2 NEC 32 56 199 144 111
- 音楽再生方法 $ aplay -D hw:1,0 ~/Music/WalkOn.wav
- 音量設定方法 $ amixer -c 1 set PCM 90%
- どなたかお願いします。
- ネットワーク上で各社が公開しているAIサービス機能を追加していただけないでしょうか。
- Google や Amazon がAIをAPIとして公開しています。
- Google Assistant SDKをつかえば、Google Homeと同じになります。
- 他にもたくさんあります。IBMもWatsonを提供しています。
- 組み込み次第で、進化します。
- 電源終了に「ぱわーおふ」を使うと誤動作することがあります。そのため、POWEROFF.shで機能を無効にしています。
- 実はこの「おふ」という音に原因があります。
- マイクの風切り音でも「ふ」に近い音が発生するため、マイクに息を吹きかけるだけで誤認する確率が高いです。
- 誤認させないために、はっきりした発音を選びましょう。短い音ではなく長い音の方が良いでしょう。
- 「でんげんしゅうりょう」の方がよいと言えます。
- また文法を解析するようにJuliusを設定すればもっと複雑なことができます。例えば「主語」+「述語」+「目的語」を解析します。
- ただし、これも定型の文法しか受け付けられません。人間のように複雑な文法を解釈できません。
- この他に声の大きさにも左右されます。自分の声の音量ならどのくらいの距離で音声認識率が高いか実験してみましょう。
- 近すぎてもいけません。音が割れるためです。