web-dev-qa-db-ja.com

音声認識、nodeJS

私は現在、さまざまなAPIへの接続のおかげで、すべての通知を読み取ることができるツールに取り組んでいます。

それはうまく機能していますが、今度はいくつかのアクションを実行するためにいくつかの音声コマンドを配置したいと思います。

ソフトウェアが「ボブからの1通のメール」と言っているときのように、私は「それを読む」または「それをアーカイブする」と言いたいです。

私のソフトウェアはノードサーバーを介して実行されています。現在、ブラウザーの実装はありませんが、計画することができます。

ノードJSで音声からテキストへの変換を可能にする最良の方法は何ですか?

たくさんのスレッドを見てきましたが、主にブラウザを使っているので、できれば最初は避けたいと思います。出来ますか?

もう1つの問題は、一部のソフトウェアでwavファイルの入力が必要なことです。私はファイルを持っていません。コマンドを言ったときに反応するように、ソフトウェアが常に私の言うことを聞いているようにしたいだけです。

どうすればそれができるかについての情報はありますか?

乾杯

8
Vico

サーバーにストリーミングせずにいくつかのコマンドを認識するには、 node-pocketsphinx モジュールを使用できます。 利用可能 NPMで。

Continuosストリーム内のいくつかのコマンドを認識するコードは次のようになります。

var fs = require('fs');

var ps = require('pocketsphinx').ps;

modeldir = "../../pocketsphinx/model/en-us/"

var config = new ps.Decoder.defaultConfig();
config.setString("-hmm", modeldir + "en-us");
config.setString("-dict", modeldir + "cmudict-en-us.dict");
config.setString("-kws", "keyword list");
var decoder = new ps.Decoder(config);

fs.readFile("../../pocketsphinx/test/data/goforward.raw", function(err, data) {
    if (err) throw err;
    decoder.startUtt();
    decoder.processRaw(data, false, false);
    decoder.endUtt();
    console.log(decoder.hyp())
});

readFileの代わりに、マイクからデータを読み取り、それをレコグナイザーに渡します。検出するキーワードのリストは次のようになります。

read it /1e-20/
archive it /1e-20/

Pocketsphinxを使用したスポッティングの詳細については、 音声でのキーワードスポッティング および PocketSphinxを使用した複数のキーワードの認識 を参照してください。

4
Nikolay Shmyrev

オーディオデータをアプリケーションに取り込むには、 microphone のようなモジュールを試すことができますが、これは私が使用したことのないものであり、有望に見えます。これは、オーディオ入力にブラウザを使用する必要を回避する方法である可能性があります。

実際の音声認識を行うには、IBM Watson Developer Cloudの Speech to Text サービスを使用できます。このサービスは websocket interface をサポートしているため、全二重サービスを利用して、オーディオデータをクラウドにパイプし、結果の文字起こしを取得できます。多くの(相対的な)無音がサービスに送信されるのを避けるために、 開始検出 の形式の実装を検討することをお勧めします-そうすれば、無料枠内にとどまることができます。

テキスト読み上げサービスもありますが、ツールのその部分に対する解決策はすでにあるようです。

開示:私はIBMWatsonのエバンジェリストです。

3

ここでの答えは両方ともすでに良いですが、あなたが探しているのは Sonus です。それはあなたのためにオーディオエンコーディングとストリーミングの世話をします。 customizableホットワード(SiriまたはAlexaなど)を常にオフラインでリッスンしています。プログラムでリッスンをトリガーすることもできます。-のようなモジュールと組み合わせて say 、次のようなことで例を有効にできます:

say.speak('One mail from Bob', function(err) {
  Sonus.trigger(sonus, 1) //start listening
});

また、さまざまなホットワードを使用して、後続の認識された音声をさまざまな方法で処理することもできます。例えば:
"通知。最新。"および「メッセージを送信。今日はお元気ですか」

それを机の上のマイクを使ってPiまたはCHIPに投げると、通知を読んでコマンドに反応するパーソナルアシスタントがいます。

簡単な例:
https://Twitter.com/_evnc/status/81129046017404109

もう少し複雑なもの:
https://youtu.be/pm0F_WNoe9k?t=20s

完全なドキュメント:
https://github.com/evancohen/sonus/blob/master/docs/API.md

免責事項:これは私のプロジェクトです:)

3
evancohen