はじめに
今まで使っていたスマートスピーカー(Google Nest Mini)が壊れてしまった。 ほとんどアラームと天気予報にしか使っていなかったが、無いと不便に感じる。 特に、目を閉じたままアラームをセット・解除できるのは目覚まし時計として優秀だった(あと10分寝たいとき等に便利)。
今回、音声処理の練習もかねて、低機能なスマートスピーカーのようなもの(以後、スマートスピーカーもどき)を作ってみる。
ここで、スマートスピーカーもどきは、適当なワード(「OK, Google」などに相当)のあとに命令や質問などを話すと、 それに応じた対応・応答をしてくれる装置とする。 ただし、できることはとりあえず以下に限定する。
- 時計 (今何時か教えてくれる)
- アラーム・タイマー (○時にアラームをセット、○分後にタイマーをセットするなどができる)
- 天気予報 (今日や明日の天気を教えてくれる)
基本的には、以下のような流れで処理を行う予定である (言語はPythonを使用)。
- 決められたワードの発声を検知する → 記事 Part1
- ワードが検知された後、続く音声を認識してテキストに変換する
- テキストを解析して、行う処理を決定する
- 決定された処理を行う
- 応答を音声で返す
これらの処理は最終的にはRaspberry Pi上で実行する。
1については、TensorFlowを用いて特定のワードの発声を検出する機械学習モデルを作成し、 マイク入力から継続的にワードの検出を行う。
2については、GoogleのSpeech-to-Textなどのクラウドサービスを用いると日本語音声の認識を容易に実現できるが、 今回は、(今更だが)プライバシー上の懸念から、オフラインで実現する方法を検討する。 ただし、難しい場合は英語音声のみの対応になったり、結局オンラインのサービスを利用したりするかもしれない。
3については、対応できる処理の種類が少ないことから、正規表現などによる単純な解析で十分と思う。
4について、天気予報の場合は気象庁のAPIもどきを使用できる。時計やアラームは普通に実装する。
5については、例えばpyopenjtalk
(Open JTalkのPython用ラッパー)を使用すると簡単に日本語音声の合成ができる。
複数の記事にわかれるので、ここに目次を置いておく。
目次
(続く)