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


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爬虫框架Scrapy安装使用步骤
Apr 01 Python
python定时检查某个进程是否已经关闭的方法
May 20 Python
Python中super的用法实例
May 28 Python
Python创建字典的八种方式
Feb 27 Python
在Django model中设置多个字段联合唯一约束的实例
Jul 17 Python
Django 查询数据库并返回页面的例子
Aug 12 Python
python plotly画柱状图代码实例
Dec 13 Python
matplotlib 对坐标的控制,加图例注释的操作
Apr 17 Python
matplotlib.pyplot.matshow 矩阵可视化实例
Jun 16 Python
利用python中的matplotlib打印混淆矩阵实例
Jun 16 Python
解决python3中os.popen()出错的问题
Nov 19 Python
python 用opencv实现霍夫线变换
Nov 27 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
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
php实现文件下载功能的几个代码分享
2014/05/10 PHP
PHP 实现页面静态化的几种方法
2017/07/23 PHP
PHP开发之归档格式phar文件概念与用法详解【创建,使用,解包还原提取】
2017/11/17 PHP
List Information About the Binary Files Used by an Application
2007/06/18 Javascript
JQuery for与each性能比较分析
2013/05/14 Javascript
如何将php数组或者对象传递给javascript
2014/03/20 Javascript
模拟用户点击弹出新页面不会被浏览器拦截
2014/04/08 Javascript
JS兼容浏览器的导出Excel(CSV)文件的方法
2014/05/03 Javascript
jquery append()方法与html()方法的区别及使用介绍
2014/08/01 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
基于javascript的Form表单验证
2016/12/29 Javascript
vue使用$emit时,父组件无法监听到子组件的事件实例
2018/02/26 Javascript
React+Antd+Redux实现待办事件的方法
2019/03/14 Javascript
如何进行微信公众号开发的本地调试的方法
2019/06/16 Javascript
微信小程序实现拼图小游戏
2020/10/22 Javascript
[03:35]2018年度DOTA2最佳辅助位选手5号位-完美盛典
2018/12/17 DOTA
python读取浮点数和读取文本文件示例
2014/05/06 Python
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
如何在Python函数执行前后增加额外的行为
2016/10/20 Python
python中类和实例如何绑定属性与方法示例详解
2017/08/18 Python
python利用rsa库做公钥解密的方法教程
2017/12/10 Python
解决python 读取excel时 日期变成数字并加.0的问题
2019/10/08 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
pycharm配置python 设置pip安装源为豆瓣源
2021/02/05 Python
哄娃神器4moms商店:美国婴童用品品牌
2019/03/07 全球购物
计算机应届毕业生自荐信范文
2014/02/23 职场文书
庐山导游词
2015/02/03 职场文书
创先争优个人总结
2015/03/04 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
四大名著读书笔记
2015/06/25 职场文书
互联网的下一个风口:新的独角兽将诞生
2019/08/02 职场文书
vue+element ui实现锚点定位
2021/06/29 Vue.js
关于对TypeScript泛型参数的默认值理解
2022/07/15 Javascript
MySQL索引失效场景及解决方案
2022/07/23 MySQL