树莓派打造对话机器人 Python(转)
工具列表
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”这样就能够实现对话了
树莓派打造对话机器人 Python(转)的更多相关文章
- 打造一个window桌面应用:在线聊天对话机器人
大家好,我是辰哥~~~ 本文目标:打造一个window桌面应用:在线聊天对话机器人. 今天辰哥教大家做一个在线聊天对话机器人桌面应用,已经打包成exe可执行文件,读者可以直接拿来使用, 先上演示图 聊 ...
- Tensorflow打造聊天机器人
Tensorflow聊天机器人 聊天机器人也叫做对话系统,是一个热门领域.微软.facebook.苹果.google.微信.slack都在上面做了大的投入,这是一波新的试图改变人和服务交流的创业浪潮. ...
- 国内第一本micropython的书出版《机器人Python极客编程入门与实战》
第一本micropython的书<机器人Python极客编程入门与实战>. 购买地址:https://item.taobao.com/item.htm?spm=2013.1.w4018-1 ...
- 自己动手实现智能家居之树莓派GPIO简介(Python版)
[前言] 一个热爱技术的人一定向往有一个科技感十足的环境吧,那何不亲自实践一下属于技术人的座右铭:“技术改变世界”. 就让我们一步步动手搭建一个属于自己的“智能家居平台”吧(不要对这个名词抬杠啦,技术 ...
- 树莓派打造mini广播(FM)系统
树莓派打造mini广播(FM)系统 注意相关法律限制功率大小和频段.,以下只能用于测试目的 github项目: https://github.com/miegl/PiFmAdv 安装: apt-get ...
- 10分钟教你用Python打造天气机器人+关键字自动回复+定时发送
01 前言 Hello,各位小伙伴.自上次我们介绍了Python实现天气预报的功能以后,那个小程序还有诸多不完善的地方,今天,我们再次来完善一下我们的小程序.比如我们想给机器人发“天气”等关键字,它就 ...
- 智能客服 对话实现--python aiml包
利用了python的aiml包进行应答 什么是AIML? AIML是Richard Wallace开发的. 他开发了一个叫A.L.I.C.E(Artificial Linguistics Intern ...
- 树莓派上搭建基于Python+web.py+fastcgi+lighttpd的网站
最近在网上淘了一个树莓派,什么是树莓派?这里是他的官方网站你可以去看看. 简单的说就是一块使用了ARM11的CPU,具有256MB或512MB内存的具有两个USB接口,一个RJ45接口,HDMI输出和 ...
- (Python2)自动对话机器人 代码
dict = { 'hello': 'hello'}flag = 'c'work = Trueprint 'hi,my name is python.'print 'do you want chat ...
随机推荐
- IOS设计模式的六大设计原则之迪米特法则(LOD,Law Of Demeter)
定义 狭义的迪米特法则定义:也叫最少知识原则(LKP,Least Knowledge Principle).如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用.如果其中的一个类需要调用 ...
- 大数据(5) - HDFS中的常用API操作
一.安装java 二.IntelliJ IDEA(2018)安装和破解与初期配置 参考链接 1.进入官网下载IntelliJ IDEA https://www.jetbrains.com/idea/d ...
- Crontab使用方式
Liunx系统的定时任务需要Crontab来完成 一.添加 添加定时脚本 crontab -e 或者直接编辑/etc/crontab文件进行任务添加 vim /etc/crontab 二.格式 三.举 ...
- 第一百七十二节,jQuery,动画效果
jQuery,动画效果 学习要点: 1.显示.隐藏 2.滑动.卷动 3.淡入.淡出 4.自定义动画 5.列队动画方法 6.动画相关方法 7.动画全局属性 一.显示.隐藏 jQuery 中显示方法为:. ...
- 使用Salt-ssh部署Salt-minion之yum安装(一)
一.RPM安装篇 使用salt-ssh功能要求客户端系统python版本2.6+ 1.salt-minion端环境: 系统:CentOS 6.5 64bit python版本:2.6.6 2.配置/e ...
- python 自动化之路 day 18 前端内容回顾、补充/Django安装、创建
前端回顾: 整体: - HTML - CSS - JavaScript - 基本数据类型 - for,while.. - DOM - obj = document.getElementById('.. ...
- 什么是 HTTPS
HTTPS (基于安全套接字层的超文本传输协议 或者是 HTTP over SSL) 是一个 Netscape 开发的 Web 协议. 你也可以说:HTTPS = HTTP + SSL HTTPS 在 ...
- ssl 生成证书
使用OpenSSL生成证书 1.生成RSA密钥的方法 openssl genrsa -des3 -out privkey.pem 2048 这个命令会生成一个2048位的密钥,同时有一个des3方法加 ...
- OpenCV学习笔记五:opencv_legacy模块
opencv_legacy,顾名思义,该模块是用于兼容以前的opencv代码而设立的. 如果你希望用最新的opencv代码和特性,请勿使用该模块.
- python time与datetime.date/datetime模块
https://docs.python.org/3/library/datetime.html 1.用于日期比较大小的方法 方法名 方法说明 用法 __eq__(…) 等于(x==y) x.__eq_ ...