この記事は2020.12.05【2020年最後!】IoT縛りの勉強会! IoTLT vol.70で登壇した内容の補足的な話です。
スライドはこちら
ここ最近M5シリーズいろんなものが次から次へとリリースされてもう情報が追いつきません。
その中で僕が密かに興味があるものが「M5Atom Echo」。
いろいろ調べてみるとスマートスピーカーを作れるマイコンらしいです。
なのにググっても出てくるのはスピーカーのことばかり(どんだけスピーカーこだわるんだよ!)。
やっぱり長時間使えないスピーカーなんかの事言うより音声認識をやりたいわけです。
というわけで今回はM5Atom Echoを使ってSpeech to Text(以下、STT)をやる方法を紹介します。
トークンの取得
M5Atom Echoには専用のSTTライブラリが提供されています。
そのライブラリの裏側ではBaiduのAPIを使っているそうです。
じゃあBaiduのサイトで取得するのかと言うとそういうわけではないようです。
以下のサイトにM5Burnerのダウンロードリンクがあるので、お使いのOSに合わせてダウンロードとインストールします。
ダウンロードを終えたらATOM
オプションを選択してEchoSTT
をダウンロードします。
その後、Get Token
をクリックしてアクセストークンを入手します。
Arduinoで動かす
今回はArduinoを使ってSTTをやってみます。
ボードマネジャー
まず、ボードマネジャーはM5Stick Cと同じチップをつかっているので、M5Stick Cのボードを選択します。
##ライブラリのインストール
次にM5AtomライブラリとFast LEDライブラリをインストールします。
「スケッチ」→「ライブラリをインクルード」→「ライブラリの管理」を開き、それぞれのライブラリをインストールします。
サンプルコード
以下のリンクのサンプルコードをすべて任意のディレクトリに保存します。
const char *WifiSSID = "SSID";
とconst char *WifiPWD = "PASSWORD";
にはお使いのWifiのアクセス情報に書き換えます。
rest.settoken("YOUR-TOKEN");
には先程M5Burner取得したトークンに書き換えます。
動作確認
官話(中国の公用語)を認識するためのモデルなので、英語の認識はHelloなどの簡単な英単語は認識しますがそれ以外は官話で認識します。
運いいと英語も認識出来るな。
— K.Miura (@k_miura_io) November 8, 2020
これは何か出来そうだ#m5atomecho#M5Stack pic.twitter.com/fY7J0dd8rx
他の言語に切り替える
先程の官話だと、分かる人なら問題ないですが、日本人だとわからない人が多いと思います。
せめて英語を認識できるようにできないかソースを調べたところ、どうやらヘッダーファイルの変数を指定すれば言語モデルを変更できるようです。
BaiduRest.hより
ヘッダーファイルを確認すると、官話、広東語、英語、広東語と英語の両方というモデルを指定できるみたいです。
僕は英語を認識できればそれでいいので、DEV_PID_ENGLISH
を設定します。
ではこの設定を変更するにはどうすればいいのかというとEchoSTT.inoの136行目のrest.Pcm2String(microphonedata0, data_offset, DEV_PID_MANDARIN, &SpakeStr) != -1
にあるDEV_PID_MANDARIN
をDEV_PID_ENGLISH
に変更するだけです。
再度動作確認
先程と違って英語をきれいに認識するようになりました。
よし、喋ったことをMatrix LEDで流れるようになった!
— K.Miura (@k_miura_io) November 9, 2020
Arduino久々に触ったけど使い方忘れてるし原因不明のエラーにぶつかって辛みしかない(こんなことしてないでさっさとスライド作らねば#M5stack #M5AtomEcho pic.twitter.com/k2qGfwyZjM
まとめ
今回はM5Atom Echoをつかって音声認識をやってみました。
最初は「英語うまく認識できないけど、動いているからヨシッ」ってなりましたけど、ソース調べると英語を変更にできることがすんなり分かって拍子抜けしましたw。
ただ、これは偶然気づいただけでちゃんとドキュメントに書くべきじゃね?とは思いました。(気が向いたらPRだしたい)