工具列表
1. **樹莓派**(型號不要求,本人使用的是3B)
2. **usb麥克風**(某寶有賣,我就不打廣告了) 用來錄音
3. **音響或者喇叭**(某寶也有賣) 用來播放
以上就是需要的工具
對話機器人分成5步
1. 第一步:“錄音”:錄音我用到的是使用了*arecord*
安裝arecord: sudo apt-get install arecord
使用arecord錄音:
`arecord -D "plughw:1" -f S16_LE -r 16000 -d 3 /home/pi/Desktop/voice.wav`
2.第二步:”語音識別”:語音識別自我感覺使用百度的比較不錯,識別率也挺高的 下面附上語音識別代碼
“`
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”)
**識別完成之后呢 我們就要開始第三步了 我們要和機器人對話 那么它一定得回復我們,對吧。為了能夠智能點,我們就用到了圖靈得接口 圖靈真的非常好用 能夠 查天氣語音\講故事\講笑話\ 下面附上第三步的代碼
“`**
3.第三步:“圖靈回復”
# 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
4.第四步:“語音合成” 圖靈回復了之后 我們要讓它播放出來 就用到了百度的語音合成**
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 = “XX-XX-XX-XX-XX-XX”
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()
語音合成之后 我們要播放出來 用到了mpg123 為什么我會用這個呢 因為它可以直接播放網頁上的音頻 非常的好用
安裝mpg123: sudo apt-get install mpg123
安裝好了之后 我后面等用到了再說怎么用 現在先不說
現在錄音 語音識別 語音合成 播放 所需要的工具 代碼都准備好了 下面就開始整合在一起
5.第五步:“整合”
先貼上代碼 我再具體說說
# 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)
首先我用到了錄音工具 先錄一段話 然后用語音識別去識別我說了什么 然后用if來判斷我說的話
里面有沒有關鍵字 如果有關鍵字的話 例如“關閉”那么就會進入一個無限循環 一直來識別我說
的話,一直到識別到了我說 關鍵字“開啟”之后就退出這個循環 回到主循環。為什么我加這個
功能,因為我們總不可能一直把機器人開在那 一直識別我們說的話 然后一直回復我們 對吧。
為了實現這個功能 我想了很久 雖然這個辦法不好 因為它會一直循環識別 但這也是沒有辦法的辦
法了。如果各位有更好的辦法可以聯系我Qq:1281248141。繼續往下 識別了我的話之后呢 圖靈
就會回復我一個信息 然后把這個信息文本提交給語音合成,語音合成就把這段文字給合成好了
然后用上面說到的mpg123來播放這段音頻 mpg123用法mpg123 “url”
這樣就能夠實現對話了