スマートスピーカーもどきを作る – 目次

はじめに

今まで使っていたスマートスピーカー(Google Nest Mini)が壊れてしまった。 ほとんどアラームと天気予報にしか使っていなかったが、無いと不便に感じる。 特に、目を閉じたままアラームをセット・解除できるのは目覚まし時計として優秀だった(あと10分寝たいとき等に便利)。

今回、音声処理の練習もかねて、低機能なスマートスピーカーのようなもの(以後、スマートスピーカーもどき)を作ってみる。

ここで、スマートスピーカーもどきは、適当なワード(「OK, Google」などに相当)のあとに命令や質問などを話すと、 それに応じた対応・応答をしてくれる装置とする。 ただし、できることはとりあえず以下に限定する。

  • 時計 (今何時か教えてくれる)
  • アラーム・タイマー (○時にアラームをセット、○分後にタイマーをセットするなどができる)
  • 天気予報 (今日や明日の天気を教えてくれる)

基本的には、以下のような流れで処理を行う予定である (言語はPythonを使用)。

  1. 決められたワードの発声を検知する → 記事 Part1
  2. ワードが検知された後、続く音声を認識してテキストに変換する
  3. テキストを解析して、行う処理を決定する
  4. 決定された処理を行う
  5. 応答を音声で返す

これらの処理は最終的にはRaspberry Pi上で実行する。

1については、TensorFlowを用いて特定のワードの発声を検出する機械学習モデルを作成し、 マイク入力から継続的にワードの検出を行う。

2については、GoogleのSpeech-to-Textなどのクラウドサービスを用いると日本語音声の認識を容易に実現できるが、 今回は、(今更だが)プライバシー上の懸念から、オフラインで実現する方法を検討する。 ただし、難しい場合は英語音声のみの対応になったり、結局オンラインのサービスを利用したりするかもしれない。

3については、対応できる処理の種類が少ないことから、正規表現などによる単純な解析で十分と思う。

4について、天気予報の場合は気象庁のAPIもどきを使用できる。時計やアラームは普通に実装する。

5については、例えばpyopenjtalk (Open JTalkのPython用ラッパー)を使用すると簡単に日本語音声の合成ができる。

複数の記事にわかれるので、ここに目次を置いておく。

目次

(続く)