問題の説明
ハードウェアプロジェクトの一部として音声認識を使用したいのですが、完全に自己完結型にしたいです(ArduinoやRaspberry Pi、Kinectsなどの小さな低電力、低速のデバイスを使用しています。 OSが関係しているため、クローズド/自己完結型プロジェクト)。
音声認識は、希望する洗練度によっては非常に複雑になる場合があります。私は、比較的単純な要件のセットを信じています。自分の声だけを認識したいのですが、認識したい20語ほどの小さな辞書があります。したがって、複雑な音声テキスト変換や音声認識ライブラリや、インターネット検索エンジンで見つけた優れたサードパーティソフトウェアは必要ありません(これらに不足はありません!)。私の要件は「十分に単純」で(理由の範囲内で)、自分のソリューションをコーディングできると考えています。私は誰かがこのような独自のプロセスを書いているのだろうかと思っていますが、私の方法は非常に欠陥がありますか?高レベルの数学を必要とせずに、または複雑なアルゴリズムを記述する必要なく、これを行うより良い方法はありますか? それが私が以下で考えようとした解決策です。
ソリューションの説明
私はこれをCで書くつもりですが、言語にとらわれないプロセスについて議論し、そのプロセスに焦点を当てたいと思います。可能な場合は無視してください。
1 話されている単語と一致するように単語の辞書を事前に記録します。20の異なる単語の20の録音、または2つまたは3つの単語の短いフレーズまたは文章があると想像できます。これにより、実際にオーディオをテキストに変換して2つの文字列を比較するよりも、2つの録音ファイルを比較するプロセスが簡単になると思います。
2。コードを実行しているハードウェアデバイスにマイクが接続されています。[1]。コードは、たとえば長さが10ミリ秒の固定長のサンプルを連続的に取得し、たとえば循環ログ形式で10の連続したサンプルを保存します。[2]。(これらの数字を頭の外で発明しているので、これらはプロセスを説明するための例にすぎません)。
[1]これはおそらく、辞書録音が行われるように、バンドパスフィルターとオペアンプを介して接続され、保存および収集されたオーディオサンプルを小さく保ちます。
[2]サンプルをどのように取得するか正確にはわかりません。10msecサンプル(おそらくCRC値)のオーディオを表す数値(整数/浮動小数点/倍精度)を生成していましたが、メソッドを実行する必要がありますまたはオーディオサンプルのMD5合計など)、または数字のストリーム(おそらく周波数のオーディオ測定値のストリーム)。最終的に、「サンプル」は数値または数字になります。この部分は、はるかに多くのハードウェアが関係するため、ここでの説明にはあまり適していません。
3。コードは、10個の連続したサンプルが格納されていることを確認し、単語またはフレーズが言われていることを示すボリュームの増加(無音からの中断)を探してから、たとえば500個のサンプルなどの連続したサンプルを収集します。つまり、10ミリ秒のサンプルで5秒間のオーディオをキャプチャします。
保存されたサウンドとキャプチャされたサウンドを比較するのは、これらのサンプルまたは「スライス」です。キャプチャされたサンプルの十分に高い割合が、保存されている同等のサンプルと一致した場合、コードは同じ単語と見なします。
The start of a store recording of the world "hello" for example,
stored words are split into 10 msec samples also
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming audio (me saying "hello") with some "blank" samples
at the start to symbolise silence
Incoming Sample No | 1| 2| 3| 4| 5| 6| 7| 8| 9|10| 11|12|
Incoming Sample Value | | | |20|27|38|46|16|59|77|200|78|
4。コードが完全なサンプルストリームを収集すると、開始時に空白サンプルを切り取り、次のオーディオ録音を生成します。また、保存されたサンプルとの整合性を高めるために、サンプルセットを数箇所前後に移動させることもできます。
これにより、次のようなサンプルセットが生成されます。
Stored Sample No | 1| 2| 3| 4| 5| 6| 7| 8|
Stored Sample Value |27|38|41|16|59|77|200|78|
Incoming Sample No |-1| 1| 2| 3| 4| 5| 6| 7| 8|
Incoming Sample Value |20|27|38|46|16|59|81|201|78|
5。各サンプルがどれだけ近くになければならないかというパーセンテージ値を持つことにより、サンプル7は%1未満の1の値と、サンプル一致パーセンテージ内にある必要があるサンプルの合計数のパーセンテージ値によって異なると信じています、コードの精度は簡単に調整できます。
これまでオーディオでこのようなことをしたことは一度もありませんでした。おそらくこの質問に対する答えが明白であると既に知っているなら(その答えはどうであれ)、私がこの質問をする理由です。使用するハードウェアの一部が低秒のものになるため、これが計算量の多いタスクにならないことを願っています。数百メガヘルツ(オーバークロックされたRasp Piを使用した1Ghzかもしれません)。したがって、これは、より低い計算能力を使用してオーディオサンプルを一致させるかなり粗雑な方法です。すぐに結果を狙うのではなく、適切な概念実証のために30秒未満を目指しています。
PS 「オーディオ」、「オーディオ認識」、「音声」、「音声認識」などの新しいタグでタグ付けする担当者がいません。