python实现中文语音识别有很多种方法。
国内有百度的免费的60s的Python SDK语音识别,我尝试过,感觉识别率不高,而且识别的时间不短,还要求联网。
在github
找了几个关于语音识别的包。
找到一个speech_recognition 支持多个库
我在这里尝试了CMU Sphinx
按照文档里说的要先安装PyAudio
我尝试win和ubuntu系统的安装,win10使用正常,但是ubuntu调用麦克风出错。
安装完speech_recognition之后
我们要在CMU Sphinx语音识别工具包里面下载对应的普通话升学和语言模型。
这三个都要下载。
但是我们要把zh_broadcastnews_64000_utf8.DMP
转化成language-model.lm.bin
。我在看别人的文章的时候,有的人直接用DMP模型
的,但是我没找到相关的例子。
关于转换模型,在pocketsphinx.rst写得挺清楚的
关于sphinx_lm_convert
的命令,win下好像在CMU Sphinx要安装相关的的工具进行转化。
我是在Ubuntu下进行转化的,直接复制上面的命令,然后系统会提示安装相应的包,我们对着提示的包名直接进行安装就行了。就可以转化了。最后得到chinese.lm.bin
。
解压zh_broadcastnews_16k_ptm256_8000.tar.bz2
得到zh_broadcastnews_ptm256_8000
文件夹。然后我的方法是这样的:
找到spee_recognition
文件夹,
然后把原来的en-US改名成en-US-bak,新建一个文件夹en-US
,把解压出来的zh_broadcastnews_ptm256_8000
改成acoustic-model
,把chinese.lm.bin
改成language-model.lm.bin
,把pronounciation-dictionary.dic
改后缀成dict
,复制这三个文件到en-US
里。
然后复制这个例子,这个例子是听完就进行语音识别的,github上面还有其他例子。
# -*- coding: utf-8 -*-
import speech_recognition as sr
# obtain audio from the microphone
r = sr.Recognizer()
with sr.Microphone() as source:
r.adjust_for_ambient_noise(source) # listen for 1 second to calibrate the energy threshold for ambient noise levels
print('say something')
# print("")
audio = r.listen(source)
#
# # recognize speech using Sphinx
try:
print("Sphinx thinks you said " + r.recognize_sphinx(audio))
except sr.UnknownValueError:
print("Sphinx could not understand audio")
except sr.RequestError as e:
print("Sphinx error; {0}".format(e))
但是总体上识别率还是不高,但是在我用的过程中是要比百度的Python SDK要好很多。
看到很多同学想要语音包,我就把相关文件分享出来
https://pan.baidu.com/s/1R9rxwo9mhhXj90etjSBZyA 提取码:zcxn
不过Sphinx
支持定义自己的上传的词汇生成相对应的模型,点击地址