CMUSphinx PocketSphinx - 识别所有(或大量)单词

时间:2014-09-20 13:28:41

标签: android dictionary cmusphinx pocketsphinx-android

在我尝试使用PocketSphinx for Android之前,我使用了Google的语音识别API。 我不需要设置搜索名称或字典文件。它只是认出了所说的每一个字。

现在,在PocketSphinx中,我需要这样做。但是我只能找到如何为一个单词设置识别,或者设置字典(演示项目中可用的字典只有很少的单词),识别器认为这些是唯一存在的单词,这意味着如果有人说类似的话,识别器认为它是字典中列出的单词。

我只是想问一下,我怎么能设置一些搜索名称,或者如何设置它来识别所有可用的单词(或者甚至是大量的单词)?也许某人有一个包含大量单词的字典文件?

2 个答案:

答案 0 :(得分:17)

  

在我尝试使用PocketSphinx for Android之前,我使用了Google的语音识别API。我不需要设置搜索名称或字典文件。它只是认出了所说的每一个字。

Google API也会识别一大堆但仍然有限的单词。很长一段时间它都未能识别出“Spotify”。谷歌离线语音识别器使用大约50k字,如publication中所述。

  

我只是想问一下,我怎么能设置一些搜索名称,或者如何设置它来识别所有可用的单词(或者甚至是大量的单词)?也许某人有一个包含大量单词的字典文件?

演示包括使用语言模型(预测部分)的大词汇量语音识别。可以下载更大的英语语言模型,例如En-US generic language model

运行识别的简单代码就是:

 recognizer = defaultSetup()
   .setAcousticModel(new File(assetsDir, "en-us-ptm"))
   .setDictionary(new File(assetsDir, "cmudict-en-us.dict"))
   .getRecognizer();
  recognizer.addListener(this);

  // Create keyword-activation search.
  recognizer.addNgramSearch(NGRAM_SEARCH, new File(assetsDir, "en-us.lm.bin"););

  // Start the search
  recognizer.startListening(NGRAM_SEARCH);

然而,它们不容易适应设备并实时解码。如果您想要使用大量词汇实时解码语音,则需要将音频流式传输到服务器。或者您需要将词汇和语言限制为通用英语的一小部分。您可以在tutorial中了解有关CMUSphinx中语音识别的更多信息。

答案 1 :(得分:1)

更新,2019年,我建议每个人都在Android上尝试Kaldi库。您可以找到演示here。它实际上是一个实时运行的大型词汇语音识别器(LM中为70k个单词)。