SpeechRecognizedEventArgs에서 원하는 정보를 추출 할 수없는 것 같습니다. 내 문법에는 "하나"와 "왼쪽 화살표"라는 문구가 있습니다. 두 사람의 말을 다른 사람에게 말하면 내 인식자가 문법에있는 최대 반복 횟수가 5가되기 때문에 찾을 수 있지만 그 결과의 단계를 구분할 수는 없습니다. SpeechRecognizedEventArgstext는 "하나, 왼쪽 화살표"또는 첫 번째 항목이 "하나"이고 두 번째 항목이 "왼쪽 화살표"인 목록을 원할 때 "왼쪽 화살표 하나"입니다.Microsoft 음성 인식을위한 SpeechRecognizedEventArgs에서 일치하는 개별 구문 찾기
"Words"속성은 거의 내가 원하지만 거의 그렇지 않다는 것을 발견했습니다. 스타일을 쉼표로 구분하거나 문법의 단 하나의 단계가있을 때 찾을 수있는 스타일이라면 분리 할 수없는 그룹 대신 하나씩 차례로 가져올 수 있습니다. 시도 내가 예를 들어, 하나의 문구를 발언 할 때 의미가 작동하여 -
void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
// e.g. "one left arrow"
// when I'd like either "one,left arrow" or a list
Console.WriteLine(e.Result.Text);
// ...
}
편집 :
var cultureInfo = new System.Globalization.CultureInfo("en-US");
recognizer_ = new SpeechRecognitionEngine(cultureInfo);
var choices = LoadWordChoices();
var gb = new GrammarBuilder();
gb.Append(choices, 1, 5);
var grammar = new Grammar(gb);
recognizer_.LoadGrammar(grammar);
recognizer_.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
그리고 이벤트 : 내 코드의 일부 "왼쪽 화살표"하지만 "왼쪽 화살표 한 개"라고 말하면 다음 오류로 인해 충돌합니다. "처리되지 않은 'System.Reflection.TargetInvocationException'형식의 예외가 mscorlib.dll에서 발생했습니다. 추가 정보 : 예외가 throw되었습니다. 호출 대상. "
var gb = new GrammarBuilder();
var choices = new Choices();
var words = LoadWords(); // string[] of "one", "left arrow" etc.
foreach (var word in words)
{
choices.Add(new SemanticResultValue(word, word));
}
gb.Append(choices, 1, 5);
return gb;
편집 : 2 : 오류 재현하는 최소한의 작업 프로그램을 포함 : 여기 내 시도이다
class MySpeech
{
private SpeechRecognitionEngine recognizer_;
public MySpeech()
{
var cultureInfo = new System.Globalization.CultureInfo("en-US");
recognizer_ = new SpeechRecognitionEngine(cultureInfo);
var gb = CreateGrammarBuilder();
var grammar = new Grammar(gb);
recognizer_.LoadGrammar(grammar);
recognizer_.SpeechRecognized +=
new EventHandler<SpeechRecognizedEventArgs>(recognizer_SpeechRecognized);
recognizer_.SetInputToDefaultAudioDevice();
recognizer_.RecognizeAsync(RecognizeMode.Multiple);
}
private GrammarBuilder CreateGrammarBuilder()
{
var gb = new GrammarBuilder();
var choices = new Choices();
var words = new string[] { "one", "left arrow" };
foreach (var word in words)
{
choices.Add(new SemanticResultValue(word, word));
}
var gbChoices = new GrammarBuilder(choices);
var key = new SemanticResultKey("press", gbChoices);
gb.Append(key, 1, 5);
return gb;
}
void recognizer_SpeechRecognized(object sender, SpeechRecognizedEventArgs e)
{
Console.WriteLine("Recognized: " + e.Result.Text);
}
}
몇 가지 변형을 시도했지만 여러 구를 사용할 때 충돌이 계속 발생합니다. 코드로 업데이트했습니다. 어떤 아이디어? –
@PhloxMidas 예제를 사용하여 새 질문을 업데이트/시작하고 백 트랙을 스택 할 수 있습니까? –
@PhloxMidas가 귀하의 편집 내용을 보지 못했습니다. updated answer –