工具列表

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机器人程序_树莓派打造对话机器人 Python(转)相关推荐

  1. makex机器人程序_收藏!MakeX 机器人挑战赛2018全球最新赛程和赛事手册公布

    原标题:收藏!MakeX 机器人挑战赛2018全球最新赛程和赛事手册公布 5.6 月,我们抓住春天的尾巴, 相继走过苏州.烟台.上海.台湾, 以及浪漫的土耳其: 7.8 月,我们又穿越酷热的盛夏, 在 ...

  2. python小程序_小会计的实用Python小程序(三):人民币大写金额转换器

    大家好,我是Susie. 作为一只财务狗,平时难免要给客户出具一些收款单,在我国收款单上往往会有一个叫"大写金额"的东西,比如收款9,876,543,210.12元,我们就要在收款 ...

  3. python文件编译_我算是白学Python了,现在才知道原来Python是可以编译的

    斌哥说 大家好,我是斌哥. 一说起Python,可能开发者第一时间想到的就是:"Python是一门能快速开发的解释型语言". 没错,Python确实是一门解释型的语言,而对比Jav ...

  4. 树莓派python机器人程序_如何基于树莓派开发机器人

    此前我们收到读者反馈,想听一节关于如何用树莓派开发机器人.树莓派为学习计算机编程教育设计的一种微型电脑,其系统基于Linux, 只有信用卡大小但视频.音频等功能通通皆有,可谓是"麻雀虽小,五 ...

  5. python树莓派经典书籍推荐_树莓派教程书籍推荐:带你玩转Raspberry Pi

    随着<星球大战><复仇者联盟><NASA>等科幻电影的热映,人工制作装置也更加受到人们关注,与这些电影有关的一切设备都显得非常有科技感,格调很高.本期树莓派教程书籍 ...

  6. python舵机控制程序_树莓派PWM控制舵机的两种方式

    PWM控制舵机简介 通常情况下,伺服电机(舵机)是由一个标准的直流系统和一个内部反馈控制装置(一个减速齿轮和电位计)来组成的.伺服电机(舵机)的主要作用是将齿轮轴旋转到一个预定义的方向上.伺服电机(舵 ...

  7. python树莓派串口通信实例_树莓派通过串口发送数据

    可以通过串口登陆树莓派,也可以通过串口向其他主机发送数据.树莓派的串口接受数据科技爱好者博客已经写过,可以参考这篇文章:树莓派与arduino串口通信实践.这篇文章教大家如果通过树莓派的串口发送数据. ...

  8. 树莓派python开发教程_树莓派教程(基于python编程)--入门篇

    原标题:树莓派教程(基于python编程)--入门篇 一:格式化SD卡 SD卡插入读卡器连接电脑,使用SDFormatter对SD卡进行格式化 (重装烧录也要进行着SD卡格式化操作) 二:下载官方镜像 ...

  9. python物联网驱动_树莓派驱动的物联网滴灌系统

    MAKER:Technovation/译:趣无尽 Cherry(转载请注明出处) 本次介绍的是一个由树莓派驱动的物联网滴灌系统,比往期<用树莓派制作一款自动浇灌系统>的功能更加完备. 利用 ...

最新文章

  1. AllUsers And SiteUsers
  2. laravel5.6 数组传递到前端
  3. linux重新安装mysql步骤_Linux下MySQL安装及相关操作过程
  4. Python大数据:jieba分词,词频统计
  5. Java泛型中的通配符?
  6. S3C2440 中断相关寄存器小探
  7. eShopOnContainers 知多少[4]:Catalog microservice
  8. php 降低图像大小,PHP图像重新调整大小
  9. 设计模式——Bridge 桥模式
  10. 苏宁易购:2021年度预计商品采购总金额增至不超120亿元
  11. 【批处理】用netsh管理防火墙示例
  12. LOG4J 按类输出日志
  13. mysql sphinx windows安装_Sphinx在windows下如何安装使用
  14. idea中设置EcmaScript6
  15. powershell过滤查询结果
  16. 【SpringMVC】Resultful风格映射url
  17. 网络同步时钟系统_NTP时间服务器
  18. IP融合网络引领通信变革
  19. 回收垃圾字符的3种方法
  20. html页面刷新回到顶部_HTML5 回到顶部

热门文章

  1. OC中设置图片的毛玻璃效果
  2. Linux应用程序管理及RPM软件包
  3. Android不同版本的区别
  4. 51单片机(四)定时器中断(+数码管——24小时制钟表)
  5. 如何把照片变成手绘动漫化?
  6. 我的程序员人生路——雷军(3)
  7. 软件工程流程图编写软件_如何编写杀手级软件工程简历
  8. vue普通字符串拼接html,vue中如何拼接字符串
  9. vue3.2+ts错误:找不到模块“./App.vue”或其相应的类型声明。ts(2307)
  10. 如何在虾皮上开店?虾皮网开店流程