Kinect for Windows Developer Toolkit v1.5.0のカメが動くSpeech BasicsのWPF版をベースに日本語を認識するための設定をメモ。
言語パッケージのインストール
こちらからKinectSpeechLanguagePack_ja-JP.exeをダウンロードして、実行するだけでインストールできる。
ソース
デフォルトだと英語用になっているので、ja-JPに変える。インストールされている言語パッケージの分ループしてくれるので、使いたい言語をif分でキャッチして使うようです。
またサンプルアプリだとSpeechGrammer.xmlというxmlファイルを辞書としてロードしています。自分で新しくプロジェクトを作った時なんかは[Resources.resx]->[リソース]->[ファイル]->[自分の辞書.xml]を追加する感じ。とりあえずテストでいろいろ使いたいので、今回は直接辞書登録を叩くやり方にしました。
MainWindow.xaml.cs
private static RecognizerInfo GetKinectRecognizer() { foreach (RecognizerInfo recognizer in SpeechRecognitionEngine.InstalledRecognizers()) { string value; recognizer.AdditionalInfo.TryGetValue("Kinect", out value); Console.WriteLine(recognizer.Culture.Name); //if ("True".Equals(value, StringComparison.OrdinalIgnoreCase) && "en-US".Equals(recognizer.Culture.Name, StringComparison.OrdinalIgnoreCase)) if ("True".Equals(value, StringComparison.OrdinalIgnoreCase) && "ja-JP".Equals(recognizer.Culture.Name, StringComparison.OrdinalIgnoreCase)) { return recognizer; } } return null; } /*** 中略 ***/ private void WindowLoaded(object sender, RoutedEventArgs e) /*** 中略 ***/ var directions = new Choices(); directions.Add(new SemanticResultValue("まじうける", "マジ受けるんですけど")); directions.Add(new SemanticResultValue("こんにちは", "ちょりーっす")); directions.Add(new SemanticResultValue("じゃおうえんさつこくりゅうは", "邪王炎殺黒龍波")); directions.Add(new SemanticResultValue("backward", "BACKWARD")); directions.Add(new SemanticResultValue("backwards", "BACKWARD")); directions.Add(new SemanticResultValue("back", "BACKWARD")); directions.Add(new SemanticResultValue("turn left", "LEFT")); directions.Add(new SemanticResultValue("turn right", "RIGHT")); var gb = new GrammarBuilder { Culture = ri.Culture }; gb.Append(directions); var g = new Grammar(gb); spEngine.LoadGrammar(g); //// Create a grammar from grammar definition XML file. //using (var memoryStream = new MemoryStream(Encoding.ASCII.GetBytes(Properties.Resources.SpeechGrammar))) //{ // var g = new Grammar(memoryStream); // spEngine.LoadGrammar(g); //} /*** 略 ***/
うーん、英語のをそのままにしたけど、日英普通に認識する…。英語で登録してJapanese Englishで認識してるのかな。