2010-02-23 7 views
29

He utilizado la función de reconocimiento de voz en Android y me encanta. Es una de las características más alabadas de mis clientes. Sin embargo, el formato es algo restrictivo. Debe invocar la intención del reconocedor, hacer que envíe la grabación para su transcripción a google y esperar a que el texto vuelva.¿Reconocimiento de voz en Android con un clip de sonido grabado?

Algunas de mis ideas requerirían grabar el audio dentro de mi aplicación y luego enviar el clip a Google para su transcripción.

¿Hay alguna manera de que pueda enviar un clip de audio para procesarlo con voz a texto?

+0

¿Sabes si esto se ha incluido desde entonces en la API? Si no, ¿encontró una solución para enviar su propia grabación a Google? – ahsteele

+0

Me pregunto lo mismo. No puedo creer que Android tenga este alto nivel, parece que en realidad hay una falta de API cuando se trata de medios. – Tom

+0

Android no proporcionado. Cualquier biblioteca para hacer esto. – sravan

Respuesta

3

Desafortunadamente, no en este momento. La única interfaz admitida actualmente por el servicio de reconocimiento de voz de Android es RecognizerIntent, que no le permite proporcionar sus propios datos de sonido.

Si esto es algo que le gustaría ver, presente una solicitud de función al http://b.android.com. Esto también está relacionado tangencialmente con el existente issue 4541.

+2

¿Proporciona Google alguna facilidad para evaluar la precisión del reconocedor o los modelos de idioma? Normalmente evaluamos la precisión del reconocedor ejecutando muestras pregrabadas con transcripciones conocidas. ¿Hay alguna manera de probar el reconocedor de Google para saber si es efectivo para mi aplicación? También me gustaría probar los dos modelos de idiomas con mis muestras pregrabadas para determinar cuál proporciona la mejor precisión. ¿Hay alguna manera de que pueda hacer esto? –

+0

No públicamente, no. –

+1

¿No hay forma de que un sonido determinado pueda ser recogido desde el micrófono? ¿Algo como una redirección de socket/archivo/stream? – Snicolas

1

Por lo que yo sé, todavía no hay forma de enviar directamente un clip de audio a Google para su transcripción. Sin embargo, Froyo (API nivel 8) introdujo la clase SpeechRecognizer, que proporciona acceso directo al servicio de reconocimiento de voz. Entonces, por ejemplo, puede iniciar la reproducción de un clip de audio y hacer que su actividad inicie el reconocimiento de voz escuchando en segundo plano, lo que devolverá los resultados después de la finalización a un método de devolución de llamada del oyente definido por el usuario.

El siguiente código de ejemplo debe definirse dentro de una actividad, ya que los métodos de SpeechRecognizer deben ejecutarse en la cadena principal de la aplicación. También necesitará agregar el permiso RECORD_AUDIO a su AndroidManifest.xml.

 


    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); 
    } 
 

También puede definir su propio servicio de reconocimiento de voz mediante la extensión de RecognitionService, pero que está más allá del alcance de esta respuesta :)

+0

¿Alguien ha intentado esto y tuvo éxito? ¿Tendría que esperar todo el tiempo de reproducción de un archivo de audio largo para obtener reconocimiento de voz? – rmooney

+0

Aunque esto fue publicado hace un tiempo, he confirmado (con mucho más código) que esta idea funciona (en Android N). Después de llamar a 'startListening()', espere la devolución de llamada 'RecognitionListener.onReadyForSpeech()' y reproduzca el clip de audio (¡en voz alta!). – adelphus

+0

@adelphus ¿puedes subir el código fuente? – Hamza

10

Tengo una solución que está funcionando bien para tener el reconocimiento de voz y grabación de audio . Aquí está el link a un simple proyecto de Android que creé para mostrar que la solución funciona. Además, puse algunas pantallas de impresión dentro del proyecto para ilustrar la aplicación.

Voy a tratar de explicar brevemente el enfoque que utilicé. Combiné dos características en ese proyecto: Google Speech API y grabación Flac.

Google Speech API se llama a través de conexiones HTTP. Mike Pultz proporciona más detalles sobre la API:

"(...) la nueva API [Google] es una API de transmisión dúplex completa. Lo que esto significa es que realmente utiliza dos conexiones HTTP: una solicitud POST para cargar el contenido como una transmisión fragmentada "en vivo" y una segunda solicitud GET para acceder a los resultados, lo que tiene mucho más sentido para muestras de audio más largas o para la transmisión de audio ".

Sin embargo, esta API necesita recibir un archivo de sonido FLAC para funcionar correctamente. Eso nos lleva a la segunda parte: grabación de Flac

Implementé la grabación de Flac en ese proyecto mediante la extracción y adaptación de algunos códigos y bibliotecas de una aplicación de código abierto llamada AudioBoo. AudioBoo usa código nativo para grabar y reproducir formato flac.

Por lo tanto, es posible grabar un sonido de flac, enviarlo a Google Speech API, obtener el texto y reproducir el sonido que se acaba de grabar.

El proyecto que creé tiene los principios básicos para hacerlo funcionar y se puede mejorar para situaciones específicas. Para que funcione en un escenario diferente, es necesario obtener una clave API de Google Speech, que se obtiene al formar parte del grupo Google Chromium-dev. Dejé una clave en ese proyecto solo para mostrar que está funcionando, pero eventualmente la eliminaré. Si alguien necesita más información al respecto, házmelo saber porque no puedo poner más de 2 enlaces en esta publicación.

+0

@Isantsan Necesito implementar una funcionalidad similar, pero estoy descubriendo que la segunda parte (grabar en FLAC) es realmente difícil, ¿me pueden ayudar? También investigué el proyecto AudioBoo pero no sabía por dónde empezar. –

+0

en realidad hay cambio en la API y el código anterior se bloquea cuando traté de probar, ¿es esto realmente posible tener voz de registro y voz para probar en Android – KOTIOS

+0

Si la API ha cambiado, el proyecto podría necesitar algunos ajustes. No he seguido con la API por un tiempo. Sin embargo, cuando se publicó esta respuesta, todo funcionó como se describe. – lsantsan

Cuestiones relacionadas