web-dev-qa-db-ja.com

C#音声認識-これはユーザーが言ったことですか?

音声認識エンジンを使用するアプリケーションを作成する必要があります。Vistaに組み込まれた音声認識エンジン、またはサードパーティの音声認識エンジンを使用して、Wordまたはフレーズを表示し、ユーザーがそれを読んだとき(またはその近似値)。また、オペレーティングシステムの言語を変更せずに、言語をすばやく切り替えることができる必要があります。

ユーザーは非常に短期間システムを使用します。アプリケーションは、最初に認識エンジンをユーザーの音声に合わせてトレーニングすることなく動作する必要があります。

また、これがWindows XP以下のバージョンのWindows Vistaで動作する場合もあります。

オプションで、システムは、ユーザーが選択した言語で、画面上の情報をユーザーに読み返すことができる必要があります。録音済みの吹き替えを使用してこの仕様を回避できますが、推奨される方法はテキスト読み上げエンジンを使用することです。

誰かが私のために何かを推薦できますか?

53
RichieACC

しばらく前にソフトウェアのジョエルについても同様の質問がされました。 System.Speech.Recognition 名前空間を使用して、これを行うことができます...いくつかの制限があります。 System.Speech(GACにあるはずです)をプロジェクトに追加します。 WinFormsアプリのサンプルコードを次に示します。

public partial class Form1 : Form
{
  SpeechRecognizer rec = new SpeechRecognizer();

  public Form1()
  {
    InitializeComponent();
    rec.SpeechRecognized += rec_SpeechRecognized;
  }

  void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  {
    lblLetter.Text = e.Result.Text;
  }

  void Form1_Load(object sender, EventArgs e)
  {
    var c = new Choices();
    for (var i = 0; i <= 100; i++)
      c.Add(i.ToString());
    var gb = new GrammarBuilder(c);
    var g = new Grammar(gb);
    rec.LoadGrammar(g);
    rec.Enabled = true;
  }

これにより、1から100までの数字が認識され、結果の数字がフォームに表示されます。 lblLetterというラベルの付いたフォームが必要です。

System.Speechは、事前定義された単語またはフレーズのリストでのみ機能します。汎用性や認識品質の点で、NaturallySpeakingとは異なります。ただし、ユーザーの声に合わせてトレーニングする必要はありません。また、ユーザーが発言できるのがいくつかの異なるものしかない場合は、合理的に機能します。そして、それは無料です! (Visual Studioがある場合)

非常に短いフレーズを使用すると、うまく機能しません。子供のためにアルファベットの文字を言って画面上でそれらを見るプログラムを作成しましたが、文字の多くが同じように聞こえるので(特に4歳の口から)、うまくいきません。

より柔軟なオプションについては...まあ、前述のNaturallySpeakingにはSDKがあります。ただし、販売店に連絡してアクセスする必要があり、価格も記載されていないため、「いくらですか?どれだけ持っていますか?」ある種のもの。 「ダウンロードして試してみる」オプションはないようです。 :(

テキスト読み上げに関しては、 System.Speech.Synthesis がこれを行います。音声認識よりも簡単です。入力してEnterキーを押し、テキストを読み上げるための小さなプログラムを作成しました。私の4歳はそれに魅了されます。 :)(「パパ、ダボットにタックしたい。」)

58
Ryan Lundy

[注:.NET 3.0のマネージド音声認識APIの開発リーダーでした]

System.Speechは.NET 3.0の一部であるため、VistaとXPの両方で使用できます。 Vistaでは、OSによって音声認識エンジンがプリインストールされているという追加の利点があります。 XP選択肢は次のとおりです。非常に古いエンジンでSAPI 5.1 SDKを使用します(ただし、コマンドおよび制御シナリオでは十分に機能する場合があります)。 。いくつかのSAPI 5準拠の音声認識エンジンも利用できます。

言語を切り替える必要がある場合は、System.Speech.Recognition.SpeechRecognitionEngineクラスを使用します。これにより、サポートする必要のある言語のSRエンジンを選択できます。エンジンは、サポートする言語のセットによって定義されることに注意してください(同じバイナリを使用している場合があり、追加の言語をサポートするためにデータファイルを交換するだけです)。

詳細を知る必要がある場合はコメントしてください。

フィリップ

16
Philipp Schmid

この前に「音声」参照を追加します

System.Speech

10月22日にKyralessaによって投稿されたコード例は、私にとっては機能しませんでしたが、わずかに改訂されたバージョンが機能することがわかりました。 Choicesオブジェクトに文字列を追加するときは、数字ではなくフルテキストの英語の単語を使用します。 MS音声認識エンジンは、それ自体では数字を認識できないようです。

前の例にコメントを追加して、これらの変更をマークしました。

public partial class Form1 : Form
{
  SpeechRecognizer rec = new SpeechRecognizer();

