2010-02-23 3 views
29

Android에서 음성 인식 기능을 사용했는데 너무 좋았습니다. 내 고객 중 가장 칭찬받는 기능 중 하나입니다. 그러나 형식은 다소 제한적입니다. 인식기의 의도를 호출하고, 녹음 내용을 Google로 보내고, 텍스트를 기다려야합니다.녹음 된 사운드 클립이있는 안드로이드에서 음성 인식이 가능합니까?

내 아이디어 중 일부는 내 앱 내에 오디오를 녹음 한 다음 사본을 전송하기 위해 Google로 클립을 보내야합니다.

음성과 함께 처리 할 오디오 클립을 보낼 수있는 방법이 있습니까?

+0

이것이 API에 포함 된 적이 있다면 알고 계십니까? 자신의 녹음을 Google에 보내는 것에 대한 해결책을 찾지 못하셨습니까? – ahsteele

+0

나는 똑같은 것을 궁금해하고있다. 나는 안드로이드가이 고수준이라고 믿을 수 없다. 진지하게 언론에 있어서는 API가 부족한 것 같다. – Tom

+0

Android가 제공되지 않음이를 수행 할 수있는 모든 라이브러리. – sravan

답변

3

현재로서는 아닙니다. 현재 Android의 음성 인식 서비스에서 지원하는 유일한 인터페이스는 RecognizerIntent이며 사용자가 직접 사운드 데이터를 제공 할 수는 없습니다.

보고 싶은 내용이 있으면 http://b.android.com에 기능 요청을 제출하십시오. 이것은 또한 기존의 issue 4541에 접하게 관련되어 있습니다.

+2

Google은 인식기 또는 언어 모델의 정확성을 평가하는 기능을 제공합니까? 일반적으로 미리 녹음 된 샘플을 사전 녹음 된 샘플로 실행하여 인식기 정확도를 평가합니다. 내 애플리케이션에 효과적인지 알아보기 위해 Google 인식기를 테스트 할 수있는 방법이 있습니까? 또한 사전 녹음 된 샘플에 대해 두 언어 모델을 테스트하여 어떤 언어가 더 나은 정확성을 제공하는지 판단하고 싶습니다. 내가 이것을 할 수있는 방법이 있습니까? –

+0

공개적으로 아니요, 아니요. –

+1

주어진 사운드가 마이크에서 다시 되돌아 올 수있는 방법이 있습니까? 소켓/파일/스트림 리다이렉션과 같은 것? – Snicolas

1

내가 알고있는 한, 여전히 오디오 클립을 Google에 전송하여 전송할 수있는 방법은 없습니다. 그러나 Froyo (API 레벨 8)는 음성 인식 서비스에 직접 액세스 할 수있는 SpeechRecognizer 클래스를 도입했습니다. 예를 들어, 오디오 클립의 재생을 시작하고 Activity가 백그라운드에서 듣고있는 음성 인식기를 시작하게 할 수 있습니다. 완료되면 결과가 사용자 정의 수신기 콜백 메소드로 반환됩니다.

SpeechRecognizer의 메서드가 주 응용 프로그램 스레드에서 실행되어야하므로 다음 샘플 코드는 활동 내에 정의해야합니다. 또한 AndroidManifest.xml에 RECORD_AUDIO 권한을 추가해야합니다.

 


    boolean available = SpeechRecognizer.isRecognitionAvailable(this); 
    if (available) { 
     SpeechRecognizer sr = SpeechRecognizer.createSpeechRecognizer(this); 
     sr.setRecognitionListener(new RecognitionListener() { 
      @Override 
      public void onResults(Bundle results) { 
       // process results here 
      } 
      // define your other overloaded listener methods here 
     }); 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     // the following appears to be a requirement, but can be a "dummy" value 
     intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, "com.dummy"); 
     // define any other intent extras you want 

     // start playback of audio clip here 

     // this will start the speech recognizer service in the background 
     // without starting a separate activity 
     sr.startListening(intent); 
    } 
 

