树莓派打造对话机器人 Python(转)

工具列表

 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”这样就能够实现对话了

时间: 2024-10-05 04:45:16

树莓派打造对话机器人 Python(转)的相关文章

Tensorflow打造聊天机器人

Tensorflow聊天机器人 聊天机器人也叫做对话系统,是一个热门领域.微软.facebook.苹果.google.微信.slack都在上面做了大的投入,这是一波新的试图改变人和服务交流的创业浪潮.例如operator x.ai,chatfuel,以及一些库例如botkit,微软的bot开发库. 许多公司都希望机器人可以自然对话,和人类没有区别.并且许多对外声明说用了NLP和深度学习技术来实现这个目标.但围绕AI这些天花乱坠的宣传有时候也很难区别现实和虚化的差别. 我要在这个系列文章里将一些构

(推荐)叮当——中文语音对话机器人

叮当是一款可以工作在 Raspberry Pi 上的开源中文语音对话机器人/智能音箱项目,目的是让中国的Hacker们也能快速打造个性化的智能音箱. github地址:https://github.com/wzpan/dingdang-robot 主要是github上已经提供了打包好的镜像文件,只需少量操作,烧录进入sd卡即可使用体验,推荐给大家! 特性 叮当包括以下诸多特性: 模块化.功能插件.语音识别.语音合成.对话机器人都做到了高度模块化,第三方插件单独维护,方便继承和开发自己的插件. 微

树莓派-语音聊天机器人+语音控制引脚电平高低

最近和几位本学院的研究生师兄师姐参加研究生电子设计大赛,自己也来折腾下之前没有搞完的语音控制小车.恰巧自己负责的是语音控制这部分,折腾了几天也差不多搞定啦…把自己的折腾套路总结一下,给一起折腾的小伙伴点经验之谈… 一.配置树莓派 我们这次使用的最新的树莓派3,镜像直接是官网下载的Raspbian.这也是让我感觉最有树莓派感觉的一个系统.主要是sudo raspi-config的配置. 1和2最好都是设置一下,然后3看自己爱好吧:4的里面我都是重新设置的,包括时区.语言和字体.字体最好下载(apt

图灵机器人 python 试玩

看一个小伙伴分享的图灵机器人Python玩法,觉得挺有意思的 linux上,可以尝试更简单的方法.比如说使用curl命令 curl "http://www.tuling123.com/openapi/api?key=申请到的key&info=聊天内容"比如:curl "http://www.tuling123.com/openapi/api?key=fskfjaslfjals&info=hello" #!/usr/bin/python # -- co

智能对话机器人实战视频教程下载

智能对话机器人实战视频教程网盘地址:https://pan.baidu.com/s/1Om9-VgBSLU7aY75B0d3YIg 提取码: e46v备用地址(腾讯微云):https://share.weiyun.com/5EAhsZ0 密码:xz9swp备用地址(天翼云):https://cloud.189.cn/t/yABvaybEFfEr (访问码:8464) 一.课程特色:1.案例驱动:三大智能对话机器人需求场景,三个完整案例: 2.源码操作:内含完整程序源码和数据集: 3.实战指引:覆

用机器学习打造聊天机器人(七) 总结篇

本文是用机器学习打造聊天机器人系列的最后一篇啦,请耐心看完吧. 本系列文章展示了一个聊天机器人的打造过程,现阶段更高级的聊天机器人会加入更多语料,更多意图模式,用更好的算法,以及其他更多的小技巧,比如: 我们可以结合上一个系列<手把手教你做命名实体识别>中介绍的bert模型,来代替这里的词向量模型,让句向量更好的表示出原句子中各词汇之间的相关性,比如"我喜欢苹果"和"我喜欢苹果笔记本",对于采用word2vec的方式来构建向量特征来说,对"苹果

用机器学习打造聊天机器人(五) 接入篇

本文是用机器学习打造聊天机器人系列的第五篇,在特性介绍中提到过,我们采用非侵入式设计,通过几个简单的 API 就可以接入聊天机器人到其他项目中,下面来看看具体步骤. 接入步骤 提供符合要求的领域问答语料的 txt 文件,按照意图类型划 分成不同的txt文件,替换本引擎自带的txt语料文件,txt语料文件示例如下: 可以看到,闲聊的语料文件以QA_talk-开头,业务类的以QA_sf_开头,内容的格式就如图中所示,每个问题占一行,每个回答占一行. 我们可以参考接口说明中的接口在自己的项目中开发自己

青岛欲打造国家级机器人产业基地

7月7日到9日,第二届国际仿真机器人奥林匹克大赛暨TRCC第五届全国机器人创意设计大赛总决赛将在青岛举行.记者从电博会组委会了解到,这是该项赛事首次将决赛放在青岛举办,届时将有来自全世界100个国家的机器人在青岛进行最后的角逐.电博会第二届机器人大赛也将同期举办,为青岛本地机器人企业搭建与外部交流的平台.电博会相关负责人介绍,作为消费电子行业的风向标,2016 SINOCES积极响应这一趋势,将在今年展会搭建智能机器人特色展区,集中展现近年来海内外智能机器人制造领域的发展变化和突出成就,与此次全

树莓派打造无线扫描仪

0x00 什么是SDR? "软件无线电"(Software Defined Radio -- SDR). 实际上软件无线电技术的研究和开发已经有几十年的历史了,最初源于美军的多制式电台项目. 目前我们日常使用的移动通信系统中其实已经大量使用软件无线电技术, 比如基站中的信号处理大量的使用可编程的FPGA和DSP完成, 比如手机当中的基带处理器也越来越多的采用软解调的方法(少数运算量特别大实时性要求特别高的模块除外,比如turbo解码器,扩频相关器等,这些模块往往在基带处理器中嵌入一些高