目前常用的python语音识别API
- apiai
- assemblyai
- google-cloud-speech
- pocketsphinx
- SpeechRecognition
- watson-developer-cloud
- wit
像wit和apiai这些python包提供的功能已经超出了基本的语音识别的范围。所以,推荐使用SpeechRecognition这个包,因为使用更简单。并且这个包默认提供Google Web Speech API密钥。
Python SpeechRecognition支持以下音频文件格式
- WAV- PCM/LPCM format
- AIFF
- AIFF-C
- FLAC
注:文件格式很重要,不然极易出错。
准备工作
使用pip工具,安装 SpeechRecognition包
在命令行中输入:
pip install SpeechRecognition
为了测试安装是否成功,可以在python解释器中输入以下代码,检查包的版本:
import speech_recognition as sr
sr.__version__
准备音频文件
可以自己准备,也可以使用网络上现成的文件:http://www.voiptroubleshooter.com/open_speech/american.html
在python中读取音频文件
首先,我们创建一个Recognizer类的实例。
r=sr.Recognizer()
有Recognizer,每个API都有一个单独的方法:
- recognize_bing()- Microsoft Bing Speech
- recognize_google()- Google Web Speech API
- recognize_google_cloud()- Google Cloud Speech
- recognize_houndify()-Houndify
- recognize_ibm()- IBM Speech to Text
- recognize_sphinx- CMU Sphinx
- recognize_wit()- Wit.ai
用record()采集数据
可以用context manager来打开音频文件并且读取其中的内容,然后记录到AudioData实例中去。
demo=sr.AudioFile(‘demo.wav’)
with demo as source:
audio=r.record(source)
进一步确认操作正确:
>>> type(audio)
><class ‘speech_recognition.AudioData’>
识别Audio数据对象中的语音信息
可以用recognize_google()来生成语音文本。
r.recognize_google(audio)
音频切片
如果你只想读取音频文件的一部分,你可以更改参数offset,来申明什么地方开始,以及读取多长时间。
with demo as source:
audio=r.record(source,offset=4,duration=3
r.recognize_google(audio)
处理噪音
噪音难以避免。adjust_for_ambient_noise()方法可以在一定程度上解决这个问题。
with demo as source:
r.adjust_for_ambient_noise(source) audio=r.record(source,offset=2.5,duration=3
r.recognize_google(audio)
我们可以提供一个参数,来设定程序采集音频信息的时长,这样可以校准recognizer。下面是一个例子,虽然参数差异仅仅为0.005,但是结果却完全不同。
>>> with demo as source:
r.adjust_for_ambient_noise(source,duration=0.51)
audio=r.record(source,offset=2.5,duration=3)
>>> r.recognize_google(audio)
‘National thanks’
>>> with demo as source:
r.adjust_for_ambient_noise
(source,duration=0.515)
audio=r.record(source,offset=2.5,duration=3)
>>> r.recognize_google(audio)
‘clear the sheet’
实时语音识别
为了能够识别自己的声音,需要使用PyAudio包来调用设备麦克风。可以用pip安装。
pip install PyAudio
也可以从网上下载:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#pyaudio然后再:
pip install [file_name_for_binary]
Microphone类
就像前文音频文件的Recognizer一样,我们需要实时音频数据的Microphone类。重启pyhton解释器:
import speech_recognition as sr
r=sr.Recognizer()
然后创建Microphone类的实例:
mic=sr.Microphone()
使用list_microphone_names()方法可以看所有可以使用的microphone
sr.Microphone.list_microphone_names()
同时也可以选择一个特定的麦克风:
mic=sr.Microphone(device_index=3)
但是此时我们选择默认的设置。
抓取麦克风输入文件
用listen()方法可以抓取麦克风中的音频:
with mic as source:
audio=r.listen(source)
现在可以对着你的麦克风说话了,当程序检测不到声音,那么在解释器里面会出现 (>>>)表示声音采集结束。
r.recognize_google(audio)
导致error发生的语音
当python无法将这些语音与文本匹配,那么可能会返回UnknownValueError。
>>>r.recognize_google(audio)
Traceback (most recent call last):
File “<pyshell#7>”, line 1, in <module>
r.recognize_google(audio)
File “C:\Users\Ram\AppData\Local\Programs\Python\Python37–32\lib\site-packages\speech_recognition\__init__.py”, line 858, in recognize_google
if not isinstance(actual_result, dict) or len(actual_result.get(“alternative”, [])) == 0: raise UnknownValueError()
speech_recognition.UnknownValueError
像咳嗽声,呕吐声,拍手声等都可能导致这些情况发生。