热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

树莓派语音控制的配置方法和步骤

本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudoraspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。

首先感谢Eoman博友,博文很大一部分参考他的去实现,这里楼主因为树莓派不在身边,也截取一些Eoman的图片,再次感谢Eoman在工作的帮助。

 

1、树莓派配置

      

         树莓派3代去实现语音控制,便于语音控制,这里要进行sudo raspi-config的配置。

 

 

根据自己实际的系统,选择expand filesystem的一项,确定后sudo reboot

2、语音聊天和语音控制

 

        这里选用Eoman的控制方法:使用的是wiringPi(C语言)

      安装步骤:

       一、

1 sudo apt-get install git-core
2 git clone git://git.drogon.net/wiringPi
3 cd wiringPi
4 ./build

为了便于控制引脚高低,新建一个文件夹。

       二、

1 cd ~
2 mkdir scripts
3 cd scripts

新建的文件夹里保存控制电平高低的脚本。

 

     三、

编辑light脚本,内容如下:

#!/bin/bash
if [ $# > 1 ]
then
/usr/local/bin/gpio mode 4 outif [[ "$1" = "on" ]]then
/usr/local/bin/gpio write 4 onfiif [[ "$1" = "off" ]]then
/usr/local/bin/gpio write 4 offfi
fi

light脚本里的mode 4 是以board编码方式来实现的,参照自己Pi的引脚图,对照出实际的引脚。

也可以根据自己的爱好,自行改变引脚号。

       四、赋给脚本权限

1 chmod u+x light
2 chmod u+x 1

检验引脚是否可以通过命令行控制。

1 ./light on
2 ./light off

实际还是语言检测部分不是很灵敏,需要调试好代码部分的时间。试验中选用百度语音API。

1 #usr/bin/python
2 # -*- coding: utf-8 -*-
3
4 import numpy as np
5 from datetime import datetime
6 import wave
7 import time
8 import urllib, urllib2, pycurl
9 import base64
10 import json
11 import os
12 import sys
13
14 reload(sys)
15 sys.setdefaultencoding( "utf-8" )
16
17 save_count = 0
18 save_buffer = []
19 t = 0
20 sum = 0
21 time_flag = 0
22 flag_num = 0
23 filename = 'asr.wav'
24 commun = '1'
25 answer = '1'
26 def getHtml(url):
27 page = urllib.urlopen(url)
28 html = page.read()
29 return html
30
31 def get_token():
32 apiKey = "jpRPyTHnGgQ0u011uKZ0"
33 secretKey = "d07fa6c332810e9956cf5d1b"
34 auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKey;
35 res = urllib2.urlopen(auth_url)
36 json_data = res.read()
37 return json.loads(json_data)['access_token']
38
39 def dump_res(buf):
40 #global duihua
41 global res
42 print "字符串类型"
43 print (buf)
44 a = eval(buf)
45 print type(a)
46 if a['err_msg']=='success.':
47 res = a['result'][0] #可以在这里输出返回的语句
48 else:
49 res=""
50 #print duihua
51
52 def use_cloud(token):
53 fp = wave.open(filename, 'rb')
54 nf = fp.getnframes()
55 f_len = nf * 2
56 audio_data = fp.readframes(nf)
57 cuid = "9691607" #产品id
58 srv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + token
59 http_header = [
60 'Content-Type: audio/pcm; rate=8000',
61 'Content-Length: %d' % f_len
62 ]
63
64 c = pycurl.Curl()
65 c.setopt(pycurl.URL, str(srv_url)) #curl doesn't support unicode
66 #c.setopt(c.RETURNTRANSFER, 1)
67 c.setopt(c.HTTPHEADER, http_header) #must be list, not dict
68 c.setopt(c.POST, 1)
69 c.setopt(c.CONNECTTIMEOUT, 30)
70 c.setopt(c.TIMEOUT, 30)
71 c.setopt(c.WRITEFUNCTION, dump_res)
72 c.setopt(c.POSTFIELDS, audio_data)
73 c.setopt(c.POSTFIELDSIZE, f_len)
74 c.perform() #pycurl.perform() has no return val
75
76 # 将data中的数据保存到名为filename的WAV文件中
77 def save_wave_file(filename, data):
78 wf = wave.open(filename, 'wb')
79 wf.setnchannels(1)
80 wf.setsampwidth(2)
81 wf.setframerate(SAMPLING_RATE)
82 wf.writeframes("".join(data))
83 wf.close()
84
85 token = get_token()
86 #key = 'd07fa6c332810e9956cf5d1bc0f4ee5f'
87 while(True):
88 os.system('arecord -D "plughw:1,0" -f S16_LE -d3 -r 8000 /home/pi/asr.wav')
89 use_cloud(token)
90 print "-----> return result:"+commun[0]
91 print res
92 if "" in res: #在返回的文本里寻找“开”
93 answer = '好的,正在为您开启,请稍后'
94 url = "http://tsn.baidu.com/text2audio?tex="+answer+"&lan=zh&per=0&pit=1&spd=7&cuid=9691607&ctp=1&tok=24.de7d08e3164eed77f61cfcd1b2c0.2592000.1499256984.282335-9729638"
95 os.system('mplayer "%s"'%(url))
96 os.system('cd /home/pi/scripts&&./light on')
97 if "" in res:
98 answer = '好的,正在为您关闭,请稍后'
99 url = "http://tsn.baidu.com/text2audio?tex="+answer+"&lan=zh&per=0&pit=1&spd=7&cuid=9691607&ctp=1&tok=24.de7d08e3164eed77f61cfc8a7cd1b2c0.2592000.1499256984.282335-9729638"
100 os.system('mplayer "%s"'%(url))
101 os.system('cd /home/pi/scripts&&./light off')
102 if "兰州理工大学" in res: #在返回的文本里寻找“开”
103 answer = '兰州理工大学位于甘肃省兰州市'
104 url = "http://tsn.baidu.com/text2audio?tex="+answer+"&lan=zh&per=0&pit=1&spd=7&cuid=9691607&ctp=1&tok=24.de7d08e3164eed777cd1b2c0.2592000.1499256984.282335-9729638"
105 os.system('mplayer "%s"'%(url))
106 os.system('cd /home/pi/scripts&&./light on')
107
108 #if _name_ == "_main_":
109 # token = get_token()
110 #获取token
111 # use_cloud(token)
112 #进行处理,输出在函数内部

实现视频如下:

 

 

 

参考链接:

            http://www.cnblogs.com/eoman/p/5621928.html

            http://blog.csdn.net/benhuo931115/article/details/54342145

            http://blog.csdn.net/qinxiandiqi/article/details/39136195

            http://blog.csdn.net/qazwyc/article/details/57153734

 

转:https://www.cnblogs.com/babyoliver/p/7114019.html



推荐阅读
  • YOLOv7基于自己的数据集从零构建模型完整训练、推理计算超详细教程
    本文介绍了关于人工智能、神经网络和深度学习的知识点,并提供了YOLOv7基于自己的数据集从零构建模型完整训练、推理计算的详细教程。文章还提到了郑州最低生活保障的话题。对于从事目标检测任务的人来说,YOLO是一个熟悉的模型。文章还提到了yolov4和yolov6的相关内容,以及选择模型的优化思路。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 本文介绍了在Python3中如何使用选择文件对话框的格式打开和保存图片的方法。通过使用tkinter库中的filedialog模块的asksaveasfilename和askopenfilename函数,可以方便地选择要打开或保存的图片文件,并进行相关操作。具体的代码示例和操作步骤也被提供。 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Android 7的学习笔记总结,包括最新的移动架构视频、大厂安卓面试真题和项目实战源码讲义。同时还分享了开源的完整内容,并提醒读者在使用FileProvider适配时要注意不同模块的AndroidManfiest.xml中配置的xml文件名必须不同,否则会出现问题。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • Linux重启网络命令实例及关机和重启示例教程
    本文介绍了Linux系统中重启网络命令的实例,以及使用不同方式关机和重启系统的示例教程。包括使用图形界面和控制台访问系统的方法,以及使用shutdown命令进行系统关机和重启的句法和用法。 ... [详细]
  • baresip android编译、运行教程1语音通话
    本文介绍了如何在安卓平台上编译和运行baresip android,包括下载相关的sdk和ndk,修改ndk路径和输出目录,以及创建一个c++的安卓工程并将目录考到cpp下。详细步骤可参考给出的链接和文档。 ... [详细]
  • imx6ull开发板驱动MT7601U无线网卡的方法和步骤详解
    本文详细介绍了在imx6ull开发板上驱动MT7601U无线网卡的方法和步骤。首先介绍了开发环境和硬件平台,然后说明了MT7601U驱动已经集成在linux内核的linux-4.x.x/drivers/net/wireless/mediatek/mt7601u文件中。接着介绍了移植mt7601u驱动的过程,包括编译内核和配置设备驱动。最后,列举了关键词和相关信息供读者参考。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 基于dlib的人脸68特征点提取(眨眼张嘴检测)python版本
    文章目录引言开发环境和库流程设计张嘴和闭眼的检测引言(1)利用Dlib官方训练好的模型“shape_predictor_68_face_landmarks.dat”进行68个点标定 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • Activiti7流程定义开发笔记
    本文介绍了Activiti7流程定义的开发笔记,包括流程定义的概念、使用activiti-explorer和activiti-eclipse-designer进行建模的方式,以及生成流程图的方法。还介绍了流程定义部署的概念和步骤,包括将bpmn和png文件添加部署到activiti数据库中的方法,以及使用ZIP包进行部署的方式。同时还提到了activiti.cfg.xml文件的作用。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
author-avatar
张琪健V
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有