【完整教程零基础】基于树莓派的智能语音助手-python

  • 树莓派3b+、python3系统自带、百度语音识别与合成、调用图灵机器人(热词唤醒失败,可用snowboy)
  • 1.Windows系统下【下载+安装 树莓派官方系统】
  • 2.安装配置pyaudio+snowboy
  • 3.百度语音识别 API 及代码实现
  • 4.接入图灵机器人
    • 测试判断图灵机器人是否调用成功
      • 图灵机器人调用的代码:

树莓派3b+、python3系统自带、百度语音识别与合成、调用图灵机器人(热词唤醒失败,可用snowboy)

1.Windows系统下【下载+安装 树莓派官方系统】

主要流程:树莓派官网下载系统→刷入 TF 卡→设置开启显示器和 SSH→通电→进入系统
1.Windows下 进入官方网站下载系统镜像:https://www.raspberrypi.org/downloads/
选择右边的版本

选择左边的版本
2. Windows系统下的安装
1)首先将准备好的 TF 卡连接读卡器,插入电脑
2)下载一个格式化 SD 卡的工具,格式化 SD 卡
下载网址:https://www.sdcard.org/downloads/formatter_4/eula_windows/ (点击 Aceept 开始下载)
3)下载 Win32 DiskImager,这是一个把镜像写入 SD 卡的工具
下载网址:http://sourceforge.net/projects/win32diskimager/

选择 raspberry.img 系统镜像包,然后选择 TF 卡,点击 Write 即将树莓派系统写入SD卡

4)对 TF 卡数据进行预设置

a. 开启 SSH 远程:(自 2016 年 9 月开始,raspberry 默认关闭 ssh 连接)
在 TF 卡分区里面创建一个名为 “ssh” 空文件即可(不要有 txt 后缀!)
b. 开启强制 HDMI 输出:(很多现在的显示器在树莓派上并不能识别)
在 TF 卡分区,打开 config.txt 文件(开机后位置: /boot/config.txt),修改如下:
config_hdmi_boost=4 #开启热插拔
hdmi_mode=58 #分辨率为适应屏幕分辨率的选择
hdmi_group=2 # 1:CEA 电视显示器 2:DMT 电脑显示器
disable_overscan=1#可以去掉开机屏幕周围的黑色边框
dtparam=audio=on
c.设置无线 WI-FI 连接:
在 TF 卡的 boot 分区,创建 wpa_supplicant.conf 文件,加入如下内容:
country=CN ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev update_config=1
network={ ssid=“wifiname” psk=“wifipassword” priority=1 }
d. 插上显示器、键盘、鼠标,上电
在基本的设置完成后,我们将 TF 卡插入树莓派,接上HDMI线连上显示器,鼠标,键盘,上电,即可进入操作界面,如下:

到目前为止,系统就装好了,整个系统下载,安装的过程,我们小组遇到很多奇怪的问题。例如:WiFi连接不稳定,自动断开;进不去系统等等,我们的百度的解决办法,写config文件等,都尝试过,但仍然治标不治本!!!因此,我们采取的简单粗暴的方式——重装系统(很多次)!!!

2.安装配置pyaudio+snowboy

这个很简单,参考树莓派3B+指南(十一)安装配置snowboy. 注意:百度语音采样率为16000。

进行测试播放 wave 文件的实例

#引入库
import wave
import pyaudio #定义数据流块
chunk = 1024 f = wave.open(r"a.wav","rb") #只读方式打开 wav 文件
p = pyaudio.PyAudio()  #打开数据流
stream = p.open(format = p.get_format_from_width(f.getsampwidth()),
channels = f.getnchannels(),
rate = f.getframerate(),
output = True  #读取数据
data = f.readframes(chunk)
#播放
while data !="":
stream.write(data)
data = f.readframes(chunk) #停止数据流
stream.stop_stream()
stream.close()
#关闭 PyAudio p.terminate()
录音实例:
#引入库
import wave
import pyaudio #参数定义
CHUNK = 1024
FORMAT = pyaudio.paInt16
CHANNELS = 2
RATE = 44100
RECORD_SECONDS = 5
WAVE_OUTPUT_FILENAME = "a.wav" p = pyaudio.PyAudio()
stream = p.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK) print("* recording") frames = []
for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)):
data = stream.read(CHUNK)
frames.append(data) print("* done recording") stream.stop_stream()
stream.close()
p.terminate()
wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb')
wf.setnchannels(CHANNELS)
wf.setsampwidth(p.get_sample_size(FORMAT)) wf.setframerate(RATE)
wf.writeframes(b''.join(frames))
wf.close()

