项目作者: sdsb8432

项目描述 :
Speech to Text with Google for Android
高级语言: Java
项目地址: git://github.com/sdsb8432/SpeechToText-Android.git
创建时间: 2017-03-20T12:54:41Z
项目社区:https://github.com/sdsb8432/SpeechToText-Android

开源协议:

下载


SpeechToText with Google for Android

구글이 제공하는 Intent를 직접 호출하여 결과를 얻어오는 방법과 Custom하게 만들 수 있게 도와주는SpeechRecognizer Class를 활용해 입력되는 음성을 텍스트로 변환하는 프로젝트이다.

1. 사용법

1. Intent 호출 방법

아무래도 Custom하게 사용하는 방법보단 비교적 간단하다.
startActivityForResult(Intent intent, int requestCode) 메소드를 통해 Intent를 호출하여
onActivityResult(int requestCode, int resultCode, Intent data) 메소드에서 결과를 표시할 수 있다. 또한 RecognizerIntent.EXTRA_LANGUAGE를 통해 원하는 나라 언어를 선택할 수 있다.

  1. private final int REQ_CODE_SPEECH = 100;
  2. @Override
  3. protected void onCreate(Bundle savedInstanceState) {
  4. Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
  5. intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
  6. RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
  7. intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, language);
  8. intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Say Something");
  9. startActivityForResult(intent, REQ_CODE_SPEECH);
  10. }
  11. @Override
  12. protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  13. super.onActivityResult(requestCode, resultCode, data);
  14. if(requestCode == REQ_CODE_SPEECH) {
  15. if(resultCode == RESULT_OK && data != null) {
  16. ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
  17. textViewSpeechResult.setText(result.get(0)); //결과 표시
  18. }
  19. }
  20. }

2. SpeechRecognizer 사용

SpeechRecognizer Class를 사용하지만 위 Intent 호출방법과 비슷하게 Intent객체는 생성해주어야 합니다.
다만 직접 Intent를 호출하는 것이 아닌 speechRecognizer의 메소드 중 하나인 startListening(Intent intent)에 생성한 Intent객체를 인자로 넘겨준다.

  1. private SpeechRecognizer speechRecognizer;
  2. private Intent intentSpeech;
  3. @Override
  4. protected void onCreate(Bundle savedInstanceState) {
  5. speechRecognizer = SpeechRecognizer.createSpeechRecognizer(this);
  6. intentSpeech = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
  7. intentSpeech.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
  8. RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
  9. intentSpeech.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.KOREAN);
  10. speechRecognizer.startListening(intentSpeech); //음성 인식 시작
  11. speechRecognizer.stopListening(); //음성 인식 정지
  12. }

3. SpeechRecognizer 관련 Callback 호출

Intent를 직접 호출하면 아래와 같은 Callback을 받을 필요가 없지만 Custom하게 만들기 때문에 각각의 Callback 상황에 맞춰 처리를 해주어야 한다. 구글 문서를 통해 각각의 callback메소드들이 어떤 때에 나타나는지 간략히 주석으로 설명을 달았다.

  1. private RecognitionListener recognitionListener = new RecognitionListener() {
  2. @Override
  3. public void onReadyForSpeech(Bundle params) {
  4. //startListening()호출 후 음성이 입력되기 전 상태
  5. }
  6. @Override
  7. public void onBeginningOfSpeech() {
  8. //음성이 입력되고 있는 상태
  9. }
  10. @Override
  11. public void onRmsChanged(float rmsdB) {
  12. //사운드 레벨이 변경된 상태
  13. }
  14. @Override
  15. public void onBufferReceived(byte[] buffer) {
  16. //많은 소리가 수신된 상태
  17. }
  18. @Override
  19. public void onEndOfSpeech() {
  20. //음성 인식을 마친 상태
  21. }
  22. @Override
  23. public void onError(int error) {
  24. //네트워크 혹은 인식 오류가 발생한 상태
  25. }
  26. @Override
  27. public void onResults(Bundle results) {
  28. //음성 인식을 마치고 결과가 나온 상태
  29. ArrayList<String> result = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION);
  30. Log.d(TAG, result.get(0));
  31. }
  32. @Override
  33. public void onPartialResults(Bundle partialResults) {
  34. //부분적으로 인식 결과를 사용하기 위한 상태
  35. }
  36. @Override
  37. public void onEvent(int eventType, Bundle params) {
  38. //향후 이벤트를 추가하기 위해 예약된 상태
  39. }
  40. };
  41. speechRecognizer.setRecognitionListener(recognitionListener);

2. 프로젝트

해당 프로젝트는 STT Class를 생성하여 조금 더 사용하기 편하도록 만들어두었다.

3. 스크린샷