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

AndroidPocketSphinx:系统如何知道调用了哪个识别器?,android,speech-recognition,speech-to-text,cmusphinx,Android,Speech Recognition,Speech To Text,Cmusphinx,我正在研究的源代码,首先我不太清楚的是系统如何知道调用哪个识别器(即Google或CMUSphinx) 我可以看出,识别活动是通过以下方式开始的: Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM); s

我正在研究的源代码,首先我不太清楚的是系统如何知道调用哪个识别器(即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上发生的问题

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

Settings -> Application manager -> All -> Google Search (v2.7.9...)
    -> Launch by default -> Clear defaults
谷歌搜索“默认启动”设置现在应该显示“无默认设置”。现在,如果您启动了一个支持
ACTION\u RECOGNIZE\u SPEECH
的活动,并且除了Google Search,您还安装了一个或多个支持此目的的应用程序,那么您将看到该对话框。如果要进行测试,您需要一个支持
操作\u识别\u语音
的应用程序,请安装。(我不确定您引用的基于CMU Sphinx的代码是否真正实现了这种意图类型,但我没有仔细检查。)

Android不知道要启动哪个识别器,因为选择了“测试ASR”菜单项(和功能)并不意味着选择该菜单项将根据首选项\u USE\u POCKETSPHINX\u ASR调用GVR或CMU

相反,它意味着“仅测试GVR”,因此它将始终启动GVR


CMU测试通过现有的“保持并讲话”布局元素完成。

什么是
TestPocketSphinxandroidasr.java
?请提供一个链接。@Kaarel对不起,我不知道它不容易找到。我最初以为这是官方的一部分,但由于你的问题,我意识到这实际上是。请参阅上面更新中的文件直接链接,问题仍然存在。作者是如何完成这个魔术的?谢谢。没有选择对话框弹出。我知道Android上的意向解析,但我似乎找不到“用户设置默认值”。该首选项是内部的,似乎在整个系统中都未使用。意图解析链中的“用户设置默认值”在哪里?现在感谢+1。