百度语音识别API是可以免费试用的,通过百度账号登录到百度智能云,在语音技术页面创建的应用,生成一个语音识别的应用,这个应用会给你一个APIKey和一个Secret Key,如图14.1所示。
我们在自己的程序中用 API Key 和 Secret Key 这两个值获取 Koken,然后再通过 Token 调用语音识别接口,因此需要经过两次URL请求才能实现语音识别功能,第一次请求获得 Token,第二次请求调用语音识别功能。
1、创建语音操作类(create_audio.py)
为了使得音频操作代码可以通用和复用,新建一个文件create_audio.py,在文件中生成一个音频操作类TestAudio,这个类实现对音频参数的初始化,录音和保存音频文件等功能。样例代码如下所示。
# 调用百度语音识别
import wave
import pyaudio
class TestAudio:
# 初始化
def __init__(self,fname):
self.chunk=2048
self.samepling_rate=16000
self.sampwidth=2
self.channels=1
self.record_time=6
self.filename=fname
# 把音频保存到文件,这里data为列表类型
def save_file(self,data):
wf=wave.open(self.filename,'wb')
wf.setnchannels(self.channels)
wf.setsampwidth(self.sampwidth)
wf.setframerate(self.samepling_rate)
wf.writeframes(b"".join(data))
wf.close()
# 进行录音的函数
def record(self):
pa=pyaudio.PyAudio()
stream=pa.open(format=pyaudio.paInt16,channels=self.channels,rate=self.samepling_rate,input=True,frames_per_buffer=self.chunk)
print("开始录音,请讲话。。。")
mybuf=[]
for i in range(0,int(self.samepling_rate/self.chunk*self.record_time)):
data =stream.read(self.chunk)
mybuf.append(data)
stream.stop_stream()
stream.close()
pa.terminate()
print("录音结束")
self.save_file(mybuf)
if __name__=="__main__":
test=TestAudio('test.wav')
test.record()
2、语音识别函数(主函数)
注意:更改APIKey 和 SecretKey 值
# 调用百度语音识别
import requests
import base64
import CreateTestAudio
vhttp="https:// "
vurl="openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=%s&client_secret=%s"
APIKey="xx"
SecretKey="xxx"
base_url=vhttp+vurl%(APIKey,SecretKey)
# 获取token
def getToken(base_url):
res=requests.post(base_url)
return res.json()['access_token']
#
def SpeechTOText(speech_data,token,dev_pid=1537):
FILETYPE='wav'
RATE=16000
CHANNEL=1
CUID='12345678PYTHON12345678'
SPEECH=base64.b64decode(speech_data).decode('utf-8')
data={'format':FILETYPE,'rate':RATE,'channel':CHANNEL,'cuid':CUID,'len':len(speech_data),'speech':SPEECH,'token':token,'dev_pid':dev_pid}
# 拼接URL地址
url=vhttp+'vop.baidu.com/server_api'
headers={'Content-Type':'application/json'}
print('正在识别。。。')
r=requests.post(url,json=data,headers=headers)
Result=r.json()
if 'result' in Result:
return Result['result'][0]
else:
return Result
def get_audio(file):
with open(file,'rb') as f:
data=f.read()
return data
#主函数
if __name__=='__main__':
message=input("按任意键开始录入")
test =CreateTestAudio('test.wav')
test.record()
TOKEN =getToken(base_url)
speech =get_audio('test.wav')
result=SpeechTOText(speech,TOKEN,1537)
print(result)
2、测试
在命令行终端启动程序,根据提示说一段话,等待程序执行,程序返回这段话的内容,说明语音识别程序运行成功,如下所示。