我正在研究TestPocketSphinxAndAndroidASR的源代码.java我不太清楚的第一件事是系统如何知道要调用哪个识别器(即Google或CMUSphinx(。
我可以看到识别活动由以下人员启动:
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(谷歌语音搜索(或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 如何知道要启动哪个识别器?
您的问题并非特定于Android上的语音识别。这只是一个关于意图解析如何在Android上发生的问题。
您的代码构造一个 Intent 并将其传递给启动相应活动的startActivityForResult
。如果有多个相应的活动,则Android会弹出一个选择对话框,或者根据用户设置的默认值自动选择。例如,如果自动选择了Google语音搜索,则可以尝试在应用程序管理器中对其应用"清除默认值"。运行Android 4.1的三星Galaxy S II的说明:
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 狮身人面像的代码是否真的实现了这种意图类型,但我没有仔细检查。
Android不知道要启动哪个识别器",因为选择"测试两个ASR"菜单项(和函数(并不意味着选择该菜单项将根据PREFERENCE_USE_POCKETSPHINX_ASR调用GVR或CMU。
相反,它的意思是"仅测试 GVR",因此它将始终启动 GVR。
CMU 测试是通过现有的"保持和说话"布局元素完成的。