  public Form1()
  {
    InitializeComponent();
    rec.SpeechRecognized += rec_SpeechRecognized;
  }

  void rec_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
  {
    lblLetter.Text = e.Result.Text;
  }

  void Form1_Load(object sender, EventArgs e)
  {
    var c = new Choices();

    // Doens't work must use English words to add to Choices and
    // populate grammar.
    //
    //for (var i = 0; i <= 100; i++)
    //  c.Add(i.ToString());

    c.Add("one");
    c.Add("two");
    c.Add("three");
    c.Add("four");
    // etc...

    var gb = new GrammarBuilder(c);
    var g = new Grammar(gb);
    rec.LoadGrammar(g);
    rec.Enabled = true;
  }
10
Rob Segal

エンジンがあなたが尋ねているものである場合、私は見つけました(注意してください、私はリストしているだけで、私はそれらのいずれも試していません):

Lumenvoxエンジン

また、Microsoft自体から SAPI SDK があります。テキスト音声変換のみを試みましたが、その定義によると:

SDKには、自由に配布可能なテキスト読み上げ(TTS)エンジン(米国英語および簡体字中国語)および音声認識(SR)エンジン(in米国英語、簡体字中国語、および日本語)。

7
Jorge Córdoba

最初にトレーニングを必要としない場合、良い結果が得られないことに注意してください。音声認識は音声学の統計的応用であり、信号のばらつきが非常に大きいため、他の人の言うことを誰もが理解できるほとんど奇跡であるという事実についてはかなり率直な分野です。既製の音声認識エンジンは、英語のより一般的なアクセントに向かう傾向がありますが、わずかに異なるものでも悲惨に失敗します。

それがトレーニングがとても重要な理由です。特に問題のスペースを減らす場合は、簡単にオーバーフィッティングすることでうまくいくことができます。しかし、拡張可能な機械学習ソリューションを作成するのでしょうか?そこには常に摩擦があります。

つまり、Sphinx-4を検討してください。これは、Javaで利用可能 http://cmusphinx.sourceforge.net/sphinx4/ で書かれた市販のソリューションです。

3
Robert Elwell
1
stephbu

Dragon Naturally Speaking SDK は一見の価値があります。 このプロジェクト 面白そうだ。

しかし、それらのいずれかで遊ぶ必要はありません。

0
itsmatt

テキスト読み上げは Speech API で利用できます。個人的には、おそらくVistaが必要であり、マネージインターフェイスを使用して System.Speech.SpeechRecognition および System.Speech.Synthesis.TtsEngine を使用しますが、P/Invokeが可能なはずです。 XPサポート。

0
Mark Brackett

Microsoft Speech Server をお試しください。これは Office Communication Server 2007 の一部だと思います。 SR/TTSエンジン、C#API、およびVisual Studioと統合するツールが含まれています。

0
dbkk

これは、VistaのSystem.Speech APIの使用について最初に議論したMSDNマガジンの記事です。 APIはベータ版(記事の執筆時点)とVistaのリリースとの間で変更されたため、一部は古くなっていますが、これは今でも私が見つけた最高のリソースの1つであり、System.Speech名前空間の優れた導入部をカバーしています。 http://msdn.Microsoft.com/en-us/magazine/cc163663.aspx を参照してください

0
Michael Levy

さて、この質問にはすでに多くの良い回答がありますが、このニースのコード例を示すRob SegalとPhilipp Schmidの回答を2016年のドキュメントの情報で更新することは価値があると思います。

https://msdn.Microsoft.com/en-us/library/office/system.speech.recognition.speechrecognitionengine.aspx

Windowsの共有レコグナイザー(画面の中央に表示される小さなWindowsマイク)は使用しませんでした。アプリのSpeechRecognitionEngineには、視覚的なキューを必要としないNiceを使用しました。 UIは完全にコントロールできます。

0
Fidel Orozco