voz reconocimiento programar por google dictado controlar como comandos comando celular activar android android-intent speech-recognition speech-to-text

por - reconocimiento de voz android programar



Comparación del uso del reconocimiento de voz en Android: ¿por intención o en subproceso? (3)

Introducción

Android me ofrece dos formas de usar el reconocimiento de voz.

La primera forma es mediante un Intent , como en esta pregunta: ejemplo intencionado . Una nueva Activity se coloca en la parte superior de la pila que escucha al usuario, escucha algunos discursos, intenta transcribirla (normalmente a través de la nube) y luego devuelve el resultado a mi aplicación, a través de una llamada a onActivityResult .

El segundo es obtener un SpeechRecognizer , como el código aquí: ejemplo de SpeechRecognizer . Aquí, parece que el discurso está grabado y transcrito en otro hilo, luego las devoluciones de llamada me dan los resultados. Y esto se hace sin abandonar mi Activity .

Me gustaría entender los pros y los contras de estas dos formas de reconocimiento de voz .

Lo que tengo hasta ahora

Usando la Intent :

  • es simple de codificar
  • evita reinventar la rueda
  • brinda una experiencia de usuario consistente en reconocimiento de voz en todo el dispositivo

pero

  • puede ser lento para la creación de una nueva actividad con su propia ventana

Usando el SpeechRecognizer :

  • me permite mantener el control de la interfaz de usuario en mi aplicación
  • me da posibilidades adicionales de cosas para responder ( documentación )

pero

  • está limitado a ser llamado desde el hilo principal
  • más control requiere más verificación de errores.

La principal diferencia es la IU. SpeechRecognizer no tiene ninguno por lo que eres responsable de crear uno.
Utilizo para escribir un prototipo donde tengo el receptor para escuchar el botón de los auriculares, luego activa el reconocimiento de voz para escuchar algunos comandos. La pantalla no se activó, así que tuve que usar SpeechRecognizer (mi interfaz de usuario era algunos sonidos pregrabados y Text To Speech).

La segunda diferencia es que SpeechRecognizer tiene capacidad para escuchar constantemente. La versión intencionada siempre terminará la exacción después de un cierto período. Por ejemplo, SpeechRecognizer es utilizado por el "teclado" de reconocimiento de voz para que pueda dictar un SMS.
En tal caso, recibirá resultados parciales solamente (en modo normal, SpeechRecognizer solo brinda resultados finales).


Además de todo esto, agregaría al menos este punto:

SpeechRecognizer es mejor para las interfaces de usuario de manos libres, ya que tu aplicación responde a condiciones de error como "Sin coincidencias" y quizás se reinicie. Cuando usa el Intent , la aplicación emite un pitido y muestra un diálogo que el usuario debe presionar para continuar.

Mi resumen es el siguiente:

SpeechRecognizer

  • Muestra diferentes UI o ninguna UI en absoluto. ¿Realmente quieres que la IU de tu aplicación emita un pitido? ¿Realmente desea que su interfaz de usuario muestre un cuadro de diálogo cuando hay un error y espera a que el usuario haga clic?

  • La aplicación puede hacer otra cosa mientras se realiza el reconocimiento de voz

  • Puede reconocer el habla mientras se ejecuta en segundo plano o desde un servicio

  • Puede manejar los errores mejor

  • Puede acceder a voz de bajo nivel como el audio en bruto o el RMS. Analice ese audio o use el volumen para hacer una especie de luz intermitente para indicar que la aplicación está escuchando

Intención

  • Interfaz de usuario consistente y fácil de usar para los usuarios
  • Fácil de programar

Una cosa que las otras respuestas no han mencionado: si hay múltiples reconocedores de voz instalados en el dispositivo, entonces el cambio de usuario entre ellos es diferente dependiendo de si se usa "Intent" o el SpeechRecognizer .

  • En caso de "Intención", aparece el cuadro de diálogo de selección de actividad estándar. El usuario puede elegir el reconocedor que se utilizará y, opcionalmente, establecerlo globalmente como el reconocedor predeterminado, para evitar el diálogo en el futuro.
  • En el caso de SpeechRecognizer el usuario puede configurar y configurar el reconocedor predeterminado en la configuración global ( Language and input -> Voice recognizer en ICS).

Por lo tanto, dependiendo de qué interfaz se use, la documentación sobre la configuración del reconocedor predeterminado y el cambio entre reconocedores debe ser diferente. (En la mayoría de los casos, aunque solo hay un reconocedor, Google Voice Search, entonces esto podría no ser un gran problema en la práctica).