我正在研究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如何知道启动哪个识别器?
答案 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”布局元素完成的。