3.百度语音识别 API 及代码实现

首先需要注册百度语音识别开发者账号,如下:
其次,代码实现如下:

# 导入 AipSpeech  AipSpeech 是语音识别的 Python SDK 客户端
from aip import AipSpeech
import os ''' 你的 APPID AK SK  参数在申请的百度云语音服务的控制台查看'''
APP_ID = '114xxxx5'
API_KEY = 'NYIvd23qqGAZxxxxxxxxxxxxxxx'
SECRET_KEY = 'DcQWQ9Hxxxxxxxxxxxxxxxxxxxxxx' # 新建一个 AipSpeech
client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) # 读取文件
def get_file_content(filePath):   #filePath  待读取文件名 with open(filePath, 'rb') as fp: return fp.read()
def stt(filename):         # 语音识别 # 识别本地文件 result = client.asr(get_file_content(filename), 'wav', 16000, {'dev_pid': 1536,}      # dev_pid 参数表示识别的语 言类型 1536 表示普通话 ) print result # 解析返回值,打印语音识别的结果 if result['err_msg']=='success.': word = result['result'][0].encode('utf-8')       # utf-8 编码 if word!='': if word[len(word)-3:len(word)]==',': print word[0:len(word)-3] with open('demo.txt','w') as f: f.write(word[0:len(word)-3]) f.close() else: print (word.decode('utf-8').encode('gbk')) with open('demo.txt','w') as f: f.write(word) f.close() else: print "音频文件不存在或格式错误" else: print "错误" # main 函数 识别本地录音文件 yahboom.wav
if __name__ == '__main__': stt('test.wav')

4.接入图灵机器人

首先,创建一个图灵机器人,如下:
注意,密钥要保持如下隐藏状态:

测试判断图灵机器人是否调用成功

# -*- coding: utf-8 -*-
import urllib
import json
def getHtml(url):
page = urllib.urlopen(url)
html = page.read() return html
if __name__ == '__main__':
key = '你的 api key'
api = 'http://www.tuling123.com/openapi/api?key=' + key + '& info='
while True:
info = raw_input('我: ')
request = api + info
response = getHtml(request)
dic_json = json.loads(response)
print '机器人: '.decode('utf-8') + dic_json['text']|
图灵机器人调用的代码:
def AskTuling(tuling_api, tuling_key, content1): text_input = content1 req = { "perception": { "inputText": { "text": text_input }, "selfInfo": { "location": { "city": "徐州", "province": "江苏", "street": "大学路" } } }, "userInfo":  { "apiKey": "d4c739c4b5b7422ab15dcc286b8b6734", "userId": "123" } } # 将字典格式的 req 转为 utf8 编码的字符串 req = json.dumps(req,cls=MyEncoder,indent=4).encode('utf8') print('\n' + '正在调用图灵机器人 API...') http_post = urllib.request.Request(tuling_api, data=req, headers={'content-type': 'application/json'}) response = urllib.request.urlopen(http_post) print('得到回答,输出为字典格式:') response_str = response.read().decode('utf8') response_dic = json.loads(response_str) intent_code = response_dic['intent']['code'] # 返回网页类的输出方式 if(intent_code == 10023): results_url = response_dic['results'][0]['values']['url'] results_text = response_dic['results'][1]['values']['text'] answer = {"code": intent_code, "text": results_text, "url":results_url} print(answer) return(results_text) # 一般的输出方式 else: results_text = response_dic['results'][0]['values']['text'] answer = {"code": intent_code, "text": results_text} print(answer) return(results_text)
if __name__ == '__main__': while True: record_to_file('demo.wav') voice_text = baiduASR() print ('voice_text:', voice_text) answer_text = AskTuling(TULING_API, TULING_KEY, voice_text) if baiduTTS(answer_text): os.system("cvlc --play-and-exit %s" % BAIDU_TTS_MP3)

