基于树莓派的语音对话机器人
本文实例为大家分享了基于树莓派的语音对话机器人,供大家参考,具体内容如下
第一部分代码
arecord-D"plughw:1"-fS16_LE-r16000-d3/home/pi/Desktop/voice.wav
第二部分代码
#coding:utf-8
importsys
importjson
importurllib2
importbase64
importrequests
reload(sys)
sys.setdefaultencoding(“utf-8”)
defget_access_token():
url=“https://openapi.baidu.com/oauth/2.0/token”
body={
“grant_type”:”client_credentials”,
“client_id”:”此处填写自己的client_id”,
“client_secret”:”此处填写自己的client_secret”,
}
r=requests.post(url,data=body,verify=True)
respond=json.loads(r.text)
returnrespond["access_token"]
defyuyinshibie_api(audio_data,token):
speech_data=base64.b64encode(audio_data).decode(“utf-8”)
speech_length=len(audio_data)
post_data={
“format”:“wav”,
“rate”:16000,
“channel”:1,
“cuid”:“B8-27-EB-BA-24-14”,
“token”:token,
“speech”:speech_data,
“len”:speech_length
}
url="http://vop.baidu.com/server_api"
json_data=json.dumps(post_data).encode("utf-8")
json_length=len(json_data)
#print(json_data)
req=urllib2.Request(url,data=json_data)
req.add_header("Content-Type","application/json")
req.add_header("Content-Length",json_length)
#print("asrstartrequest\n")
resp=urllib2.urlopen(req)
#print("asrfinishrequest\n")
resp=resp.read()
resp_data=json.loads(resp.decode("utf-8"))
ifresp_data["err_no"]==0:
returnresp_data["result"]
else:
print(resp_data)
returnNone
defasr_main(filename,tok):
try:
f=open(filename,“rb”)
audio_data=f.read()
f.close()
resp=yuyinshibie_api(audio_data,tok)
returnresp[0]
exceptException,e:
print“e:”,e
return“识别失败”.encode(“utf-8”)
第三部分代码
#coding:utf-8
importrequests
importjson
importsys
reload(sys)
sys.setdefaultencoding("utf-8")
defTuling(words):
Tuling_API_KEY="此处填写自己的TurlingKEY"
body={"key":Tuling_API_KEY,"info":words.encode("utf-8")}
url="http://www.tuling123.com/openapi/api"
r=requests.post(url,data=body,verify=True)
ifr:
date=json.loads(r.text)
printdate["text"]
returndate["text"]
else:
returnNone
第四部分代码
#coding:utf-8
importsys
importurllib2
importjson
importos
importyuyinshibie
reload(sys)
sys.setdefaultencoding("utf-8")
defyuyinhecheng_api(tok,tex):
cuid="B8-27-EB-BA-24-14"
spd="4"
url="http://tsn.baidu.com/text2audio?tex="+tex+"&lan=zh&cuid="+cuid+"&ctp=1&tok="+tok+"&per=3"
#printurl
#response=requests.get(url)
#date=response.read()
returnurl
deftts_main(filename,words,tok):
voice_date=yuyinhecheng_api(tok,words)
f=open(filename,"wb")
f.write(voice_date)
f.close()
第五部分代码
#coding:utf-8
importos
importtime
importyuyinhecheng
importTurling
importyuyinshibie
tok=yuyinshibie.get_access_token()
switch=True
whileswitch:
os.system('sudoarecord-D"plughw:1"-fS16_LE-r16000-d3/home/pi/Desktop/voice.wav')
time.sleep(0.5)
info=yuyinshibie.asr_main("/home/pi/Desktop/voice.wav",tok)
if'关闭'.encode("utf-8")ininfo:
whileTrue:
os.system('sudoarecord-D"plughw:1"-fS16_LE-r16000-d10/home/pi/Desktop/voice.wav')
time.sleep(10)
info=yuyinshibie.asr_main("/home/pi/Desktop/voice.wav",tok)
if'开启'.encode("utf-8")ininfo:
break
url="http://tsn.baidu.com/text2audio?tex=开启成功&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
os.system('mpg123"%s"'%url)
elif'暂停'.encode("utf-8")ininfo:
url="http://tsn.baidu.com/text2audio?tex=开始暂停&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
os.system('mpg123"%s"'%url)
time.sleep(10)
url="http://tsn.baidu.com/text2audio?tex=暂停结束&lan=zh&cuid=B8-27-EB-BA-24-14&ctp=1&tok="+tok+"&per=3"
os.system('mpg123"%s"'%url)
continue
else:
tex=Turling.Tuling(info)
url=yuyinhecheng.yuyinhecheng_api(tok,tex)
os.system('mpg123"%s"'%url)
time.sleep(0.5)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。