speech-recognition - PocketSphinx - getHypstr() 在 processRaw 之后为 KeyphraseSearch 返回空
问题描述
尝试edu.cmu.sphinx.pocketsphinx和 processRaw 来检测关键字。
我已经直接使用 getDecoder() 设置了 SpeechRecognizer 的解码器。setKeyphrase (KWS_SEARCH,KEYPHRASE); 首先调用解码器。startUtt (); 然后很少调用带有 PCM 缓冲区切片的processRaw ,然后调用解码器。结束符()。我得到一个关于解码器的空假设。炒作();
为setKeywordThreshold尝试了几个不同的值。没运气。
少了什么东西?
据我了解,在调用processRaw时,最后一个参数full_utt应该是 False 直到调用endUtt,这是正确的吗?
何时应将full_utt设置为 True?以及它如何影响识别?
编辑:需要提一下,起初我试图检测“哦,强大的计算机”短语,这正是使用 SpeechRecognizer 自己的RecognizerThread已正确识别的演示短语, 但在使用processRaw时没有检测到。两次尝试的音频条件相同。
谢谢。
解决方案
少了什么东西?
您错过了教程推荐:
必须调整阈值以平衡误报和漏检。最好的方法是使用预先录制的音频文件。常见的调优过程如下:
进行长时间的录音,其中很少出现关键字和其他一些声音。您可以拍摄电影声音或其他内容。音频的长度应约为 1 小时。对每个关键字使用不同阈值在该文件上运行关键字检测,使用以下命令: pocketsphinx_continuous -infile -keyphrase \ -kws_threshold -time yes 该命令将打印许多行,其中一些是具有检测时间和置信度的关键字。您还可以使用 -logfn your_file.log 选项禁用额外日志以避免混乱。
从您的关键字发现结果中计算您遇到了多少误报和漏检。选择误报和漏检最少的阈值。为了获得最佳准确性,最好使用 3-4 个音节的关键词。太短的短语很容易混淆。
推荐阅读
- javascript - 如何在具有其他类的同时切换具有特定类的元素
- php - Jquery 代码使所有以前的 PHP 语法高亮错误 [Sublime Text 3]
- uikeyboard - 如何从电话型键盘的附件按钮获取操作?
- r - 在数据点上绘制具有置信区间的样条曲线
- c# - 使用 c# 的 CNTK 基本操作以下 python 示例给出错误
- java - Java中套接字的一些问题
- eclipse - 显示 Web 服务和客户端之间的流量
- c++ - 从Linux到Windows交叉编译enet,链接错误
- elasticsearch - 如何在 Elasticsearch 中查找带逗号的数字?
- php - 从 FuelPHP 迁移到 Laravel:一个响应的问题