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

How to reduce time of speech recognition in CMU Sphinx?

我想将语音识别附加到星号服务器。我想尝试基于 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 等)

如果你想知道,google云解决方案需要 2.5-3.5 秒的 0-5 秒记录。

我知道的唯一更快的选项是 google grpc(实时流)版本中的云,它在单词结束后需要 1 秒。

语音识别是一项非常cpu 密集型任务。您可以通过使用更快的 CPU 或使用只有几个单词的语音上下文来减少识别时间。但你的识别速度提高 10 倍真的不太可能。

您在尝试中有一些错误:

  • 您尝试使用速度较慢的连续模型。最好用ptm模型
  • 您可以使用语言模型,同时可以使用简单的语法
  • 你运行一个识别短文件的命令,大部分时候是 采取阅读模型。您需要使用服务器而不是 模型预加载。 Unimrcp 服务器可以处理此请求的 1/100 第二.
  • 您从字典中删除了单词,而您应该保持原样,您需要限制语言中的单词 model/grammar。

正确的命令是:

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

ASR 和 STT 是两种不同的东西。

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

在PocketSphinx的情况下,可以使用服务器模式和MRCP连接(查看项目uniMRCP)。 每次识别不加载DATAs+引擎,而是启动一次服务器,连接一个或多个MRCP客户端,效率更高