AndroidPocketSphinx:系统如何知道调用哪个识别器?

时间:2013-09-04 01:42:33

标签: android speech-recognition speech-to-text cmusphinx

我正在研究TestPocketSphinxAndAndroidASR.java的源代码,首先我不清楚的是系统如何知道哪个识别器(即Google或CMUSphinx)。< / p>

我可以看到识别活动是通过以下方式开始的:

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

但据我所知,此代码并非针对GVR(Google语音搜索)或CMUSphinx。

那么Android如何知道启动哪个识别器?

在onCreate()之前,有一个对AndroidPocketSphinx设置的引用:

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

但是在整个项目上搜索只会产生下一个使用此布尔值显示不同Toast的语句:

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

所以我不明白系统如何知道(基于该偏好)启动哪个识别器。

Android如何知道启动哪个识别器?

2 个答案:

答案 0 :(得分:2)

您的问题并非针对Android上的语音识别。这只是关于如何在Android上进行意图解析的问题。

您的代码构造一个Intent并将其传递给startActivityForResult,后者启动相应的活动。如果有多个相应的活动,则Android会弹出一个选择对话框,或者根据用户设置的默认值自动选择。如果是系统会自动选择Google语音搜索,然后您可以尝试在“应用程序管理器”中对其应用“清除默认值”。三星Galaxy S II运行Android 4.1的说明:

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

Google搜索“默认启动”设置现在应显示“未设置默认设置”。现在,如果您启动支持ACTION_RECOGNIZE_SPEECH的活动,并且除了Google搜索之外,您还安装了一个或多个支持此意图的应用,那么您将看到该对话框。如果要进行测试,您需要支持ACTION_RECOGNIZE_SPEECH的应用,请安装Kõnele。 (我不确定您引用的基于CMU Sphinx的代码是否实际实现了此意图类型,但我没有仔细检查。)

答案 1 :(得分:1)

Android不“知道启动哪个识别器”,因为选择“测试两个ASR”菜单项(和功能)意味着选择该菜单项将调用GVR或CMU基于PREFERENCE_USE_POCKETSPHINX_ASR。

相反,它意味着“只测试GVR”,因此总是启动GVR。

CMU测试是通过现有的“Hold and Speak”布局元素完成的。