티스토리 뷰

반응형

오늘 반나절 정도 키넥트랑 씨름 하면서, 이것 저것 건들고 놀다가 아주 좋은 블로그를 발견하게 되어서 그 블로그의 내용을 키넥트의 음성 서비스와 붙여서 간단한 프로그램을 만들어 봤다.

1. 참고 포스트
C# 으로 만드는 음성인식/TTS 프로그램
http://blog.naver.com/PostView.nhn?blogId=techshare&logNo=100150170276&viewDate=&currentPage=1&listtype=0&from=postList

2. MS사에서 
옛날부터 음성 인식 기능을 제공해 주고 있었다. 지금 윈도우 7에도 기본적으로 그 기능이 들어가 있는데, 버전이 8.0이다. 그런데, 8.0은 한글을 지원하지 않는다. 그래서 별 관심없이 하루하루 보내고 있다가 오늘 위의 포스트를 찾아서 실행 하게 되었는데, 거짓말 같이 한글 인식과 한글 보이스 출력이 되는 것이다.(버전 11은 한글 인식, 보이스 출력이 지원된다.) 기본 마이크만 있으면 음성 인식이 가능한데.. 기왕 키넥이 있으니 키넥의 음성 소스를 가지고 인식을 시키도록 약간 변경을 했다.



3. 기본 적인 내용은
 참고 포스트에 자세하게 다루고 있으니, 여기서는 키넥트와 관련된 부분만을 추가 하도록 하겠다.

  //전역 오브젝트들 선언
  KinectSensor sensor;
  KinectAudioSource source;
  SpeechRecognitionEngine sre;
  SpeechSynthesizer synth;

....

  //키넥트 센서 검색
  sensor = (from sensorToCheck in KinectSensor.KinectSensors
            where sensorToCheck.Status == KinectStatus.Connected
            select sensorToCheck).FirstOrDefault();
  if (sensor == null)
  {
      MessageBox.Show("No Kinect sensors are attached to this computer.");
      return;
  }
  //센서 시작
  sensor.Start();
  //센서의 오디오 부분만 따로 뽑아내고
  source = sensor.AudioSource;
  //에코 취소 모드..음음..음향 관련 내용인듯..
  //none : 에코 취소 또는 억제를 하지 마시오
  source.EchoCancellationMode = EchoCancellationMode.None;
  //이 옵션을 끄는 것이 중요하다고 하는..
  source.AutomaticGainControlEnabled = false;

...

  //한글 버전
  sre = new SpeechRecognitionEngine("SR_MS_ko-KR_TELE_11.0");
  //인식할 단어 등록
  var foods = new Choices();
  foods.Add("사과");
  foods.Add("망고");
  foods.Add("바나나");
  foods.Add("파인애플");
  foods.Add("오랜지");
  //문법 인스턴스 - 이 부분에서 참고 포스트의 xml을 이용한 방식이 않됨
  var gb = new GrammarBuilder();
  gb.Culture = new System.Globalization.CultureInfo("ko-KR");
  gb.Append(foods);

  Grammar g = new Grammar(gb);
  try
  {
      //음성 인식 엔진에 문법을 입력
      sre.LoadGrammar(g);
  }
  catch(Exception ec)
  {
      System.Diagnostics.Debug.WriteLine(ec.Message);
  }


...

  //키넥트의 음성 입력 데이터를 스트림에 넣고 그 스트림을 음성 인식 엔진에서 받아들임
  Stream s = source.Start();
  sre.SetInputToAudioStream(s, new SpeechAudioFormatInfo(EncodingFormat.Pcm, 16000, 16, 1, 32000, 2, null));

  //발음해야 하는 단어들
  tbMessage.Text = "Recognizing speech. Say: '사과', '바나나', '망고', '파인애플', '오랜지'";

  //녹음 시작
  sre.RecognizeAsync(RecognizeMode.Multiple);

KinectWPFProject.zip
다운로드


 

반응형

'Previous Platforms' 카테고리의 다른 글

Daum OAuth in Windows Phone 7.1  (2) 2012.02.22
Authentication in Windows Phone 7.1  (0) 2012.02.20
Kinect for Windows 개봉  (0) 2012.02.15
Prism 4.0 MEF Container 1  (2) 2012.02.13
NMessenger using WCF RIA Service SOAP endpoint  (0) 2012.02.10
댓글