如何减少 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客户端,效率更高
我想将语音识别附加到星号服务器。我想尝试基于 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客户端,效率更高