首页 > 解决方案 > PocketSphinx - getHypstr() 在 processRaw 之后为 KeyphraseSearch 返回空

问题描述

尝试edu.cmu.sphinx.pocketsphinx和 processRaw 来检测关键字。

我已经直接使用 getDecoder() 设置了 SpeechRecognizer 的解码器。setKeyphrase (KWS_SEARCH,KEYPHRASE); 首先调用解码器。startUtt (); 然后很少调用带有 PCM 缓冲区切片的processRaw ,然后调用解码器。结束符()。我得到一个关于解码器的空假设。炒作();

为setKeywordThreshold尝试了几个不同的值。没运气。

  1. 少了什么东西?

  2. 据我了解,在调用processRaw时,最后一个参数full_utt应该是 False 直到调用endUtt,这是正确的吗?

  3. 何时应将full_utt设置为 True?以及它如何影响识别?

编辑:需要提一下,起初我试图检测“哦,强大的计算机”短语,这正是使用 SpeechRecognizer 自己的RecognizerThread已正确识别的演示短语, 但在使用processRaw时没有检测到。两次尝试的音频条件相同。

谢谢。

标签: speech-recognitioncmusphinxpocketsphinxpocketsphinx-android

解决方案


少了什么东西?

您错过了教程推荐

必须调整阈值以平衡误报和漏检。最好的方法是使用预先录制的音频文件。常见的调优过程如下:

进行长时间的录音,其中很少出现关键字和其他一些声音。您可以拍摄电影声音或其他内容。音频的长度应约为 1 小时。对每个关键字使用不同阈值在该文件上运行关键字检测,使用以下命令: pocketsphinx_continuous -infile -keyphrase \ -kws_threshold -time yes 该命令将打印许多行,其中一些是具有检测时间和置信度的关键字。您还可以使用 -logfn your_file.log 选项禁用额外日志以避免混乱。

从您的关键字发现结果中计算您遇到了多少误报和漏检。选择误报和漏检最少的阈值。为了获得最佳准确性,最好使用 3-4 个音节的关键词。太短的短语很容易混淆。


推荐阅读