基于树莓派的语音对话机器人


Posted in Python onJune 17, 2019

本文实例为大家分享了基于树莓派的语音对话机器人,供大家参考,具体内容如下

第一部分代码

arecord -D "plughw:1" -f S16_LE -r 16000 -d 3 /home/pi/Desktop/voice.wav

第二部分代码

# 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”)

第三部分代码

# 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

第四部分代码

# 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()

第五部分代码

# 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)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python使用两种发邮件的方式smtp和outlook示例
Jun 02 Python
Python装饰器用法实例总结
Feb 07 Python
Python爬虫设置代理IP的方法(爬虫技巧)
Mar 04 Python
Python中.join()和os.path.join()两个函数的用法详解
Jun 11 Python
python skimage 连通性区域检测方法
Jun 21 Python
应用OpenCV和Python进行SIFT算法的实现详解
Aug 21 Python
python线程定时器Timer实现原理解析
Nov 30 Python
Python如何基于Tesseract实现识别文字功能
Jun 05 Python
python实现学生成绩测评系统
Jun 22 Python
Python 实现国产SM3加密算法的示例代码
Sep 21 Python
如何用PyPy让你的Python代码运行得更快
Dec 02 Python
利用python绘制正态分布曲线
Jan 04 Python
PyQt5 QListWidget选择多项并返回的实例
Jun 17 #Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
Jun 17 #Python
使用python进行波形及频谱绘制的方法
Jun 17 #Python
PyQt5图形界面播放音乐的实例
Jun 17 #Python
PyQt5 在label显示的图片中绘制矩形的方法
Jun 17 #Python
PyQt5显示GIF图片的方法
Jun 17 #Python
详解pytorch 0.4.0迁移指南
Jun 16 #Python
You might like
解析Win7 XAMPP apache无法启动的问题
2013/06/26 PHP
推荐一本PHP程序猿都应该拜读的书
2014/12/31 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
php计算年龄精准到年月日
2015/11/17 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
Thinkphp5框架使用validate实现验证功能的方法
2019/08/27 PHP
关于textarea提交的内容无法换行的解决办法
2013/04/09 Javascript
jquery子元素过滤选择器使用示例
2013/06/24 Javascript
javascript搜索框效果实现方法
2015/05/14 Javascript
BootStrap的Datepicker控件使用心得分享
2016/05/25 Javascript
更靠谱的H5横竖屏检测方法(js代码)
2016/09/13 Javascript
AngularJs 动态加载模块和依赖
2016/09/15 Javascript
vue.js 表格分页ajax 异步加载数据
2016/10/18 Javascript
微信小程序 开发之顶部导航栏实例代码
2017/02/23 Javascript
分分钟学会vue中vuex的应用(入门教程)
2017/09/14 Javascript
JQuery实现table中tr上移下移的示例(超简单)
2018/01/08 jQuery
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
vue+element实现打印页面功能
2019/05/20 Javascript
JavaScript this在函数中的指向及实例详解
2019/10/14 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
Java分治归并排序算法实例详解
2017/12/12 Python
Python制作词云图代码实例
2019/09/09 Python
HTML5页面嵌入小程序没有返回按钮及返回页面空白的问题
2020/05/28 HTML / CSS
奥地利顶级内衣丝袜品牌英国站:Wolford英国
2016/08/29 全球购物
GEOX鞋美国官方网站:意大利会呼吸的鞋
2017/07/12 全球购物
巴西美妆购物网站:Kutiz Beauté
2019/03/13 全球购物
这段代码难道不该打印出56吗
2013/02/27 面试题
化学实验员岗位职责
2013/12/28 职场文书
记者岗位职责
2014/01/06 职场文书
yy生日主持词
2014/03/20 职场文书
低碳生活倡议书
2014/04/14 职场文书
高中生第一学年自我鉴定
2014/09/12 职场文书
营销与策划实训报告
2014/11/05 职场文书
高考学习决心书
2015/02/04 职场文书
《珍珠鸟》教学反思
2016/02/16 职场文书
2016大学先进团支部事迹材料
2016/03/01 职场文书