【小白教程】基于树莓派的智能语音助手-python相关推荐

  1. python语音控制智能家电_基于树莓派的智能家居语音控制系统

    2018-10 基于树莓派的智能家居语音控制系统 Intelligent home voice control system based on raspberry Pi 刘 华 , 田占生 , 冯宇飞 ...

  2. 基于语音交互技术的智能语音助手系统的设计与实现

    文章目录 <基于语音交互技术的智能语音助手系统的设计与实现> 1. 引言 2. 技术原理及概念 2.1. 基本概念解释 2.2. 技术原理介绍:算法原理,操作步骤,数学公式等 2.2.1. ...

  3. 如何快速搭建一个像“天猫精灵”的智能语音助手?

    不看这几篇好文,就别说自己了解物联网 天猫精灵相信大家都不陌生了,它是阿里巴巴于2017年7月5日发布的AI智能终端品牌.让用户以自然语言对话的交互方式,实现影音娱乐.购物.信息查询.生活服务等功能操 ...

  4. 基于树莓派的智能家居控制系统设计论文参考

    完整论文咨询可WX联系:gyf1842965496 智能家居控制系统功能实现详细介绍:基于树莓派的智能家居控制系统设计https://blog.csdn.net/G1842965496/article ...

  5. 爆肝一周,用Python在物联网设备上写了个智能语音助手

    1. 背景介绍 智能语音助手作为物联网领域的一个重要生态成员,是一种全新的交互方式,它能够解放双手,随时提供服务,无须借助任何按键.想必很多开发者都有玩过天猫精灵.小爱同学或者小度吧,看到这些炫酷的人 ...

  6. 基于树莓派的智能家居控制系统设计

    基于树莓派的智能家居控制系统设计 完整文件下载 基于树莓派的智能家居控制系统设计 https://download.csdn.net/download/G1842965496/85802405 一.功 ...

  7. 午夜惊魂!频繁失控的亚马逊智能语音助手Alexa到底怎么了?

    [数据猿导读]不久之前,亚马逊Alexa上演了一场午夜惊魂. 记者 | 郭敏 官网 | www.datayuan.cn 微信公众号ID | datayuancn 当基于人工智能的语音助手进入千家万户的 ...

  8. 基于树莓派的智能家居项目整理

    文章目录 一.功能介绍 二.设计框图 三.实物展示 四.程序 一.功能介绍 基于树莓派的智能家居.智能家居用到的硬件有:树莓派4B.LD3320语音识别模块.pi 摄像头.继电器组.小灯.火焰传感器. ...

  9. 贴近司机,感知生活:智能语音助手在滴滴车主端的设计与实践

    桔妹导读:基于网约车司机的职业特性,帮助与指引司机在各类复杂的场景下更安全.便捷地完成工作,并尽可能疏导与减轻他们因长时间处于封闭环境下的心理压力,一直是滴滴发力的一个方向.但现有的一些途径,如规则展 ...

最新文章

  1. java update set_mybatis update set 多个字段实例
  2. java web编码详解_java web 开发 编码问题详解
  3. MATLAB“figure”使用详解
  4. Qt5.5.1移植到freescale imx6
  5. 1.Android中解析json程序代码
  6. 版权监控中心怎么关闭_防火门监控系统让消防通道疏散更安全
  7. Raect Router 4 的使用 (1)
  8. 每个前端开发者都要理解页面的渲染
  9. 微信7.0.4 iOS版发布:这项经典功能正式下线!
  10. 分段式多级离心泵_D型卧式多级泵结构组成及工作原理
  11. Viewbox在UWP开发中的应用
  12. Atitit. 构造ast 语法树的总结attilax v2 q0f
  13. sql 列转行_转行数据分析师如何开始学习SQL | 工科生三个月转行数据分析学习心得...
  14. STC-B学习板单片机编程
  15. 交换机和路由器的区别_交换机和路由器有什么区别 交换机和路由器区别介绍【详解】...
  16. 如何加减单元格指定数字_如何把单元格的数值每位数字进行相加?又学会一个Excel技巧...
  17. Jupyter Lab 十大高生产力插件
  18. MySQL软件多次安装失败解决方案
  19. 解决IE下载DOCX文件时自动变为ZIP的方法
  20. HackMyVM-hostname

热门文章

  1. latex等号上面加问号
  2. zuulFilter的post请求参数解密
  3. 教你炒股票2:没有庄1家,有的只是赢家和输家
  4. 大数据入门:WordCount程序解析
  5. JasperReport、iReport以及JavaBean绑定表格动态赋值
  6. Java基础常见知识面试题总结(上)
  7. 红蓝对抗模拟演练系统软件解决方案
  8. v9 android8,Android 8.0来了!荣耀9/V9用户马上升级
  9. 手机时间用长了会不会没信号服务器,手机卡能用多久?用久磨损了会影响手机信号么?...
  10. 上海市2021年核定征收现状,重庆市税务系统显示核定