热门标签 | 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



推荐阅读
  • 本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ... [详细]
  • [译]技术公司十年经验的职场生涯回顾
    本文是一位在技术公司工作十年的职场人士对自己职业生涯的总结回顾。她的职业规划与众不同,令人深思又有趣。其中涉及到的内容有机器学习、创新创业以及引用了女性主义者在TED演讲中的部分讲义。文章表达了对职业生涯的愿望和希望,认为人类有能力不断改善自己。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • Go Cobra命令行工具入门教程
    本文介绍了Go语言实现的命令行工具Cobra的基本概念、安装方法和入门实践。Cobra被广泛应用于各种项目中,如Kubernetes、Hugo和Github CLI等。通过使用Cobra,我们可以快速创建命令行工具,适用于写测试脚本和各种服务的Admin CLI。文章还通过一个简单的demo演示了Cobra的使用方法。 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • 20211101CleverTap参与度和分析工具功能平台学习/实践
    1.应用场景主要用于学习CleverTap的使用,该平台主要用于客户保留与参与平台.为客户提供价值.这里接触到的原因,是目前公司用到该平台的服务~2.学习操作 ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 推荐系统遇上深度学习(十七)详解推荐系统中的常用评测指标
    原创:石晓文小小挖掘机2018-06-18笔者是一个痴迷于挖掘数据中的价值的学习人,希望在平日的工作学习中,挖掘数据的价值, ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
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社区 版权所有