しばやん雑記

ASP.NET とメイドさんが大好きなフリーランスのプログラマーのブログ

音声認識を使う(2)

前回の続きで、前もって選択候補を指定しての音声認識を実験してみた。以下使用したコード。

using System;
using System.Collections.Generic;
using System.Text;
using System.Speech.Recognition;

namespace recognition
{
    class Program
    {
        static void Main(string[] args)
        {
            SpeechRecognitionEngine e = new SpeechRecognitionEngine();
            Choices choices = new Choices("メニュー","喋る","設定","終了");
            e.LoadGrammar(new Grammar(new GrammarBuilder(choices)));
            e.SetInputToDefaultAudioDevice();
            e.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>(Program_SpeechRecognized);
            while (true)
            {
                e.Recognize();
            }
        }

        static void Program_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
        {
            Console.WriteLine(e.Result.Text);
        }
    }
}

結果としては、私の環境では認識率はほぼ100%。Choices に漢字が含まれていてもなんら問題はないし、認識速度は速い。
SpeechRecognizedEventArgs.Result には Choices で指定したものが入るので、プラットフォームでマップを作っておいてそのまま OnChoiceSelect を送ってやれば簡単な音声認識の出来上がり。
おまけでディクテーション文法での認識も試してみたけど、トレーニングをしていないこともあってか、認識率は悪かった。試したい人は

            Choices choices = new Choices("メニュー","喋る","設定","終了");
            e.LoadGrammar(new Grammar(new GrammarBuilder(choices)));

            e.LoadGrammar(new DictationGrammar());

に変更してやれば出来るはず。