我想将语音识别附加到星号服务器。我想尝试基于 CMU 狮身人面像的离线解决方案。但它的工作非常缓慢。重新识别简单字典(是|否|正常(大约需要 20 秒。我使用以下命令:
pocketsphinx_continuous
-samprate 8000
-dict my.dic
-lm ru.lm
-hmm zero_ru.cd_cont_4000
-maxhmmpf 3000
-maxwpf 5
-topn 2
-ds 2
-logfn log.log
-remove_noise no
-infile 1.wav
是否可以将时间减少到1-2秒,或者我必须看到在线解决方案(谷歌,Yandex等(
你在尝试中有很多错误:
- 您尝试缓慢的连续模型。最好使用ptm模型
- 您可以使用语言模型,同时可以使用简单的语法
- 您运行命令来识别短文件,大多数时候是阅读模型。您需要改用服务器模型预加载。Unimrcp 服务器可以在 1/100 的第二。
- 您从字典中删除单词,而您应该保持原样,您需要限制语言模型/语法中的单词。
正确的命令是:
pocketsphinx_continuous
-samprate 8000
-dict ru.dic
-lm my.jsgf
-hmm zero_ru.cd_ptm_4000
-infile 1.wav
JSGF 应如下所示:
#JSGF V1.0;
grammar result;
public <result> = да | нет | нормально;
运行命令的整个时间是
real 0m0.822s
user 0m0.789s
sys 0m0.028s
实际识别需要 0.02 秒
INFO: fsg_search.c(265): TOTAL fsg 0.02 CPU 0.006 xRT
如果您想知道,谷歌云解决方案需要 2.5-3.5 秒进行 0-5 秒的录制。
我知道的唯一更快的选择是 grpc(流媒体实时(版本的谷歌云,在单词结束后需要 1 秒。
语音识别是非常CPU密集型的任务。可以通过使用更快的 CPU 或使用仅包含几个单词的语音上下文来减少识别时间。但你得到的识别速度提高了 10 倍,这真的很不受欢迎。
ASR和STT是两个不同的东西。
- 自动语音识别允许您将用户语音选择相对于定义的语法(GRXML、JSGF、ABNF(进行匹配。 语音
- 转文本,将任何语音转换为文本(有时会出现一些错误(。
在PocketSphinx的情况下,您可以使用服务器模式并与MRCP连接(检查项目uniMRCP(。更有效的做法是,不为每个识别加载 DATA + 引擎,而是启动服务器一次,然后连接一个或多个 MRCP 客户端。