基于百度语音和图灵的交互机器人

1.准备工作:

(1)硬件:树莓派3b   usb麦克风   音响

(2)  软件:百度语音api   图灵机器人api  python2或3(树莓派自带)mplayer

申请一个百度语音账号,创建一个新应用,并获取相应的Key,截图如下:

注意:每天请求次数有限制,如果不够可以自己向百度申请,免费的

申请一个图灵机器人账号,创建新应用,并获取相应的api,截图如下:

用命令行 sudo apt-get install mplayer安装mplayer

在安装python的一些第三方库时可能会出现各种各样的问题,我百度了好多解决方法,感觉最好用的就是 sudo apt-get install python-库名,这里默认是python2,如果是3的话,把python换成python3即可。

软硬件到这里基本上就OK了

2.初步测试

(1)图灵机器人测试,从一个能够进行文本交互的机器人开始,代码如下:

 1 import urllib,urllib2
 2 import json
 3
 4 def gethtml(url):
 5     page = urllib2.urlopen(url)
 6     html = page.read()
 7     return html
 8
 9 if __name__==‘__main__‘:
10     key = ‘**********‘
11     api = ‘**********‘
12     info = raw_input(‘Me:’)
13     request = api + info
14     response = gethtml(request)
15     dic_json = json.loads(response)
16     print‘Robot:‘.decode(‘utf-8‘)+dic_json[‘text‘]

  测试结果机器人还不是太傻,具有初步的撩人功能,附上我们的聊天记录:

(2) 百度语音识别测试,可以自行搜索百度文档,里面有详细的代码样例,代码如下;

import wave
import urllib,urllib2,pycurl
import base64
import json

def get_token():
    apiKey=‘**********‘
    secreKey=‘**********‘
    auth_url="https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credential&client_id="+apiKey+"&client_secret="+secretKey
    res = urllib2.urlopen(auth_url)
    json_data = res.read()
    rerurn json.loads(json_data)[‘access_token‘]

def dump_res(buf):
    print (buf)

def use_cloud(token):
    fp = wave.open(‘niu.wav‘,‘rb‘)
    nf = fp.getnframes()
    f_len = nf*2
    audio_data = fp.readframs(nf)
    cuid = "******"
    srv_url = ‘http://vop.baidu.com/server_api‘+‘?cuid=‘+cuid+‘&token=‘+token
    http_header=[‘Content-Type:audio/pcm;rate=8000‘,‘Content-Length: %d‘%f_len]
    c=pycurl.Curl()
    c.setopt(pycurl.URL,str(srv_url))
    c.setopt(c.HTTPHEADER,http_header)
    c.setopt(c.POST,1)
    c.setopt(c.CONNECTTIMEOUT,30)
    c.setopt(c.TIMEOUT,30)
    c.setopt(c.WRUTEFUNCTION,dump_res)
    c.setopt(c.POSTFIELDS,audio_data)
    c.setopt(c.POSTFIELDSIZE,f_len)
    c.perform()

if __name__==‘__main__‘:
    token=get_token()
    use_cloud(token)

  测试结果发现基本上都能识别准确,但偶尔会因未对噪音进行处理而出现偏差,上图:

 (3)  麦克风和音响测试

  用命令行 sudo arecord -D "plughw;1,0" 5 niu.wav录制一段5秒的音频

  用命令行 omxplayer -o local niu.wav即可播放刚刚录制的音频

  注意:树莓派支持3.5mm音频输出和HDMI音频输出,可以通过config界面进行控制,具体方法可自已解决

如果以上测试都成功的话,下面就很简单了,只是把上述内容整合一下即可

3.源代码

import jsonimport wave,urllib,urllib2,pycurl,base64
import os,time
from aip import AipSpeech

def gethtml(url):
     page = urllib2.urlopen(url)
     html = page.read()
     return html

def get_token():
    apiKey=‘**********‘
    secreKey=‘**********‘
    auth_url="https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credential&client_id="+apiKey+"&client_secret="+secretKey
    res = urllib2.urlopen(auth_url)
    json_data = res.read()
    rerurn json.loads(json_data)[‘access_token‘]

