树莓派B+
人体红外线感应模块
内置麦克风摄像头(实测树莓派免驱淘宝链接)
申请API:
百度语音api
图灵api
语音聊天机器人实现原理:当有人来到跟前时--》触发聊天功能,开始以每2s检测录制语音--》通过百度语音api合成文字--》传递给图灵api返回回答信息--》通过百度语音合成播放
【人体感应识别部分Python代码renti.py】
123456789101112131415161718192021222324252627282930313233
#/usr/bin/python#coding:utf-8import RPi.GPIO as GPIOimport timeimport osimport signalimport atexitGPIO.setmode(GPIO.BCM) GPIO_PIR = 14 GPIO.setup(GPIO_PIR,GPIO.IN) # Echojing = 0dong = 0 sum = 0sum1 = 0oldren = 0sleep = 0def ganying():i = 0ok = 0error = 0while i <10:if GPIO.input(GPIO_PIR) == 1 :ok = ok + 1if GPIO.input(GPIO_PIR) == 0 :error = error + 1 time.sleep(0.01)i = i + 1ren = ok/(error+1)return ren
1
GPIO_PIR = 14
为 红外线检测模块与树莓派的针脚,脚本函数返回0表示无人,>0 为有人
【Python语音识别聊天部分robot.py】
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
#/usr/bin/python# -*- coding:utf-8 -*-import sysreload(sys)sys.setdefaultencoding( "utf-8" )import urllibimport urllib2import jsonimport uuidimport base64import osimport timefrom renti import * #获取百度tokenappid=7647466apikey="百度API"secretkey="百度API" baidu_url="h.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apikey + "&client_secret=" + secretkeyy_post=urllib2.urlopen(baidu_url)y_read()=y_post.read()y_token=json.loads(y_read)['access_token']#print y_read#print y_token #------------------function------------- def luyin():os.system('arecord -D plughw:1,0 -c 1 -d 2 1.wav -r 8000 -f S16_LE 2>/dev/null') def fanyi():
#---------------语音识别部分 mac_address="haogeoyes"with open("1.wav",'rb') as f:s_file = f.read() speech_base64=base64.b64encode(s_file).decode('utf-8')speech_length=len(s_file) data_dict = {'format':'wav', 'rate':8000, 'channel':1, 'cuid':mac_address, 'token':y_token, 'lan':'zh', 'speech':speech_base64, 'len':speech_length}json_data = json.dumps(data_dict).encode('utf-8')json_length = len(json_data) asr_server = 'm/server_api' request = urllib2.Request(url=asr_server)request.add_header("Content-Type", "application/json")request.add_header("Content-Length", json_length)fs = urllib2.urlopen(url=request, data=json_data)result_str = fs.read().decode('utf-8')json_resp = json.loads(result_str)if json_resp.has_key('result'):out_txt=json_resp['result'][0]else:out_txt="Null"return out_txt def tuling(b):f=urllib.urlopen("23.com/openapi/api?key="此处为图灵API"&info=%s" % b)f=json.loads(f.read())['text']return f def hecheng(text,y_token):#text="你好我是机器人牛牛很高兴能够认识你"geturl="u.com/text2audio?tex="+text+"&lan=zh&per=1&pit=9&spd=6&cuid=CCyo6UGf16ggKZGwGpQYL9Gx&ctp=1&tok="+y_tokenreturn os.system('omxplayer "%s" >/dev/null 2>&1 '%(geturl))#return os.system('omxplayer "%s" >/dev/null 2>&1 '%(geturl)) def nowtime():return time.strftime('%Y-%m-%d %H:%M:%S ') #---------------main-----------------num=0 #num用来判断是第一次说话,还是在对话过程中first=1 #判断是不是第一说话 当1000次没有人动认为是第一次while True:if ganying()!=0:run=open('run.log','a')if first==0:hecheng("你好,我是牛牛机器人,你可以和我聊天,不过说话的时候你必须靠近话筒近一点,",y_token)hecheng("说点什么吧,2秒钟内说完哦.",y_token)first=1 #为1一段时间就不执行num=0 #从新计数 #print ganying()run.write(nowtime()+"说点神马吧..........."+'\n')print nowtime()+"说点神马吧.........."luyin() #开始录音out=fanyi().encode("utf-8") #翻译文字run.write(nowtime()+"我说:"+out+'\n')print nowtime()+"我说:"+outif out == "Null":text="没有听清楚你说什么"os.system('omxplayer "shenme.wav" >/dev/null 2>&1 ') else:text=tuling(out)hecheng(text,y_token)print nowtime()+"牛牛:"+textrun.write(nowtime()+"牛牛:"+text+'\n')run.close()else:#print ganying()#调试查看是否为0有人没人#print numnum=num+1 #num长时间增大说明没有人在旁边if num >1000:first=0 #0表示第一次说话
万事俱备 运行nohup python robot.py 哈哈就可以脱离屏幕开始愉快的语音聊天啦
下面看看聊天的日志记录吧
后续更新。。。。。。Python如何用语音优雅的控制小车
1、首先安装Python程序推荐3.7
2、下载 pyttsx3库。
3、将需要转换的文本和程序放到一起。
4、运行程序就会朗读文本和保存文本朗读的语音文件。
以下是源代码:
import pyttsx3
withopen ( 'word.txt' , encoding = 'utf-8' ) as obj:
line=obj.readline()
engine=pyttsx3.init()
rate=engine.getProperty( 'rate' )
engine.setProperty( 'rate' , 160 )
volume=engine.getProperty( 'volume' )
engine.setProperty( 'volume' , 0.6 )
engine.say(line)
engine.save_to_file(line, 'abc.mp3' )
engine.runAndWait()
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)