利用免费的百度语音及合成服务,百度机器人聊天服务,我们就可以用树莓派搭建自己的语音机器人

ps:本来想用图灵机器人,但是最近貌似收费,因此还是换成百度。有条件的可以用图灵机器人百度机器人有点傻。

基本硬件:树莓派3B,麦克风(不需要带声卡,淘宝10块钱的就可以),有线音响.

基本框图

翻译文字代码:

# coding=utf-8import sys
import json
import base64
import timeIS_PY3 = sys.version_info.major == 3if IS_PY3:from urllib.request import urlopenfrom urllib.request import Requestfrom urllib.error import URLErrorfrom urllib.parse import urlencodetimer = time.perf_counter
else:from urllib2 import urlopenfrom urllib2 import Requestfrom urllib2 import URLErrorfrom urllib import urlencodeif sys.platform == "win32":timer = time.clockelse:# On most other platforms the best timer is time.time()timer = time.timeAPI_KEY = '***'
SECRET_KEY = '***'# 需要识别的文件
AUDIO_FILE = 'record_voice.wav'  # 只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式
# 文件格式
FORMAT = AUDIO_FILE[-3:]  # 文件后缀只支持 pcm/wav/amr 格式,极速版额外支持m4a 格式CUID = '123456PYTHON'
# 采样率
RATE = 16000  # 固定值# 普通版DEV_PID = 1537  # 1537 表示识别普通话,使用输入法模型。根据文档填写PID,选择语言及识别模型
ASR_URL = 'http://vop.baidu.com/server_api'
SCOPE = 'audio_voice_assistant_get'  # 有此scope表示有asr能力,没有请在网页里勾选,非常旧的应用可能没有#测试自训练平台需要打开以下信息, 自训练平台模型上线后,您会看见 第二步:“”获取专属模型参数pid:8001,modelid:1234”,按照这个信息获取 dev_pid=8001,lm_id=1234
# DEV_PID = 8001 ;
# LM_ID = 1234 ;# 极速版 打开注释的话请填写自己申请的appkey appSecret ,并在网页中开通极速版(开通后可能会收费)# DEV_PID = 80001
# ASR_URL = 'http://vop.baidu.com/pro_api'
# SCOPE = 'brain_enhanced_asr'  # 有此scope表示有极速版能力,没有请在网页里开通极速版# 忽略scope检查,非常旧的应用可能没有
# SCOPE = Falseclass DemoError(Exception):pass"""  TOKEN start """TOKEN_URL = 'http://aip.baidubce.com/oauth/2.0/token'def fetch_token():params = {'grant_type': 'client_credentials','client_id': API_KEY,'client_secret': SECRET_KEY}post_data = urlencode(params)if (IS_PY3):post_data = post_data.encode( 'utf-8')req = Request(TOKEN_URL, post_data)try:f = urlopen(req)result_str = f.read()except URLError as err:print('token http response http code : ' + str(err.code))result_str = err.read()if (IS_PY3):result_str =  result_str.decode()print(result_str)result = json.loads(result_str)print(result)if ('access_token' in result.keys() and 'scope' in result.keys()):print(SCOPE)if SCOPE and (not SCOPE in result['scope'].split(' ')):  # SCOPE = False 忽略检查raise DemoError('scope is not correct')print('SUCCESS WITH TOKEN: %s  EXPIRES IN SECONDS: %s' % (result['access_token'], result['expires_in']))return result['access_token']else:raise DemoError('MAYBE API_KEY or SECRET_KEY not correct: access_token or scope not found in token response')
def translation_text():token = fetch_token()speech_data = []with open(AUDIO_FILE, 'rb') as speech_file:speech_data = speech_file.read()length = len(speech_data)if length == 0:raise DemoError('file %s length read 0 bytes' % AUDIO_FILE)speech = base64.b64encode(speech_data)if (IS_PY3):speech = str(speech, 'utf-8')params = {'dev_pid': DEV_PID,#"lm_id" : LM_ID,    #测试自训练平台开启此项'format': FORMAT,'rate': RATE,'token': token,'cuid': CUID,'channel': 1,'speech': speech,'len': length}post_data = json.dumps(params, sort_keys=False)# print post_datareq = Request(ASR_URL, post_data.encode('utf-8'))req.add_header('Content-Type', 'application/json')try:begin = timer()f = urlopen(req)result_str = f.read()print ("Request time cost %f" % (timer() - begin))except URLError as err:print('asr http response http code : ' + str(err.code))result_str = err.read()if (IS_PY3):result_str= str(result_str, 'utf-8')a=json.loads(result_str)b=a['result']print(a['result'])with open("result.txt","w") as of:of.write(result_str)return b"""  TOKEN end """if __name__ == '__main__':translation_text()

语音输出代码:

# coding=utf-8
from aip import AipSpeech
import os
import sys
#import importlib
# reload(sys)
""" 你的 APPID AK SK """
APP_ID = '25326941'
API_KEY = 'U9B7tKwMqwxhqvZ9oAgUEvD3'
SECRET_KEY = 'rpr1q0gC7ELOUIXIfXPHj4ATHzZnfUji'
def synath(speech):client = AipSpeech(APP_ID, API_KEY, SECRET_KEY)result  = client.synthesis(speech)# 识别正确返回语音二进制 错误则返回dict 参照下面错误码if not isinstance(result, dict):with open('au.mp3', 'wb') as f:f.write(result)
if __name__ == '__main__':APP_ID = '25326941'API_KEY = 'U9B7tKwMqwxhqvZ9oAgUEvD3'SECRET_KEY = 'rpr1q0gC7ELOUIXIfXPHj4ATHzZnfUji'synath('zjk')

遍利字典

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
'遍历字典,查找键值'# get_value.py 文件内容
def get_target_value(key, dic, tmp_list):""":param key: 目标key值:param dic: JSON数据:param tmp_list: 用于存储获取的数据:return: list"""if not isinstance(dic, dict) or not isinstance(tmp_list, list):  # 对传入数据进行格式校验return 'argv[1] not an dict or argv[-1] not an list 'if key in dic.keys():tmp_list.append(dic[key])  # 传入数据存在则存入tmp_listfor value in dic.values():  # 传入数据不符合则对其value值进行遍历if isinstance(value, dict):get_target_value(key, value, tmp_list)  # 传入数据的value值是字典,则直接调用自身elif isinstance(value, (list, tuple)):_get_value(key, value, tmp_list)  # 传入数据的value值是列表或者元组,则调用_get_valuereturn tmp_listdef _get_value(key, val, tmp_list):for val_ in val:if isinstance(val_, dict):  get_target_value(key, val_, tmp_list)  # 传入数据的value值是字典,则调用get_target_valueelif isinstance(val_, (list, tuple)):_get_value(key, val_, tmp_list)   # 传入数据的value值是列表或者元组,则调用自身

主函数

import api
import record
import sys
import os
import speech
import datetime
import requests
import respond
import get_value
import json
client_id = 'MWgD1pMT99mHuPk2wknoeMCf'
client_secret = 'Nfrg6LcuuTvArQRSQp5X6gjhU0fxHbI5'
print('start,record')
pathename= record.record()
print('beginning change')
result=api.k()
r=respond.get_token(client_id,client_secret)
url = 'https://aip.baidubce.com/rpc/2.0/unit/service/v3/chat?access_token=' + access_token
post_data ={"version":"3.0","service_id":"S62437","session_id":"","log_id":"7758521","request":{"terminal_id":"88888","query":""}}
post_data["request"]["query"]=str(result)
print(type(result),result)
encoded_data = json.dumps(post_data).encode('utf-8')
headers = {'content-type': 'application'}
responses = requests.post(url, encoded_data, headers=headers)
f_zero_dict=responses.json()
f=get_value.get_target_value("say",f_zero_dict,[])
speech.synath(f[0])
os.system('mplayer au.mp3')
if responses:print(f[0])

百度的语音识别文字精准度很高,但是机器人有点傻,可以训练 ,有条件可以用图灵。

实例测试

基于树莓派的语音对话助手 百度机器人 适合入门相关推荐

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

    第一部分代码 arecord -D "plughw:1" -f S16_LE -r 16000 -d 3 /home/pi/Desktop/voice.wav 第二部分代码 # c ...

  2. 100行代码撸一个语音对话助手

    前言 之前在CSDN上看到有人用python调用语音api接口实现一个语音对话机器人的功能,于是依葫芦画瓢,按照方法用python撸了一个语音对话助手,并成功在一个linux 智能音箱上应用并实现播报 ...

  3. 基于MSGEQ7的音乐节奏灯超详细适合入门

    Arduino基于MSGEQ7的音乐节奏灯 STEP1 了解获取项目的方法 项目集 https://create.arduino.cc/projecthub/HeinzKetschup/spectru ...

  4. 基于Seq2Seq模型的简易中文聊天机器人

    临近毕业季,又想起了做过的简易聊天机器人chartbot毕业设计,因为算是自己第一次接触这个智能问答领域吧,所以到现在还觉得特别有意思且难忘.我是个行动派,觉得有意思的东西,肯定就要记录下来了.下面我 ...

  5. 【小白教程】基于树莓派的智能语音助手-python

    [完整教程零基础]基于树莓派的智能语音助手-python 树莓派3b+.python3系统自带.百度语音识别与合成.调用图灵机器人(热词唤醒失败,可用snowboy) 1.Windows系统下[下载+ ...

  6. 开源项目叮当-中文语音对话机器人在ubuntu上的安装

    在叮当的官网(http://dingdang.hahack.com)上看到,它这是如下图这样介绍叮当的,它的安装流程也是基于树莓派来写的流程.而我对硬件不感兴趣,我不想去买树莓派的开发板,又没有SD卡 ...

  7. 中文语音对话 机器人 在 ubuntu 上的 安装

    开源项目叮当-中文语音对话机器人在ubuntu上的安装 在叮当的官网(http://dingdang.hahack.com)上看到,它这是如下图这样介绍叮当的,它的安装流程也是基于树莓派来写的流程.而 ...

  8. 基于树莓派聊天机器人设计

    基于树莓派聊天机器人设计 人工智能在计算机领域内,得到了愈加广泛的重视.随着科学技术的发展,人工智能已然成为未来不可阻挡的发展趋势之一,本次毕业设计我选择设计一款聊天机器人,一方面是想开拓我新的知识体 ...

  9. 有没有python与机械结合的工作-Python3从零开始搭建一个语音对话机器人的实现...

    01-初心缘由 最近在研究语音识别方向,看了很多的语音识别的资料和文章,了解了一下语音识别的前世今生,其中包含了很多算法的演变,目前来说最流行的语音识别算法主要是依赖于深度学习的神经网络算法,其中RN ...

  10. python发音机器人_Python3从零开始搭建一个语音对话机器人

    目录 01-初心缘由 最近在研究语音识别方向,看了很多的语音识别的资料和文章,了解了一下语音识别的前世今生,其中包含了很多算法的演变,目前来说最流行的语音识别算法主要是依赖于深度学习的神经网络算法,其 ...

最新文章

  1. 802.1x 客户端获取ip过程 很详细
  2. 软工作业3—词频统计
  3. Java 消息机制之回调详解
  4. 彻底解决网络爬虫遇到的中文乱码问题
  5. C语言 void 指针 - C语言零基础入门教程
  6. Spring Boot三合一实验(添加人员,修改人员,删除人员)
  7. 一次SSIS Package的调试经历
  8. vb把窗体嵌入桌面底层_桌面透明便签插件便签软件
  9. python微信群管理开禁言_微信群群主可不可以设置禁言?群主设置禁言别人方法...
  10. python 桌面数据库_python数据库操作笔记
  11. [学习笔记-SLAM篇]视觉SLAM十四讲ch3
  12. 充值抖币显示苹果服务器异常,抖音充值抖币怎么充值不了
  13. SlickEdit 使用技巧大收集
  14. 面试前的准备和注意事项(非常详细)
  15. C# winform excel根据当前选中内容,自动插入/编辑批注
  16. 「Computer Vision」Note on Kinetics and Two-Stream Inflated 3D ConvNets (I3D)
  17. 逆水寒怎么找回服务器之前的角色,逆水寒12月27日服务器合并公告 逆水寒合服问题解答一览...
  18. 代码详解设计模式--中介者模式
  19. 浅谈USB设备的VID和PID
  20. 【Oracle数据库驱动架包 ojdbc5.jar ojdbc6.jar】

热门文章

  1. 加装固态硬盘+安装win10系统
  2. [安洵杯 2019]easy misc 1
  3. Python 做一个属于自己的web网站
  4. 中软国际软件测试培训中心,中软国际准员工培养计划C++开发/软件测试方向开班典礼...
  5. Boot Option中没有USB启动选项的解决办法
  6. 30天150万公里,韦布望远镜抵达终点成功入轨,18镜合一进行时
  7. 社会人类学类毕业论文文献包含哪些?
  8. 一张图快速了解23种设计模式
  9. windows上QQ机器人搭建教程
  10. An Underwater Image Enhancement Benchmark Dataset and Beyong