def dump_res(buf):
    global duihua
    print(buf)
    a=eval(buf)
    if a[‘err_msg‘]==‘success.‘:
        duihua =a[‘result‘][0]
        print duihua

def use_cloud(token):
    fp = wave.open(‘niu.wav‘,‘rb‘)
    nf = fp.getnframes()
    f_len = nf*2
    audio_data = fp.readframs(nf)
    cuid = "******"
    srv_url = ‘http://vop.baidu.com/server_api‘+‘?cuid=‘+cuid+‘&token=‘+token
    http_header=[‘Content-Type:audio/pcm;rate=8000‘,‘Content-Length: %d‘%f_len]
    c=pycurl.Curl()
    c.setopt(pycurl.URL,str(srv_url))
    c.setopt(c.HTTPHEADER,http_header)
    c.setopt(c.POST,1)
    c.setopt(c.CONNECTTIMEOUT,30)
    c.setopt(c.TIMEOUT,30)
    c.setopt(c.WRUTEFUNCTION,dump_res)
    c.setopt(c.POSTFIELDS,audio_data)
    c.setopt(c.POSTFIELDSIZE,f_len)
    c.perform()

def answer():
    key = ‘********‘
    api =‘http://www.tuling123.com/openapi/api?key=‘+key+‘&info=‘
    info =duihua
    request = api+info
    response = gethtml(request)
    return response
def getmp3():   APP_ID=‘*********‘    APP_KEY=‘********‘    SECRET_KEY=‘*********‘  client=AipSpeech(APP_ID,APP_KEY,SECRET_KEY)    result = client.sysnthesis(a,‘zh‘,1,{‘vol‘:5,})  if not isinstance(result,dict):    with open(‘niu.mp3‘,‘wb‘) as f:     f.write(result)
while True:   print‘Speaker:‘   os.ayatem(‘sudo arecord -D "plughw:1,0" -f S16_LE -d 4 -r 8000 niu.wav‘)   token =get_token()   use_cloud(token)    dic_json = json.loads(answer())    a=dic_json[‘text‘].encode(‘utf-8‘)  getmp3()
   os.system(‘mplayer niu.mp3‘)
   time.sleep(0.5)

4.总结 

  总的来说,中间没有遇到太多复杂问题,而且最后的实测效果还是不错,但是仍然有反应慢,识别不准等问题需要进一步解决,另外还需要加上语音唤醒,以及语音结束等相关功能,代码有错的地方希望大家能够多多指正。(测试视频就不发了,因为我没有公众平台,尴尬,不过是有的喔,嘿嘿,想要的我可以私发)

原文地址:https://www.cnblogs.com/niuyisan/p/8430985.html

时间: 2024-10-11 06:31:15

基于百度语音和图灵的交互机器人的相关文章

基于讯飞语音的识别和图灵机器人的具体智能反馈,百度语音的播放,原因是讯飞语音的free版似乎播放做了限制

https://github.com/1158114251/-Intelligent-speech-robot https://www.kancloud.cn/turing/web_api/522992 图灵网站:https://www.kancloud.cn/turing/web_api/522992 apikey:820c4a6ca4694063ab6002be1d1c63d3 编码方式 UTF-8(调用图灵API的各个环节的编码方式均为UTF-8) 接口地址 http://openapi.

基于百度AI开放平台的人脸识别及语音合成

基于百度AI的人脸识别及语音合成课题 课题需求 (1)人脸识别 在Web界面上传人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口识别人脸特征,接收平台返回的人员年龄.性别.颜值等信息,将信息返回到Web界面进行显示. (2)人脸比对 在Web界面上传两张人的照片,后台使用Java技术接收图片,然后对图片进行解码,调用云平台接口比对照片信息,返回相似度. (3)语音识别 在Web页面上传语音文件,判断语音文件格式,如果不是wav格式进行转码处理,然后调用平台接口进行识别,

AI百度接口以及图灵接口的使用

