2014-03-19 6 views
1

도움이 필요합니다. 나는 내가하는 말을 알아보고 내가하는 말을 할 응용 프로그램을 만들고 싶습니다. 예를 들면 다음과 같습니다.자유 의사 표현이있는 음성 인식

이 어떤 응용 프로그램 이름이든간에 open [notepad]이라고 말하면 메모장을 열어야합니다.

은 내가 모두 문법DictationGrammar를 사용할 필요가 있다고 생각,하지만 난 방법을 모르겠어요. 도와주세요. 감사.

내 코드는 이제 다음과 같습니다

string WelcomeSentence = "Hello sir, how are you today"; 
    SpeechSynthesizer sSynth = new SpeechSynthesizer(); 
    PromptBuilder pBuilder = new PromptBuilder(); 
    SpeechRecognitionEngine sRecognize = new SpeechRecognitionEngine(); 

    private void frmMain_Load(object sender, EventArgs e) 
    { 
     sSynth.SelectVoice("IVONA Amy"); 
     sSynth.SetOutputToDefaultAudioDevice(); 
     pBuilder.ClearContent(); 
     pBuilder.AppendText(WelcomeSentence); 
     sSynth.Speak(pBuilder); 

     Choices sList = new Choices(); 
     sList.Add(File.ReadAllLines(@"Commands.ekd")); 
     Grammar gr = new Grammar(new GrammarBuilder(sList)); 
     DictationGrammar dgr = new DictationGrammar(); 
     try 
     { 
      sRecognize.RequestRecognizerUpdate(); 
      sRecognize.LoadGrammar(gr); 
      sRecognize.SpeechRecognized += sRecognize_SpeechRecognized; 
      sRecognize.SetInputToDefaultAudioDevice(); 
      sRecognize.RecognizeAsync(RecognizeMode.Multiple); 
      sRecognize.Recognize(); 
     } 
     catch { return; } 
    } 
    private void sRecognize_SpeechRecognized(object sender, SpeechRecognizedEventArgs e) 
    { 
     if (e.Result.Text == "open notepad") 
     { 
      System.Diagnostics.Process.Start(@"C:\Windows\System32\Notepad.exe"); 
     } 
     else 
     { 
      pBuilder.ClearContent(); 
      pBuilder.AppendText(e.Result.Text); 
      sSynth.Speak(pBuilder); 
     } 
    } 

도와주세요.

+0

이 질문에 대해서는 코드를 추가하고 읽을 수있는 질문을하는 데 충분한 표시를합니다. 그러나 나는 그것이 너무 광범위하다고 생각합니다. 문제를보다 구체적인 언어로 좁혀 야합니다. – paqogomez

+0

FWIW .. 몇 달 전에 [answer I posted] (http://stackoverflow.com/a/18605036/2589202)에 관심이있을 수 있습니다. – paqogomez

+0

나는 무엇을 더 말할 수 있을지 모른다. 난 단지 응용 프로그램이 문법으로 추가되지 않은 응용 프로그램 인 것처럼 명령 및 메모장으로 인식하도록하고 싶습니다. – TheNeosrb

답변

1

응답 I posted several months ago과 함께이 제안을 제공합니다.

SpeechFactory 클래스와 대부분 MySpeechMethods 클래스를 제외하고 있다는 것을 알고 있으면 다른 대답에서 복사하십시오. 또한 다른 답변에서 언급했듯이 오류 처리를해야합니다. 그 경고로, 당신은 자신의 코드를 이런 방식으로 수정할 것입니다.

그런 다음 MySpeechMethods에 명령을 내리면됩니다.

public class MySpeechMethods 
{ 
    [Speech("Open Notepad")] 
    public void OpenNotepad() 
    { 
     System.Diagnostics.Process.Start(@"C:\Windows\System32\Notepad.exe"); 
    } 
//... 
+0

확실히 구현할 것입니다. 아주 좋습니다. 그러나 이것은 제가 찾고있는 것이 아닙니다. 코드를 사용하면 메서드가 방금 열립니다 (응용 프로그램을 실행하는 명령). 따라서 사용자는 개방형이라고 말하면 컴퓨터는 그것을 명령으로 인식하고 다음은 메모장이라고 말합니다.이 이름은 변경이 필요한 응용 프로그램의 이름입니다. 따라서 코드를 사용하여 응용 프로그램과 함께 실행하려는 모든 단일 응용 프로그램에 대한 메서드를 작성해야합니다. 내가 원하는 걸 당신이 아는가? – TheNeosrb

+0

@ TheNeosrb 예, 저는 그것에 대해 논평 할 것입니다. 각 명령을 맵핑해야합니다. 나는 컴퓨터의 경로에 프로그램의 이름을 어떻게 번역 할 지 모릅니다. 그것도 iffy 소리. 'delete c :'라고 말하기 쉽습니다. 프로그램이 어떤 프로그램을 시작하는지 알고 있어야합니다. – paqogomez

+0

@TheNeosrb 설정 파일에서 가능한 파일을 읽고 그런 식으로 MySpeechMethods 클래스를 빌드 할 수 있습니다. 하지만 아마도이 질문의 범위 밖에있을 것입니다. – paqogomez