本文实例为大家分享了基于树莓派的语音对话机器人,供大家参考,具体内容如下
第一部分代码
1
|
arecord - d "plughw:1" - f s16_le - r 16000 - d 3 / home / pi / desktop / voice.wav
|
第二部分代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
|
# coding: utf-8
import sys
import json
import urllib2
import base64
import requests
reload (sys)
sys.setdefaultencoding(“utf - 8 ”)
def get_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)
return respond[ "access_token" ]
def yuyinshibie_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("asr start request\n")
resp = urllib2.urlopen(req)
#print("asr finish request\n")
resp = resp.read()
resp_data = json.loads(resp.decode( "utf-8" ))
if resp_data[ "err_no" ] = = 0 :
return resp_data[ "result" ]
else :
print (resp_data)
return none
def asr_main(filename,tok):
try :
f = open (filename, “rb”)
audio_data = f.read()
f.close()
resp = yuyinshibie_api(audio_data,tok)
return resp[ 0 ]
except exception,e:
print “e:”,e
return “识别失败”.encode(“utf - 8 ”)
|
第三部分代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
# coding: utf-8
import requests
import json
import sys
reload (sys)
sys.setdefaultencoding( "utf-8" )
def tuling(words):
tuling_api_key = "此处填写自己的turling key"
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)
if r:
date = json.loads(r.text)
print date[ "text" ]
return date[ "text" ]
else :
return none
|
第四部分代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
# coding: utf-8
import sys
import urllib2
import json
import os
import yuyinshibie
reload (sys)
sys.setdefaultencoding( "utf-8" )
def yuyinhecheng_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"
#print url
#response = requests.get(url)
#date = response.read()
return url
def tts_main(filename,words,tok):
voice_date = yuyinhecheng_api(tok,words)
f = open (filename, "wb" )
f.write(voice_date)
f.close()
|
第五部分代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
# coding: utf-8
import os
import time
import yuyinhecheng
import turling
import yuyinshibie
tok = yuyinshibie.get_access_token()
switch = true
while switch:
os.system( 'sudo arecord -d "plughw:1" -f s16_le -r 16000 -d 3 /home/pi/desktop/voice.wav' )
time.sleep( 0.5 )
info = yuyinshibie.asr_main( "/home/pi/desktop/voice.wav" ,tok)
if '关闭' .encode( "utf-8" ) in info:
while true:
os.system( 'sudo arecord -d "plughw:1" -f s16_le -r 16000 -d 10 /home/pi/desktop/voice.wav' )
time.sleep( 10 )
info = yuyinshibie.asr_main( "/home/pi/desktop/voice.wav" ,tok)
if '开启' .encode( "utf-8" ) in info:
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" ) in info:
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 )
|
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/Won9yIFan/article/details/84939364