또한 RecognitionService를 확장하여 자신의 음성 인식 서비스를 정의 할 수 있습니다,하지만이 답변 :

+0

누구든지 이것을 시도하고 성공 했습니까? 음성을 인식하기 위해 긴 오디오 파일을 재생하는 전체 재생 시간을 기다려야합니까? – rmooney

+0

이것은 잠시 전에 게시되었지만,이 아이디어가 (Android N에서) 작동한다는 것을 (훨씬 더 많은 코드로) 확인했습니다. 'startListening()'을 호출 한 후,'RecognitionListener.onReadyForSpeech()'콜백을 기다렸다가 오디오 클립을 재생합니다 (큰소리로!). – adelphus

+0

@adelphus 소스 코드를 업로드 할 수 있습니까? – Hamza

10

I 음성 인식 및 음성 녹음을 위해 잘 작동하는 솔루션을 가지고의 범위를 벗어 . 솔루션의 작동 상태를 보여주기 위해 만든 간단한 Android 프로젝트에 link이 있습니다. 또한, 응용 프로그램을 설명하기 위해 프로젝트 내부에 인쇄 화면을 몇 개 넣었습니다.

내가 사용한 접근 방식을 간략하게 설명하려고합니다. 나는이 프로젝트에서 구글 스피치 API와 Flac 녹음이라는 두 가지 기능을 결합했다.

Google 음성 API는 HTTP 연결을 통해 호출됩니다. Mike Pultz은 API에 대한 자세한 내용을 제공합니다 :

"(...) 새로운 [Google] API는 전이중 스트리밍 API입니다. 즉, 실제로 두 개의 HTTP 연결 - 업로드를위한 하나의 POST 요청을 사용한다는 것입니다 콘텐츠를 "라이브"청크 스트림으로, 두 번째 GET 요청을 통해 결과에 액세스 할 수 있으므로 긴 오디오 샘플이나 스트리밍 오디오에 훨씬 더 적합합니다. "

그러나이 API는 제대로 작동하려면 FLAC 사운드 파일을 받아야합니다. Flac 녹음

나는 AudioBoo라는 오픈 소스 응용 프로그램에서 코드와 라이브러리의 일부를 추출하고 적용하여 해당 프로젝트에서 Flac 녹음을 구현했습니다. AudioBoo는 원시 코드를 사용하여 flac 형식을 기록하고 재생합니다.

따라서 flac 사운드를 녹음하고 Google Speech API로 보내고 텍스트를 가져 와서 방금 녹음 된 사운드를 재생할 수 있습니다.

내가 만든 프로젝트에는 작업을 수행하는 기본 원칙이 있으며 특정 상황에서 향상시킬 수 있습니다. 다른 시나리오에서 작동하게하려면 Google Chromium-dev 그룹에 속한 Google 음성 API 키를 가져와야합니다. 그 프로젝트에 하나의 키만 남겨 두었다가 작동하고 있음을 보여 주지만 결국은 제거 할 것입니다. 누군가가 그것에 대해 더 많은 정보를 필요로한다면, 나는이 게시물에 2 개 이상의 링크를 넣을 수 없기 때문에 알려 주시기 바랍니다.

+0

@Isantsan 비슷한 기능을 구현해야하지만 두 번째 부분 (FLAC에서 레코딩)을 찾는 것이 정말 어렵습니다. 또한 AudioBoo 프로젝트를 살펴 보았지만 어디서부터 시작해야할지 몰랐습니다. –

+0

실제로 API에서 변경되고 위의 코드가 충돌 할 때 테스트를 시도하면 안드로이드에서 음성 녹음은 물론 음성 테스트가 가능합니다. – KOTIOS

+0

API가 변경된 경우 프로젝트에 약간의 조작이 필요할 수 있습니다. 나는 잠시 동안 API에 익숙하지 않았다. 그러나이 답변이 게시되면 모든 것이 설명대로 작동합니다. – lsantsan

관련 문제