赞
踩
Python中的SpeechRecognition库是一个比较好用的语音识别模块,提供了将语音识别成文字的方法,支持中文识别。
一、SpeechRecognition库的安装
使用pip命令安装即可:
pip install SpeechRecognition
当安装不成功时,可以强制:
pip install --force- SpeechRecognition
二、SpeechRecognition库的导入:
- import speech_recognition as sr
- r = sr.Recognizer()
注意:导入库的名称与安装名称的略有不同。
三、识别麦克风输入的语音:
- # 麦克风录音
- mic = sr.Microphone()
- with mic as source:
- print("请说话...")
- r.adjust_for_ambient_noise(source)
- audioData = r.listen(source)
- # print(type(audioData))
四、或者直接识别语音文件:
- # 识别语音文件
- audioFile = sr.AudioFile("渔父.mp3")
- with audioFile as source:
- audioData = r.record(source)
注意语音文件“渔父.mp3”放在主程序同一文件夹中,故没有指明路径。
不管你是要识别通过麦克风现场输入的语音,还是识别现有的语音文件,最后都是通过
audioData = r.record(source)语句读取到audioData对象中,再通过语音识别模型来识别成文本。
语音识别的模型有很多,如Google Speech API,CMU Sphinx,Vosk等。我们以能线下使用的Vosk模型为例来说明使用方法。
五、安装vosk库
pip install vosk
speechrecognition提供了方便的使用vosk的函数
Recognizer.recognize_vosk(audioData)
虽然我们安装了Vosk的库,但好像其中没有包含Vosk语音模型,还需要单独下载。打开VOSK Models链接,可以看到各种语言的语音模型:
我们要识别中文,当然要下载中文语音模型:
下载各个模型到主程序文件夹下,解压,将想要使用的语音模型文件名改为“model”
我试了42M和1.3G两个语音模型,好像识别效果差不多,唯一的区别是大的语音模型加载时间长。也许是我识别的古文的原因?
六、语音识别
- said = r.recognize_vosk(audioData) # 下载的语音模型解压后须改文件夹名为“model”
- print("you said:", formulateResult(said))
七、运行结果:
我是用现成的语音文件“渔父.mp3”来识别的。根据程序运行顺序,应是先读取“渔父.mp3”到audioData中,再加载同一文件夹下“model”中的Vosk语音模型,然后识别并显示出识别结果。
为了测试识别效果,我又用一段现代文“考场须知.mp3”来测试,识别效果还是好很多:
全文代码:
- import speech_recognition as sr
- import vosk
- import pyaudio
- r = sr.Recognizer()
-
- # model = vosk.Model("model") # 在录音后自动加载,前期加载无效
- # pip install SpeechRecognition
-
- '''
- # 直接录音
- mic = sr.Microphone()
- with mic as source:
- print("请说话...")
- r.adjust_for_ambient_noise(source)
- audioData = r.listen(source)
- # print(type(audioData))
- '''
- # 使用语音文件
- audioFile = sr.AudioFile("考场须知.mp3")
- with audioFile as source:
- audioData = r.record(source)
-
-
- def formulateResult(resu):
- start = resu.index('"', resu.index('"', resu.index('"') + 1) + 1) + 1
- end = resu.index('"', start)
- return resu[start:end]
-
- # pip install vosk;模型网站 https://alphacephei.com/vosk/models,两个模型一大一小,大的也不见得就识别准确
- # said = r.recognizer_instance.recognize_vosk(audioData)
- said = r.recognize_vosk(audioData) # 下载的语音模型解压后须改文件夹名为“model”
- # said = r.rec(audioData)
- print("you said:", formulateResult(said))
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。