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


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 相关文章推荐
Windows8下安装Python的BeautifulSoup
Jan 22 Python
Python 操作文件的基本方法总结
Aug 10 Python
python取代netcat过程分析
Feb 10 Python
Python对CSV、Excel、txt、dat文件的处理
Sep 18 Python
python for循环输入一个矩阵的实例
Nov 14 Python
django商品分类及商品数据建模实例详解
Jan 03 Python
python爬虫开发之PyQuery模块详细使用方法与实例全解
Mar 09 Python
python使用信号量动态更新配置文件的操作
Apr 01 Python
python实现126邮箱发送邮件
May 20 Python
python中有函数重载吗
May 28 Python
python调用百度AI接口实现人流量统计
Feb 03 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 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
自制汽车收音机天线:收听广播的技巧和方法
2021/03/02 无线电
分享一个PHP数据流应用的简单例子
2012/06/01 PHP
wamp下修改mysql访问密码的解决方法
2013/05/07 PHP
简单分析ucenter 会员同步登录通信原理
2014/08/25 PHP
php通过rmdir删除目录的简单用法
2015/03/18 PHP
详解php的socket通信
2015/08/11 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
highchart数据源纵轴json内的值必须是int(详解)
2017/02/20 PHP
基于Laravel(5.4版本)的基本增删改查操作方法
2019/10/11 PHP
jQuery中[attribute]选择器用法实例
2014/12/31 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
深入学习jQuery Validate表单验证(二)
2016/01/18 Javascript
简单的jQuery banner图片轮播实例代码
2016/03/04 Javascript
使用jQuery 操作table 完成单元格合并的实例
2017/12/27 jQuery
微信小程序开发之自定义tabBar的实现
2018/09/06 Javascript
Vue实现星级评价效果实例详解
2019/12/30 Javascript
vue列表数据发生变化指令没有更新问题及解决方法
2020/01/16 Javascript
vue单应用在ios系统中实现微信分享功能操作
2020/09/07 Javascript
Python文件处理
2016/02/29 Python
python中函数默认值使用注意点详解
2016/06/01 Python
python递归打印某个目录的内容(实例讲解)
2017/08/30 Python
Python爬虫框架scrapy实现downloader_middleware设置proxy代理功能示例
2018/08/04 Python
python pandas库的安装和创建
2019/01/10 Python
python3使用GUI统计代码量
2019/09/18 Python
python中threading开启关闭线程操作
2020/05/02 Python
Python 操作 MySQL数据库
2020/09/18 Python
python判断all函数输出结果是否为true的方法
2020/12/03 Python
html5触摸事件判断滑动方向的实现
2018/06/05 HTML / CSS
会计应聘求职信范文
2013/12/17 职场文书
社会公德演讲稿
2014/05/20 职场文书
乡党政领导班子群众路线教育实践活动个人对照检查材料
2014/09/20 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
2014年依法行政工作总结
2014/11/19 职场文书
学生会辞职信
2015/03/02 职场文书
2015年健康教育工作总结
2015/04/10 职场文书
民间借贷借条如何写
2015/05/26 职场文书