Python SpeechRecognition库安装与中文识别使用指南

Python里的SpeechRecognition库是一个很好用的语音识别库,提供了将语音转换成文字的方便的方法。

安装

    使用pip即可

pip install SpeechRecognition

语音

Speechrecognition主要是将一些常见的语音识别api封装成了函数并且直接有调用麦克风的方法,用起来很方便。

最终要传给语音识别函数的是名为AudioData的对象,为了得到AudioData对象,我们有常用的两种办法:用音频文件或直接录音。具体使用如下:

import speechrecognition as sr

r = sr.Recognizer()

直接录音

with sr.Microphone() as source:
    audioData = recognizer_instance.listen(source,time)

此处audioData就是我们要的

用音频文件

audioFile = sr.AudioFile("Path/to/audio/file/audioFile.wav")
with audioFile as source:
   audioData = r.record(source)

此处audioData就是我们要的
r是Recognizer对象,语音输入、识别大部分操作用它进行

with用来创建上下文,这样sr打开麦克风或文件用完后就会关掉

Microphone接受一个整数参数,代表麦克风硬件编号,默认是系统默认


识别

识别这部分主要用speechrecognition封装的api和其他方法,包括:


其中大部分是只能在线使用的,且需要对应的api_key,去获得api_key,你就得注册他们的服务,可能要给钱,比较麻烦。但是其中也有无需注册或付费的和能线下使用的。

具体来说,我们还是需要用Recognizer对象,用它的各种方法(如上图)进行语音识别,以下列举几个好用的。

Google Speech API

Google Speech API 是使用时不必须提供api_key的,但是既然它是google的服务,国内使用是要用魔法的。它使用Recognizer的recognize_google()方法,此方法有两个参数比较重要,AudioData和language,前者是文章上部分提到的,后者是识别的语言,是字符串,形如"zh-CN"或"en-US"或别的。举例,以下这个程序将audio.wav以英语识别并输出:

import speech_recognition as sr

r = sr.Recognizer()

test = sr.AudioFile('/Path/to/audio/audio.wav')

with test as source:
    audio = r.record(source)

said = r.recognize_google(audio, language='en-US')
print("google think you said:",said)

CMU Sphinx

CMU Sphinx是可以线下使用的,但是可能效果稍微差点,且需要一个额外的库:

pip install pocketsphinx

这个额外的库默认只有英语的模型。如果要识别中文语音,需要在 python安装目录\Lib\site-packages\speech_recognition\pocketsphinx-data\ 下,增加一个zh-CN的模型。这个中文模型,如果你按照提示去github

(https://github.com/Uberi/speech_recognition/blob/master/reference/pocketsphinx.rst)

上找,会发现作者把普通话的模型放在谷歌云盘上了,但是别处还是有的: 

https://sourceforge.net/projects/cmusphinx/files/Acoustic%20and%20Language%20Models/Mandarin/

下好之后是不能直接用的,需要改名,把

 文件夹名改成zh_CN

 zh_cn.lm.bin改成language-model.lm.bin

 zh_cn.dic改成pronounciation-dictionary.dict

 子文件夹zh_cn.cd_cont_5000改成acoustic-model 内容不动


改成

总之就是和上一级目录的en-US里的文件格式一样

然后就可以用啦,用法和用google差不多,只是r.recognize_google(audioData, language='en-US')要换成 r.recognize_sphinx(audioData, language='en-US')

Vosk

使用Vosk也是一种线下使用的方法。我个人推荐这个,方便且准确率是不错的。

为了使用vosk, 首先你需要下载vosk的库,直接:

pip install vosk

speechrecognition提供了方便的使用vosk的函数

recognizer_instance.recognize_vosk(audioData)
和上面用sphinx和谷歌类似。但是这样直接运行会报错,缺少vosk的模型,顺着提示,去到

https://alphacephei.com/vosk/models


直接下载需要的就行,一般用有small字样的。  下好的文件解压放在项目同目录下即可,下的什么语言就识别什么语言(其实不太严谨。实际上,recognize_vosk()其实还有一个language参数,但如果填一个en-US然后用中文模型的话也是可以的,按中文识别)

别的

注意,语音识别函数返回的是字符串,但可能不是我们想要的格式,它会返回这样的字符串:

{"text"="你说的内容"}

可能要调整一下,可以写一个函数,比如:

def formulateResult(resu):
    start = resu.index('"', resu.index('"', resu.index('"') + 1) + 1) + 1
    end = resu.index('"', start)
    return resu[start:end]

\^o^/ 

物联沃分享整理
物联沃-IOTWORD物联网 » Python SpeechRecognition库安装与中文识别使用指南

发表评论