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 是使用时不必须提供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是可以线下使用的,但是可能效果稍微差点,且需要一个额外的库:
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的库,直接:
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^/