2

안녕하세요!Microsoft Speech SDK 11의 문법이 너무 많습니다.

나는 엔진에 문법을로드 할 수있는 간단한 음성 인식 응용 프로그램을 작성합니다.

하지만, 많은 문법을 엔진에로드 할 수는 없지만 1024 문법보다 많지는 않습니다.

Additional information: Too many grammars have been loaded. Number of grammars cannot exceed 1024. 

그리고 내가 그것을 입력 스트림 * 웨이브 (내 soeech) 파일을 인식하지 못합니다 grammars- 1024로드 할 때 :

Thread.CurrentThread.CurrentCulture = new CultureInfo("ru-RU"); 
     Thread.CurrentThread.CurrentUICulture = new CultureInfo("ru-RU"); 

     // Create a new SpeechRecognitionEngine instance. 
     _sre = new SpeechRecognitionEngine(new System.Globalization.CultureInfo("ru-RU")); 

     _sre.SpeechHypothesized += _sre_SpeechHypothesized; 
     _sre.SpeechDetected += _sre_SpeechDetected; 
     _sre.SetInputToWaveFile(@"c:\Test\Wavs\Wavs-converted\file.wav"); 


public void LoadGrammarIntoEngine(IEnumerable<String> textColl) 
    { 
     Choices choises = new Choices(); 
     GrammarBuilder gb = new GrammarBuilder(); 
     gb.Culture = new CultureInfo("ru-RU"); 


     if (choises != null && textColl != null) 
     { 
      choises.Add(textColl.ToArray()); 

      if (gb != null) 
       gb.Append(choises); 
      else 
      { 
       Console.WriteLine(); 
      } 

      if (_sre.Grammars.Count < 1024) 
      { 
       Grammar g = new Grammar(gb); 
       if (_sre != null && g != null) 
        _sre.LoadGrammar(g); 
       else 
       { 
        Console.WriteLine(); 
       } 
      } 
      else 
      { 
       Console.WriteLine("too many grammars"); 
      } 
     } 

    } 

당신이 날 도와 줄 수 있습니까? 고맙습니다!

P. 내가 5-10 개의 문법 (각 단어 100 개)을로드 할 때 잘 동작합니다.

더 많은 인식 엔진을 함께 사용할 수 있습니까?

+0

왜 지구상에 많은 문법이 필요합니까? ['GrammarBuilder'] (http://msdn.microsoft.com/en-us/library/system.speech.recognition.grammarbuilder (v = vs.110) .aspx)와 ['GrammarBuilder'를 사용하여 병합 할 수 있어야합니다. 선택 사항] (http://msdn.microsoft.com/en-us/library/system.speech.recognition.choices (v = vs.110) .aspx). –

+0

예, 문법이 매우 큰 경우 - 1000+ 단어 (SGRS- 문법이 아닌 단어 목록 사용) - 음성 인식기가 단어를 인식 할 수 없습니다. – user2545071

+1

* 구문 *을 작성하는 경우 문제없이 1000 단어 이상을 사용할 수 있어야합니다. 임의의 순서로 발생할 수있는 1000 개의 단어 집합을 인식하려고한다면 명령 및 제어 엔진에서 받아쓰기 엔진을 효과적으로 만들려고 노력하고 있으며 제 경험상 절대로 작동하지 않습니다. 좋은 자유 텍스트 인식을 얻으려면 어쿠스틱 모델이 아닌 언어 모델을 이해할 수있는 엔진이 필요합니다. –

답변

2

의견을 통해 근본적으로 잘못된 접근 방식을 취하고 있습니다. System.Speech.Recognition.DictationGrammar과 같은 것을 사용해야합니다. Microsoft 데스크톱 SR 엔진을 사용합니다.

이렇게하면 대부분의 영어 단어를 사용할 수 있습니다. 1000 단어로 제한해야하는 경우 몇 가지 옵션이 있습니다.

단어 목록에 기본 단어 목록에없는 단어가 포함되어있는 경우 (매우 광범위 함) Lexicon Interfaces을 사용할 수 있습니다. 슬프게도 System.Speech.Recognition을 통해 노출되지 않으므로, SAPI를 사용하려면 SAPI로 이동해야합니다.

이것은 또한 어휘 밖의 인식을 거부 할 수 있다고 가정합니다. 사실이 아니라면 Dictation Resource Kit을 사용하면 맞춤 언어 모델을 만들 수 있습니다. 말하기 과학자들이 말하기 과학자들에 의해 만들어 졌으므로 문서 작성이 매우 힘들다고 경고하십시오.

실제로 사용자는 어휘 밖의 것을 말할 것입니다. 그들을 확인하고 거부하는 것이 가장 좋습니다. 작고 (예, 1000 단어가 작음) 어휘는 가양성에 문제가있는 경향이 있습니다 (사용자가 어휘에서 뭔가로 인식되는 어휘가 아닌 것을 말함). 이것은 명령 및 제어 문법에서도 마찬가지입니다.

+0

불행히도 러시아어와 Microsoft Speech (바탕 화면)가 필요합니다. 그리고 단어의 한계가 없다면 아주 좋을 것입니다. 나는 그 정도로 - 5000 단어를 인식 할 수 있다고 말하지만, 나는 더 필요하다 :) – user2545071

+2

불행히도 다른 SR API를 찾을 때가있다. –