百度AI接口 AI智能种类方向 耳朵 = 倾听 = 麦克风 = 语音识别 ASR:Automatic Speech Recognition 嘴巴 = 诉说 = 扬声器 = 语音合成 TTS:Text To Speech 眼睛 = 观察 = 摄像头 = 图像识别 IR:Image Recognition 思考 = 理解 = 逻辑处理 = 自然语言处理:NLP Natural Language Processing 更多种类方向详见百度AI开放平台文档:https://ai.baidu.com/do

基于科大讯飞语音云windows平台开发

前记: 前段时间公司没事干,突发奇想想做一个语音识别系统,看起来应该很简单的,但做起来却是各种问题,这个对电气毕业的我,却是挺为难的.谷姐已经离我们而去,感谢度娘,感谢CSDN各位大神,好歹也做的是那么回事了,虽然还是不好用,但基本功能实现了. 该软件使用VS2008C++/CLR开发,由于科大讯飞提供的是C的API接口,结果到这边就是各种不兼容,CLR是基于托管堆运行的,而这个API有是非托管堆的,使用了各种指针,原本打算使用C#来做,最后门外汉的我也没能做到C#和C指针完美结合,真怀恋单片机

树莓派 百度语音 智能家居小助手

大体思路(程序写的有点乱,只是大体框架,还有好多坑留着慢慢填) 树莓派3通过USB声卡录音 ==>> 录音传给百度语音识别 ==>> 返回txt文本 ==>> IF TXT=操作智能家居的语句 THEN 执行相应动作 ELSE 将txt文本提交tuling123 ==>> 返回txt ==>> 传给百度语音文字转语音==>> 树莓派播放 import uuid import base64 import json import urll

Android 通过调用系统,如接口 谷歌语音、百度语音、科大讯飞语音等语音识别方法对话框

现在app在发展过程中会集成一些语音识别功能,不具有其自己的显影剂一般正在开发的语音识别引擎,所以在大多数情况下,它是选择一个成熟的语音识别引擎SDK集成到他们的app在. 平时,这种整合被分成两个,一种是直接调用SDK开发商设计了弹出框.互界面:另一种是开发人员仅仅利用SDK提供的语音识别服务,自己开发一个属于自己的交互设计. 本文介绍最简单直接调起弹出框的方法. 首先.測试机须要安装如谷歌语音.百度语音.讯飞语音等产品的语音软件,这时能够在系统设置界面的语言与输入处找到相关的语音识别功能列表

Android 通过调用系统接口使用如 谷歌语音、百度语音、讯飞语音等语音识别对话框的方法

现在app的开发进程会集成一些语音识别功能,而一般开发者是不具备自己开发一套语音识别引擎的,因此大多数情况是选择一个已经成熟的语音识别引擎SDK集成到自己的app中. 通常情况下,这种集成分两种,一种是直接调用SDK为开发者设计好的弹出框,开发者不需要开发识别交互界面:还有一种是开发者只利用SDK提供的语音识别服务,自己开发一个属于自己的交互设计. 本文介绍最简单直接调起弹出框的方法. 首先,测试机需要安装如谷歌语音.百度语音.讯飞语音等产品的语音软件,这时可以在系统设置界面的语言与输入处找到相

REST实战——调用百度语音的云服务

RESTful REST(REpresentation State Transfer)描述了一个架构样式的网络系统,比如说web应用程序.它首次出现在2000年Roy Thomas Fielding的博士论文中,他是 HTTP 规范的主要编写者之一.REST指的是一组架构约束条件和原则.满足这些约束条件和原则的应用程序或设计,即具有REST风格就是RESTful.在REST中,以资源为核心,任何事物,只要具有被引用的必要,就是一个资源.每个资源必须至少有一个统一资源标识符,即URI,URI既是资

基于百度语音识别API的Python语音识别小程序

一.功能概述 实现语音为文字,可以扩展到多种场景进行工作,这里只实现其基本的语言接收及转换功能. 在语言录入时,根据语言内容的多少与停顿时间,自动截取音频进行转换. 工作示例: 二.软件环境 操作系统:win10 语言:Python 版本:3.6.0 Python库:AipSpeech(百度语音识别SDK客户端),wave,PyAudio,paInt16 Python库安装:除百度为:pip install baidu-aip,其他直接 pip install *(库名) 即可. 三.原理概述