如何减少CMU Sphinx中的语音识别时间?

时间:2017-03-16 07:05:44

标签: speech-recognition asterisk cmusphinx

我希望将语音识别附加到星号服务器上。我想尝试基于CMU Sphinx的离线解决方案。但它工作得很慢。重新识别简单的字典(是|否|正常)大约需要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秒,或者我必须看到在线解决方案(Google,Yandex等)

3 个答案:

答案 0 :(得分:2)

你的尝试有很多错误:

  • 你尝试连续慢慢的模型。最好使用ptm model
  • 您可以使用语言模型,而您可以使用简单的语法
  • 您运行命令识别短文件,大部分时间都是 采取阅读模型。您需要使用服务器 模型预装。 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

答案 1 :(得分:1)

如果您想知道,谷歌云解决方案需要2.5-3.5秒才能进行0-5秒录制。

我知道的更快的选择是grpc(流式实时)版本中的谷歌云,这需要在单词结束后花费1秒。

语音识别是非常密集的任务。您可以通过使用更快的CPU或仅使用少量单词的语音上下文来减少识别时间。但实际上,你的识别速度要快10倍。

答案 2 :(得分:0)

ASR和STT是两回事。

  • 自动语音识别允许您匹配用户语音选择相对于定义语法(GRXML,JSGF,ABNF)。
  • 语音转文本,将任何语音转换为文本(有时会出现一些错误)。

对于PocketSphinx,您可以使用服务器模式并连接MRCP(检查项目uniMRCP)。 为每次识别加载DATAs +引擎效率更高,但启动服务器一次并与一个或多个MRCP客户端连接。