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


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 相关文章推荐
python3.3实现乘法表示例
Feb 07 Python
python使用htmllib分析网页内容的方法
May 08 Python
浅谈python中字典append 到list 后值的改变问题
May 04 Python
python顺序执行多个py文件的方法
Jun 29 Python
解决yum对python依赖版本问题
Jul 05 Python
Python CVXOPT模块安装及使用解析
Aug 01 Python
通过selenium抓取某东的TT购买记录并分析趋势过程解析
Aug 15 Python
python3.7实现云之讯、聚合短信平台的短信发送功能
Sep 26 Python
python set集合使用方法解析
Nov 05 Python
Python random模块的使用示例
Oct 10 Python
如何一键升级Python所有包
Nov 05 Python
python迷宫问题深度优先遍历实例
Jun 20 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
解决中英文字符串长度问题函数
2007/01/16 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
PHP实现的方程求解示例分析
2016/11/11 PHP
PHP实现图片批量打包下载功能
2017/03/01 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
Laravel网站打开速度优化的方法汇总
2017/07/16 PHP
javascript实现仿银行密码输入框效果的代码
2007/12/13 Javascript
帮助避免错误的Javascript陷阱清单
2009/05/31 Javascript
Jquery Select操作方法集合脚本之家特别版
2010/05/17 Javascript
侧栏跟随滚动的简单实现代码
2013/03/18 Javascript
从数据结构的角度分析 for each in 比 for in 快的多
2013/07/07 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
node.js中的fs.lchmodSync方法使用说明
2014/12/16 Javascript
省市区三级联动下拉框菜单javascript版
2015/08/11 Javascript
JavaScript中将数组进行合并的基本方法讲解
2016/03/07 Javascript
Ajax的概述与实现过程
2016/11/18 Javascript
Javascript之深入浅出prototype
2017/02/06 Javascript
jQuery Validate 校验多个相同name的方法
2017/05/18 jQuery
详解vue中的父子传值双向绑定及数据更新问题
2019/06/13 Javascript
Angular之jwt令牌身份验证的实现
2020/02/14 Javascript
详解Vue中Axios封装API接口的思路及方法
2020/10/10 Javascript
Python ORM框架SQLAlchemy学习笔记之安装和简单查询实例
2014/06/10 Python
python中实现指定时间调用函数示例代码
2017/09/08 Python
利用python编写一个图片主色转换的脚本
2017/12/07 Python
如何使用Python标准库进行性能测试
2019/06/25 Python
django 单表操作实例详解
2019/07/30 Python
通过CSS3的object-fit来调整图片适配尺寸的技巧简介
2016/02/27 HTML / CSS
this关键字的含义
2015/04/08 面试题
企业军训感想
2014/02/07 职场文书
宣传部部长竞选演讲稿
2014/04/26 职场文书
绿色环保演讲稿
2014/05/10 职场文书
村委会贫困证明范本
2014/09/17 职场文书
工伤私了协议书范本
2014/11/24 职场文书
2014年工程师工作总结
2014/11/25 职场文书
小学总务工作总结
2015/08/13 职场文书
护士旷工检讨书
2015/08/15 职场文书