これは、カーネギーメロン大学のオープンソースの大語彙、話者に依存しない連続音声認識エンジンの 1 つである PocketSphinx です。
これはある時点では研究システムでしたが、活発な開発はほとんど停止しており、最先端のものからは非常に遠いものになっています。 私がリリースを作成しているのは、それでも人々がそれを使用しており、ビルド システムと API には修正が必要な歴史的エラーが多数あるためです。
バージョン番号が異様に大きいのは、5prealpha という人々が使用している「リリース」があったためで、今後は適切なセマンティック バージョニングを使用します。
使用条件については、LICENSE ファイルを参照してください。
現在、ビルドには CMake を使用しています。これにより、Linux と Windows で適切な結果が得られるはずです。 Mac OS X については私は持っていないのでわかりません。 さらに、オーディオ ライブラリは、どのプラットフォームでもまったく構築されず、正しく動作しなかったため、単に削除されました。
SphinxBase への依存関係はなくなりました。 SphinxBase はもうありません。 これはあなたが探している SphinxBase ではありません。あなたの SphinxBase はすべて私たちのものです。
Python モジュールを仮想環境にインストールするには ( ~/ve_pocketsphinx
作成したい仮想環境に置き換えます)、最上位ディレクトリから次のようにします。
python3 -m venv ~/ve_pocketsphinx . ~/ve_pocketsphinx/bin/activate pip install .
C ライブラリとバインディングをインストールするには (/usr/local にアクセスできると仮定します。アクセスできない場合は、 -DCMAKE_INSTALL_PREFIX
を使用して、以下の最初のcmake
コマンドで別のプレフィックスを設定します)。
cmake -S . -B build cmake --build build cmake --build build --target install
pocketsphinx
コマンド ライン プログラムは、標準入力または 1 つ以上のファイルからシングル チャネル 16 ビット PCM オーディオを読み取り、デフォルトの音響および言語モデルを使用してその中の音声の認識を試みます。おそらく気にしないであろう多数のオプション、デフォルトでlive
になるコマンド、および 1 つ以上の入力 ( align
モードを除く)、または-
標準入力から読み取ることを受け入れます。
「speech.wav」という単一チャネルの WAV ファイルがあり、その中の音声を認識したい場合は、次のことを試してみることができます (結果は素晴らしいものではない可能性があります)。
pocketsphinx single speech.wav
入力が他の形式である場合は、以下で説明するようにsox
で変換することをお勧めします。
コマンドは次のとおりです。
help
: 関心のないオプションの長いリストを出力します。
config
: 設定を JSON として標準出力にダンプします ( -config
オプションでロードできます)。
live
: 各入力で音声セグメントを検出し、それらに対して認識を実行し (気にしないオプションを使用して)、結果を行区切りの JSON で標準出力に書き込みます。 これが最も美しい形式ではないことは承知していますが、XML よりも優れていることは確かです。 各行には次のフィールドを含む JSON オブジェクトが含まれており、行を読みやすくするために短い名前が付けられています。
b
: ストリームの先頭からの開始時間 (秒単位)
d
: 持続時間(秒)
p
: 認識結果の推定確率、つまりモデルに従った入力の尤度を表す 0 から 1 までの数値
t
: 認識結果の全文
w
: セグメント (通常は単語) のリスト。各セグメントには、開始、終了、確率、および単語のテキストを表すb
、 d
、 p
、およびt
フィールドが含まれます。 -phone_align yes
が渡された場合、同じ形式で電話のセグメンテーションを含むw
フィールドが存在します。
single
: 各入力を単一の発話として認識し、上記と同じ形式で JSON オブジェクトを書き込みます。
align
: 単一の入力ファイル (標準入力の場合は-
) を単語シーケンスに位置合わせし、上記と同じ形式で JSON オブジェクトを書き込みます。 最初の位置引数は入力であり、引用符を忘れた場合に驚くことを避けるために、後続のすべての引数が連結されてテキストが作成されます。 テキストを正規化して句読点、大文字、ムカデなどを削除するのはユーザーの責任です。例:
pocketsphinx align goforward.wav "go forward ten meters"
デフォルトでは、単語レベルの位置合わせのみが行われます。 電話機の位置合わせを取得するには、フラグに-phone_align yes
を渡します。例:
pocketsphinx -phone_align yes align audio.wav $text
これにより、特に読みやすい出力は作成されませんが、jq を使用してクリーンアップすることができます。 たとえば、次のように単語の名前と開始時刻だけを取得できます。
pocketsphinx align audio.wav $text | jq '.w[]|[.t,.b]'
または、次のように電話名と通話時間を取得することもできます。
pocketsphinx -phone_align yes align audio.wav $text | jq '.w[]|.w[]|[.t,.d]'
もちろん、他にもたくさんの可能性があります。
soxflags
: 適切な入力形式を作成する引数をsox
に返します。 sox
コマンドラインは少し変わっているため、これらは常にファイル名または-d
( sox
にマイクから読み取るように指示します)の後に来る必要があることに注意してください。次のようにライブ認識を実行できます。
sox -d $(pocketsphinx soxflags) | pocketsphinx -
または、次のように「audio.mp3」という名前のファイルからデコードします。
sox audio.mp3 $(pocketsphinx soxflags) | pocketsphinx -
デフォルトでは、エラーのみが標準エラーに出力されますが、さらに詳しい情報が必要な場合は、 -loglevel INFO
渡すことができます。 部分的な結果は印刷されません。おそらく将来印刷されるでしょうが、息を止めないでください。
プログラミングについては、サンプル ディレクトリにある C および Python のライブラリの使用例を参照してください。 Python API または C API のドキュメントを読むこともできます。
PocketSphinx は最終的にSphinx-II
をベースにしており、Sphinx-II はカーネギー メロン大学のいくつかの古いシステムをベースにしており、Kevin Lenzo の努力のおかげで BSD のようなライセンスの下でフリー ソフトウェアとしてリリースされました。 特にデコーダーの大部分は Ravishankar Mosur (コメントで「rkm」を探してください) によって書かれましたが、他のさまざまな人々も同様に貢献しています。詳細については、AUTHORS ファイルを参照してください。
David Huggins-Daines (このドキュメントの著者) は、さまざまな速度とメモリの最適化、固定小数点計算、JSGF サポート、さまざまなプラットフォームへの移植性、およびある程度一貫した API を追加したPocketSphinx
の作成を担当しています。 その後、彼はしばらく姿を消しました。
その後、Nickolay Shmyrev が長期間メンテナンスを引き継ぎ、Alexander Solovets や Vyacheslav Klimkov などが多くのコードを提供しました。
現在、これは再び David Huggins-Daines によって維持されています。