続認識
こんなコード。
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Speech.Recognition; namespace SpeechTest { class Program { static void Main(string[] args) { using (SpeechRecognitionEngine engine = new SpeechRecognitionEngine()) { Grammar grammar = new DictationGrammar(); engine.LoadGrammar(grammar); engine.SetInputToDefaultAudioDevice(); Console.WriteLine("Initialized."); while (Process(engine)) { } } } static bool Process(SpeechRecognitionEngine engine) { RecognitionResult result; Console.WriteLine("Please Speech Something..."); result = engine.Recognize(); if (result == null) { Console.WriteLine("No Input or Grammar Error."); } else { Console.WriteLine("Succeeded!"); Console.WriteLine(result.Text); if (result.Text == "電卓") { System.Diagnostics.Process.Start("calc"); } if (result.Text == "メモ帳") { System.Diagnostics.Process.Start("notepad"); } if (result.Text == "終わり") { return false; } } return true; } } }
これで参照設定に System.Speech を追加で動く。
昨日動かなかったのはPCのデバイス設定が間違っていたからのよう。PC内蔵のマイクだからか、認識率は結構低く10%程度。特に"終わり"が"をわり"と認識されて20回ぐらいはねられた。一文字だけで試してみたが、それでも安定しない。Vistaの音声認識には学習機能が備わっているらしいが、SpeechRecognitionEngineから扱えるかは不明。