はじめに
以前、SpresenseをArduino環境で動かし、Lチカまで行う記事を書きました。
- SPRESENSEをArduinoで始める:環境構築からLチカまで
https://qiita.com/shinfrom/items/a7dac33a3adc72f97471
この記事は、以前の記事の続きとして、Spresenseで音声認識に挑戦するための記録です。
ただし、今回は成功手順ではありません。
Spresenseで音声認識を試す前段階として、音声入力と音声出力の確認で詰まった点を整理する検証ログです。
ゴールデンウィーク中にSpresenseで音声認識に挑戦しましたが、結果としては、音声認識以前の段階で止まりました。
具体的には、マイク入力の確認やwavファイル再生の準備で詰まりました。
この記事では、現時点で確認できたことと、次に何を切り分けるべきかを整理します。
この記事の位置づけ
この記事は、Spresense音声認識編の第0回です。
Spresenseの使用では、いろいろな応用が考えられます。
- 音声認識
- カメラ
- 画像認識
- LTE通信
- MQTT連携
- LINE連携
- IoTアプリケーション作成
これらを全部まとめて1つのシリーズにすると、記事の目的が分かりにくくなります。
そこで、今回は「Spresense音声認識編」として、音声認識に必要な準備や検証を切り分けて整理していきます。
今回の記事は、その最初の記録です。
やろうとしたこと
今回やろうとしたことは、Spresenseを使った音声認識です。
最終的には、音声入力をきっかけにして、デバイス操作やIoTシステムと連携するような構成を想定しています。
たとえば、将来的には次のようなことを試したいと考えています。
- 音声を入力する
- 音声認識を行う
- 認識結果をもとにデバイスを操作する
- IoTやクラウド連携につなげる
しかし、実際に進めてみると、音声認識そのものよりも前に確認すべきことがありました。
それが、音声入力と音声出力です。
この記事で扱わないこと
この記事では、マイク入力の具体的な確認手順や、wavファイル再生の詳細な手順までは扱いません。
それぞれの検証方法は、次回以降の記事で分けて整理する予定です。
今回は、音声認識に入る前にどこで詰まったのか、そして次に何を切り分けるべきかを整理することを目的にしています。
今回の結果
結論から言うと、音声認識までは到達できませんでした。
マイクの調整もできていません。
現在確認できていることは、主に次の2点です。
- 今回の構成では、4極端子にマイクを接続しても、期待した入力信号を確認できなかった
- wavファイルを再生するためには、そのためのプログラムやデータを保存領域に書き込んでおく必要がある
つまり、今回詰まったのは音声認識のアルゴリズムや認識精度ではなく、
その前段階である、音声I/Oの確認です。
使用した環境
今回使用した環境は、以下の通りです。
- Spresense メインボード
- Spresense LTE拡張ボード
- スピーカー
- マイク
- PC:Windows 11
- 開発環境:Arduino IDE 2.2.1
- Spresense Arduinoボードマネージャ:Spresense Reference 3.4.5
詰まったこと1:4極端子にマイクを挿しても期待した入力信号を確認できない
最初に詰まったのは、マイク入力です。
4極端子にマイクを挿せばマイクとして認識するのではないかと考えました。
しかし、実際には、4極端子に挿入しても、期待している入力信号は取得できませんでした。
この時点で、音声認識以前に、そもそも音声入力が取れているか確認できない状態になりました。
ここで分かったこと
今回分かったのは、次のことです。
4極端子にマイクを挿せば、そのままマイク入力として使える、とは限らないということです。
音声認識を試すには、まず以下を確認する必要があります。
- その端子がマイク入力に対応しているのか
- 使用しているマイクが対応しているのか
- デジタルマイクなのか、アナログマイクなのか
- Spresense側でマイク入力を有効にする設定が必要なのか
- サンプルプログラムが想定している入力経路と一致しているのか
ここを確認しないまま音声認識に進もうとしても、入力データが取れていない可能性があります。
詰まったこと2:wavファイル再生にも準備が必要だった
次に、音声出力側の確認も必要だと考えました。
音声入力の確認だけでなく、wavファイルを再生できれば、音声まわりの動作確認に使えると考えたためです。
しかし、wavファイルを再生するにも、単にファイルを用意すればよいわけではありませんでした。
Spresenseでwavファイルを再生するには、そのためのプログラムやデータを保存領域に書き込んでおく必要があることが分かりました。
この時点で、音声出力の確認にも準備が必要だと分かりました。
ここで分かったこと
音声認識を試す前に、音声入力と音声出力を分けて確認する必要があります。
いきなり音声認識の調整に入ってしまうと、問題がどこにあるのか切り分けにくくなります。
音声認識そのものに入る前にも、ハードウェアや入出力まわりで確認すべきことがあります。
- マイクが認識されていない
- 音声入力が取れていない
- 入力音量が小さすぎる
- wavファイルの形式が合っていない
そのため、音声認識に進む前に、まずは音声I/Oを個別に確認する必要があることを再認識しました。
今回の学び
今回分かったのは、音声認識を試す前に、音声入力と音声出力を個別に確認する必要があるということです。
音声認識がうまく動かない場合でも、原因がマイク入力なのか、音量なのか、再生ファイルなのか、プログラムなのかを切り分けられないと、次の作業に進みにくくなります。
特にマイコンでは、PCのように簡単に状態を確認できないことも多いため、検証方法そのものを設計する必要があると感じました。
次にやること
次は、以下の順番で切り分けていく予定です。
1. マイク入力の仕様を確認する
まず、Spresenseでマイク入力を行う場合、どの端子・どのマイク・どのライブラリを使うべきかを確認します。
2. マイク入力の最小確認プログラムを作る
次に、音声認識ではなく、マイク入力だけを確認する最小プログラムを作ります。
ここでは、音声認識の結果ではなく、入力値が変化するかどうかを見ます。
たとえば、以下のような情報を確認する予定です。
- 入力データが取得できているか
- 無音時と音を入れた時で値が変化するか
- peak値や平均値に変化があるか
- サンプルレートやバッファサイズが適切か
3. wav再生の最小構成を確認する
次に、wavファイル再生の最小構成を確認します。
wav再生に必要なファイル配置、保存領域への書き込み方法、再生プログラムの構成を整理します。
4. 音声認識のやり方を確認する
音声入力と音声出力の確認ができてから、改めて音声認識の方法について検証していきます。
この順番で進めることで、問題が起きたときに原因を切り分けやすくなると考えています。
今後のシリーズ予定
今後は、Spresense音声認識編として、以下のような記事を書いていく予定です。
- 第0回:音声認識に入る前に音声I/Oで詰まった話
- 第1回:Spresenseでマイク入力を確認する
- 第2回:Spresenseでwavファイル再生を確認する
- 第3回:音声入力と音声出力を分けて検証する
- 第4回:Spresenseで音声認識に再挑戦する土台を作る
以降も続けていく予定です。
実際に進めながら、必要に応じて構成は変更する予定です。
まとめ
今回は、Spresenseで音声認識に挑戦しようとして、音声認識以前の段階で止まりました。
現在確認できていることは、次の2点です。
- 今回の構成では、4極端子にマイクを接続しても、期待した入力信号を確認できなかった
- wavファイルを再生するには、再生用のプログラムやデータを保存領域に準備する必要がある
今回の記事は成功手順ではなく、検証ログです。
ただし、今回の失敗によって、次に何を切り分けるべきかは見えてきました。
音声認識に進む前に、まずは音声入力と音声出力を個別に確認する。
これを次のステップとして進めていきます。
最終的には、Spresenseで音声認識を行い、その結果をLINEやIoTシステムと連携させることを目指しています。
また、LINEから送信したメッセージをSpresense側で再生するような、音声出力の活用も試していきたいと考えています。
