python使用Sphinx实现中文普通话语音识别

python实现中文语音识别有很多种方法。
国内有百度的免费的60s的Python SDK语音识别,我尝试过,感觉识别率不高,而且识别的时间不短,还要求联网。
github找了几个关于语音识别的包。
找到一个speech_recognition
支持多个库
python使用Sphinx实现中文普通话语音识别_第1张图片
我在这里尝试了CMU Sphinx
按照文档里说的要先安装PyAudio
我尝试win和ubuntu系统的安装,win10使用正常,但是ubuntu调用麦克风出错。
安装完speech_recognition之后
我们要在CMU Sphinx语音识别工具包里面下载对应的普通话升学和语言模型。
python使用Sphinx实现中文普通话语音识别_第2张图片
这三个都要下载。
在这里插入图片描述

但是我们要把zh_broadcastnews_64000_utf8.DMP转化成language-model.lm.bin。我在看别人的文章的时候,有的人直接用DMP模型的,但是我没找到相关的例子。
关于转换模型,在pocketsphinx.rst写得挺清楚的
python使用Sphinx实现中文普通话语音识别_第3张图片
关于sphinx_lm_convert的命令,win下好像在CMU Sphinx要安装相关的的工具进行转化。
我是在Ubuntu下进行转化的,直接复制上面的命令,然后系统会提示安装相应的包,我们对着提示的包名直接进行安装就行了。就可以转化了。最后得到chinese.lm.bin
解压zh_broadcastnews_16k_ptm256_8000.tar.bz2得到zh_broadcastnews_ptm256_8000文件夹。

然后我的方法是这样的:
找到spee_recognition文件夹,
python使用Sphinx实现中文普通话语音识别_第4张图片
然后把原来的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支持定义自己的上传的词汇生成相对应的模型,点击地址
最后我粘贴几个我看过的几篇好的文章地址
简书的
别人的博客
csdn
csdn
csdn
csdn

你可能感兴趣的:(python)