검색결과 리스트
음성인식에 해당되는 글 1건
- 2013.03.16 안드로이드 내장 음성 인식엔진 Nuance SREC 27
안드로이드는 음성인식(Speech Recognize)기능을 지원하고 있습니다.
안드로이드의 음성인식 엔진은 두가지
구글 음성인식 검색용 엔진은 offline에서는 사용할 수 없었으나 (젤리빈부터 가능), Nuance SREC 엔진은 자체 내장 native 엔진이기때문에 offline에서 사용 가능하다는 장점이 있으며, 아파치 라이선스로 모든 소스가 공개되어 있다는 장점이 있습니다!
※최근에 젤리빈에서 지원하기 시작한 오프라인 음성인식 지원은 Nuance SREC을 사용한 오프라인 음성인식이 아닌 것으로 보입니다. (http://forum.xda-developers.com/showthread.php?t=2014946 참조해서 보면 오프라인으로 쓰고자 하는 경우 데이터를 받게끔 되어있습니다. http://www.youtube.com/watch?v=BTARRXP_I24 넥서스 7에서 오프라인 음성인식 사용하기 영상 참조)
반면, 현재 SREC은 영문만 지원하는 단점이 있습니다. (SREC에서 쓰이는 사전도 영문만 있고, grammar도 영문만 지원) 또한 일반적인 grammar 문법은 잘 지원하지만 dictation을 아직 지원하지 않습니다.
Nuance SREC 엔진은 2008/2009년에 공개되었는데도 많이 사용되지 않고 있는 것은 아마도 관련 문서가 아직은 거의 없기 때문이 아닌가 합니다. (혹은 다른 음성인식 라이브러리를 사용한다거나 해서??)
비교적 최근에 데비안 프로젝트에서 Nuance SREC엔진을 포팅하려는 시도가 있는 것 같은데 별다른 진척은 없는 상태입니다. https://github.com/arthurv/srec 참조
추가: Nuance srec을 이용해 kinect를 리눅스상에서 쓸 수 있게 포팅한 (소스를 보면 고친 부분은 거의 없음) 것도 있더군요. http://www.keyboardmods.com/2011/10/kinect-speech-recognition-in-linux.html 이것을 보면 리눅스상에서도 많은 수고 없이도 사용할 수도 있을 것으로 생각됩니다.
그밖에 더 자세한 내용은 다음 사이트를 참조하시기 바랍니다.
Nuance SREC 음성엔진을 사용하는 프로젝트
그런데 Nuance SREC엔진은 안드로이드 SDK API로 지원되지 않으므로, 이 자체 내장 엔진을 이용해서 앱을 만드려면 android.speech.srec.* 소스를 복사해서 사용하는 방식으로 만들어야 합니다. 이와 같은 방식으로 안드로이드 내장 음성인식 엔진 SREC을 사용하는 대표적인 프로젝트/앱이 다음과 같은 것이 있습니다.
소스 예제
android.speech.srec.Recognizer 자바 소스를 살펴보면 다음과 같은 식으로 사용할 수 있다는 주석이 있습니다.
(아래 소스를 조금 보기좋게 해 두었습니다.)
https://github.com/CyanogenMod/android_frameworks_base/tree/jellybean/core/java/android/speech/srec
https://github.com/CyanogenMod/android_frameworks_base/blob/jellybean/core/java/android/speech/srec/Recognizer.java - CyanogenMod 소스
// create and start audio input InputStream audio = new MicrophoneInputStream(11025, 11025*5); // create a Recognizer String cdir = Recognizer.getConfigDir(null); Recognizer recognizer = new Recognizer(cdir + "/baseline11k.par"); // create and load a Grammar Recognizer.Grammar grammar = recognizer.new Grammar(cdir + "/grammars/VoiceDialer.g2g"); // setup the Grammar to work with the Recognizer grammar.setupRecognizer(); // fill the Grammar slots with names and save, if required grammar.resetAllSlots(); for (String name : names) grammar.addWordToSlot("@Names", name, null, 1, "V=1"); // names 배열에 이름을 넣어두면 인식됨 예를 들어 { "hello", "foobar", "kim" } grammar.compile(); grammar.save("/mnt/sdcard/foo.g2g"); // path를 고쳐둠 // start the Recognizer recognizer.start(); // loop over Recognizer events while (true) { switch (recognizer.advance()) { case Recognizer.EVENT_INCOMPLETE: case Recognizer.EVENT_STARTED: case Recognizer.EVENT_START_OF_VOICING: case Recognizer.EVENT_END_OF_VOICING: // let the Recognizer continue to run continue; case Recognizer.EVENT_RECOGNITION_RESULT: // success, so fetch results here! for (int i = 0; i < recognizer.getResultCount(); i++) { String result = recognizer.getResult(i, Recognizer.KEY_LITERAL); Log.d(TAG, "result = " + result); // 인식 결과값 출력 } break; case Recognizer.EVENT_NEED_MORE_AUDIO: // put more audio in the Recognizer recognizer.putAudio(audio); continue; default: // notifyFailure(); break; } break; } // stop the Recognizer recognizer.stop(); // destroy the Recognizer recognizer.destroy(); // stop the audio device audio.close();
위의 소스를 거의 고치지 않고서 이를 이용해 간단한 샘플 앱을 만들어보니 자체 내장 음성인식 엔진 SREC이 아주 잘 작동하는 것을 확인하였습니다. (아래 링크를 참조하세요)
(이렇게 확인하고 구글링을 더 해보니 2011년에 이미 다른 분이 이 테스트를 해보신 모양입니다 :) http://www.eoeandroid.com/thread-54280-1-1.html 참고)
기타 참고 사이트
요청이 계속 있어서 간단한 앱을 급조했습니다~
(ICS 배포 이후부터 일부 기종은 srec을 제거한 상태인 기종의 경우에 libsrec_jni가 내장되지 않아서 제대로 작동하지 않습니다.)
https://github.com/wkpark/srec-example
컴파일하고 설치한 후에 사용법은 다음과 같습니다.
1. Start 버튼을 누른다.
2. Dial 123 123 같은 식의 VoiceDialer 명령을 내려본다. (이 명령 세트는 VoiceDialer.g2g 그래머 파일에 있는 내용)
(VoiceDialer.g2g는 external/srec/config/en.us/grammars/VoiceDialer.grxml 파일을 참조하세요)
컴파일된 앱: (libsrec_jni.so가 자체 내장된 기종에서만 제대로 작동합니다)
ringdroid에 JLayer MP3 디코더 적용하기 (0) | 2014.09.12 |
---|---|
ringdroid에서 mp3 waveform이 잘못 나오는 문제 수정 (0) | 2014.09.09 |
apk를 unzip으로 풀어서 다시 압축하는 경우 (0) | 2014.09.05 |
젤리빈 소스트리에서 컴파일한 native 라이브러리가 __open_2 심볼을 찾지 못해 오류나는 경우 (0) | 2014.08.30 |
저작권 문제없는 단어장 (1) | 2013.03.02 |
RECENT COMMENT