3

onBeginningOfSpeech()のドキュメントには次のように書かれています。

[呼び出された場合] ユーザーが話し始めました。

しかし、これがマイクで識別された (つまり、ローカルの) イベントなのかサーバーで識別されたイベントなのか (つまり、スピーチの開始を認識するために Google スピーチ サーバーが必要) については言及されていません。

ソースコードで手がかりを見つけようとしましたが、ある時点で、サービス、コールバック、インターフェースの間で迷子になりました...単純な誰が誰を呼ぶかというシーケンスではありません。

onBeginningOfSpeech()がローカルで実行されるか (たとえば、ローカル回路が RMS の変更を検出するか)、または Google サーバーに移動して「はい/いいえ」を取得する必要があるかどうかを知っていますか?

音声認識自体が Google のサーバーに送信されることは知っていますが、onBeginningOfSpeech()に対しても行われますか?

4

2 に答える 2

3

興味深い質問です。好奇心から少しテストを行いました。サンプルアプリケーションでは、WiFiを無効にしましたonReadyForSpeech()

WifiManager wifiManager = (WifiManager)getSystemService(Context.WIFI_SERVICE); 
wifiManager.setWifiEnabled(false);

そして、何が起こるかを観察しました。案の定onBeginningOfSpeech()、マイクがわずかなノイズを拾うとすぐに呼び出されます。スピーチである必要はありません。

したがって、@ KevinJunghansの結論は正しいですonBeginningOfSpeech()。つまり、Googleサーバーによって決定または開始されることはありません。

于 2012-07-17T15:56:42.043 に答える
2

システムは基本的に、これらのイベントがいつ発生するかを判断するために「リッスン」する必要があるため、発話の開始と発話の終了の検出はローカルで実行する必要があります。これは、リモート サービスでは効率的に実行できませんでした。音声認識で発話の始まりと終わりを探すことをエンドポインティングと呼び、これを判断するために高度な信号処理が使用されます。Google の音声の場合、クライアント デバイスは音声の開始と録音の開始を判断し、音声の終了を判断して録音を停止します。一部のシステムでは、エンド ポインターは、録音の両端で過剰な無音部分を削除する役割も果たします。発話の開始は、Web ブラウザーのマイク アイコンをクリックするなど、ユーザーの選択によってもトリガーできます。この録音された音声は、分析のために Google サーバーに送信され、結果が返されます。Google の非公式 API の詳細と、この音声の処理方法については、次の URL をご覧ください。この記事

于 2012-07-17T13:42:51.930 に答える