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

2024-02-01

我正在研究源码TestPocketSphinxAndAndroidASR.java https://github.com/mistrykajal16/AndroidPocketSphinx/blob/master/src/ca/ilanguage/labs/pocketsphinx/ui/TestPocketSphinxAndAndroidASR.java我不太清楚的第一件事是系统如何知道which要调用的识别器(即 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(Google 语音搜索)或 CMUSphinx。

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

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

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

但搜索entire项目仅生成下一个语句,该语句使用此布尔值来显示不同的 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();
}

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

安卓怎么知道which识别器启动?


您的问题并非特定于 Android 上的语音识别。这只是一个关于 Android 上意图解析如何发生的问题。

您的代码构造一个 Intent 并将其传递给startActivityForResult从而启动相应的活动。如果有多个相应的 Activity,则 Android 会弹出一个选择对话框,或者根据用户设置的默认值自动选择。如果例如Google 语音搜索会自动选择,然后您可以尝试在应用程序管理器中对其应用“明确的默认值”。运行 Android 4.1 的 Samsung 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 http://kaljurand.github.io/K6nele/。 (我不确定您引用的基于 CMU Sphinx 的代码实际上实现了此意图类型,但我没有仔细检查。)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android PocketSphinx:系统如何知道调用了哪个识别器? 的相关文章

随机推荐