次のプログラムは、「yes」と「no」という単語を認識したMicrosoft管理音声APIを使用したC#の簡単な音声認識コンソールアプリケーションです。 Srgsメソッドを使用してSrgsルール 'MyRule'をインラインで作成すると、すべて正常に機能します。しかし、私は外部のXMLファイルにルールを入れ、それを参照するSrgsRuleRefを作成すると、私はいつもエラーを取得します: "インポートされた文法へのルール参照を解決することはできません。私は、言語、メディアタイプ、セマンティックタグフォーマットなどのさまざまなパラメータを変更しようとしましたが、何も違いはありません。.net speech APIを使用してSRGS文法で外部ルールを参照するときのエラー
using System;
using System.Speech.Recognition;
using System.Speech.Recognition.SrgsGrammar;
namespace SpeechRecognitionConsole
{
class Program
{
static void Main(string[] args)
{
try
{
System.Globalization.CultureInfo culture =
new System.Globalization.CultureInfo("en-US");
SrgsRule RootRule = new SrgsRule("RootRule");
RootRule.Add(new SrgsRuleRef(
new Uri("c:\\projects.net\\speechrecognitionconsole\\MyGrammar.xml"), "MyRule"));
RootRule.Scope = SrgsRuleScope.Public;
SrgsDocument MyDocument = new SrgsDocument(RootRule);
MyDocument.Culture = culture;
Grammar g = new Grammar(MyDocument);
g.Name = ("MyGrammar");
SpeechRecognitionEngine recognizer = new SpeechRecognitionEngine(culture);
recognizer.SpeechRecognized += new EventHandler<SpeechRecognizedEventArgs>
(recognizer_SpeechRecognized);
recognizer.LoadGrammar(g);
recognizer.SetInputToDefaultAudioDevice();
recognizer.RecognizeAsync(RecognizeMode.Multiple);
Console.WriteLine("Starting asynchronous recognition...");
Console.Read();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
static void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Console.WriteLine(e.Result.Text);
}
}
}
文法ファイル "C:\ projects.net \ speechrecognitionconsole \ MyGrammar.xmlは" 含まれています
<?xml version="1.0" encoding="utf-8"?>
<grammar xml:lang="en-US" tag-format="semantics/1.0" version="1.0" xmlns="http://www.w3.org/2001/06/grammar">
<rule id="MyRule" scope="public">
<one-of>
<item>yes</item>
<item>no</item>
</one-of>
</rule>
</grammar>
に頼まれたときに、同じ問題を修正する修正プログラムを助けていたかどうかわからあなたがURIの接頭辞にする必要はありませんではありませんか』? –
ファイルパスはUriコンストラクタによって 'file:/// c:/projects.net/speechrecognitionconsole/MyGrammar.xml'に変換されます。これはローカルファイルの正しい形式と思われます。 –
私はHTTP URIでコードをテストして、LoadGrammarでも同じエラーが表示されました。私はデバッガで何か奇妙なことを見たと思ったが、ファイルurlにSrgsRuleRefが#MyRuleをhttp urlとして付加していたが、httpと同じ結果が得られた。 –