AndroidPocketSphinx: ¿Cómo sabe el sistema qué reconocedor se invoca?

Estoy estudiando el código fuente de TestPocketSphinxAndAndroidASR.java y lo primero que no es tan claro para mí es cómo el sistema sabe qué reconocedor (es decir, Google o CMUSphinx) para invocar.

Puedo ver que la actividad de reconocimiento se inicia por:

Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 

Pero por lo que sé este código no es específico para GVR (Google Voice Search) o CMUSphinx.

Entonces, ¿cómo sabe Android qué reconocedor para comenzar?

Anteriormente en onCreate (), hay una referencia a una configuración de AndroidPocketSphinx:

 mUsePocektSphinxASR = prefs.getBoolean(PreferenceConstants.PREFERENCE_USE_POCKETSPHINX_ASR, false); 

Pero la búsqueda en todo el proyecto produce sólo la siguiente instrucción que utiliza este booleano para mostrar un Toast diferente:

 if (mUsePocektSphinxASR){ Toast.makeText(TestPocketSphinxAndAndroidASR.this, "Would be working offline, using PocketSphinx Speech recognizer...", Toast.LENGTH_LONG).show(); } else{ Toast.makeText(TestPocketSphinxAndAndroidASR.this, "Working online, Using system speech recognizer (Google speech recognition server)... ", Toast.LENGTH_LONG).show(); } 

Así que no entiendo cómo el sistema sabe (basado en esa preferencia) que reconocedor para iniciar.

¿Cómo sabe Android qué reconocedor comenzar?

Su pregunta no es específica para el reconocimiento de voz en Android. Es sólo una pregunta acerca de cómo la resolución de intenciones ocurre en Android.

Su código construye un Intent y lo pasa a startActivityForResult que inicia la actividad correspondiente. Si hay varias actividades correspondientes, entonces Android muestra un cuadro de diálogo de elección o elige automáticamente en función de un valor predeterminado definido por el usuario. Si, por ejemplo, Google Voice Search se elige automáticamente, puede intentar aplicar "clear defaults" en el Application Manager. Instrucciones para Samsung Galaxy S II con Android 4.1:

 Settings -> Application manager -> All -> Google Search (v2.7.9...) -> Launch by default -> Clear defaults 

La configuración de la búsqueda de Google "Iniciar por defecto" ahora debe mostrar "Sin valores predeterminados". Ahora, si ACTION_RECOGNIZE_SPEECH una actividad que admite ACTION_RECOGNIZE_SPEECH y si, además de la Búsqueda de Google, tiene una o más aplicaciones instaladas que admiten esta intención, verá el cuadro de diálogo. Si para realizar una prueba necesita una aplicación que admita ACTION_RECOGNIZE_SPEECH continuación, instale Kõnele . (No estoy seguro de que el código basado en Sphinx de CMU que realices implementa realmente este tipo de intención, pero no lo revisé cuidadosamente).

Android no "sabe qué reconocer para iniciar" porque seleccionar que "Prueba ambas ASR" elemento de menú (y función) no significa que la selección de ese elemento de menú invocará GVR o CMU basado en el PREFERENCE_USE_POCKETSPHINX_ASR.

En su lugar, significa "sólo prueba GVR" y por lo tanto siempre se iniciará GVR.

La prueba CMU se realiza a través del elemento de disposición "Hold and Speak" existente.

  • Sección de Gramática personalizada Android SpeechRecognizer o RecognizerIntent
  • Discurso al texto en el emulador: Ninguna actividad encontrada para manejar Intención
  • SpeechRecognizer en Android Wear
  • Reconocimiento de voz a texto
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.