0

所有问题都与 android for pocketsphinx 的演示项目有关,在 CMUSphinx 的官方网站上给出。

我不明白该方法的switchSearch()真正作用。方法是使用KWS_SEARCH="wakeup"属性,这个属性有什么用?它不出现在语法文件 (.gram) 中。这个属性的目的是什么?该方法比较searchNamewith KWS_SEARCH,我不知道为什么。KWS_SEARCH它还作为参数传递给startListening()识别器对象上的方法。为什么?

我不明白如何使用 10000 毫秒的超时来改善结果。

这是switchSearch()方法:

private void switchSearch(String searchName) {
    recognizer.stop();

    // If we are not spotting, start listening with timeout (10000 ms or 10 seconds).
    if (searchName.equals(KWS_SEARCH))
        recognizer.startListening(searchName);
    else
        recognizer.startListening(searchName, 10000);

    String caption = getResources().getString(captions.get(searchName));
    ((TextView) findViewById(R.id.caption_text)).setText(caption);
}
4

1 回答 1

0

来自Pocketsphinx 教程

开发者可以配置多个不同语法和语言模型的“搜索”对象,并在运行时切换,为用户提供交互体验。

有多种可能的搜索模式:

  • 关键字 - 有效地查找关键短语并忽略其他语音。允许配置检测阈值。
  • 语法 - 根据 JSGF 语法识别语音。与关键短语语法搜索不同,它不会忽略不在语法中的单词,而是尝试识别它们。
  • ngram/lm - 使用语言模型识别自然语音。
  • allphone - 使用语音语言模型识别音素。每个搜索都有一个名称,并且可以通过名称引用,名称是特定于应用程序的。函数 ps_set_search 允许激活先前通过名称添加的搜索。

要添加搜索,需要指向描述搜索的语法/语言模型。语法的位置特定于应用程序。如果只需要简单的识别,则添加单个搜索或仅使用配置选项配置所需的模式就足够了。

搜索的确切设计取决于您的应用程序。例如,您可能想先听激活关键字,一旦识别出关键字,就切换到 ngram 搜索以识别实际命令。识别命令后,您可以切换到语法搜索以识别确认,然后切换回关键字侦听模式以等待另一个命令。

我不明白 switchSearch() 方法的真正作用。方法是使用 KWS_SEARCH="wakeup" 属性,这个属性有什么用?

“唤醒”是关键字定位搜索的搜索名称。它是在初始化识别器时添加的。名称可以是任意的,它只是标识搜索。

KWS_SEARCH 它也作为参数传递给识别器对象上的 startListening() 方法。为什么?

startListening 使用命名搜索开始侦听。

我不明白如何使用 10000 毫秒的超时来改善结果。

它与结果无关,它只是一种用户体验。当我们连续发现一个单词时,我们不需要超时。当我们识别出一个命令时,我们等待 10 秒,然后返回到定位模式。

于 2017-03-16T12:22:05.300 回答