python实现中文语音识别有很多种方法。

国内有百度的免费的60s的Python SDK语音识别,我尝试过,感觉识别率不高,而且识别的时间不短,还要求联网。

github找了几个关于语音识别的包。

找到一个speech_recognition 支持多个库

中文语音AI智能识别python 中文 语音识别_Sphinx


我在这里尝试了CMU Sphinx

按照文档里说的要先安装PyAudio

我尝试win和ubuntu系统的安装,win10使用正常,但是ubuntu调用麦克风出错。

安装完speech_recognition之后

我们要在CMU Sphinx语音识别工具包里面下载对应的普通话升学和语言模型。

中文语音AI智能识别python 中文 语音识别_python_02


这三个都要下载。

中文语音AI智能识别python 中文 语音识别_中文语音AI智能识别python_03

但是我们要把zh_broadcastnews_64000_utf8.DMP转化成language-model.lm.bin。我在看别人的文章的时候,有的人直接用DMP模型的,但是我没找到相关的例子。

关于转换模型,在pocketsphinx.rst写得挺清楚的

中文语音AI智能识别python 中文 语音识别_python_04


关于sphinx_lm_convert的命令,win下好像在CMU Sphinx要安装相关的的工具进行转化。

我是在Ubuntu下进行转化的,直接复制上面的命令,然后系统会提示安装相应的包,我们对着提示的包名直接进行安装就行了。就可以转化了。最后得到chinese.lm.bin

解压zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夹。然后我的方法是这样的:

找到spee_recognition文件夹,

中文语音AI智能识别python 中文 语音识别_语音识别_05


然后把原来的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支持定义自己的上传的词汇生成相对应的模型,点击地址