树莓派的基本概念和安装系统在系列文章一中介绍了.这篇准备介绍一下语音识别.

一直想研究一下语音识别,用来做家庭物联网的控制入口,未来也许就是这样,讯飞的叮咚音响可以连接京东的物联平台,苹果的homekit平台,华为的平台暂时落后的有点多...

国内语音识别领域,我个人比较欣赏讯飞.识别效果业界领先,这几年百度语音识别也在追赶,这次的研究让我对百度的语音识别效果刮目相看,Google的在国内不用想了...

言归正传

1讯飞语音识别接口.

这次在树莓派上实现语音识别控制家里的设备(插座,灯 等等)的研究,第一反应是找讯飞的解决方案,结果讯飞收回的arm平台开放的sdk,需要申请,有网友放出之前开放出来的sdk库,但是仍然收每天识别次数的限制.反感搞这些事情(申请需要在论坛里贴上研究过程,一个有效评论+1,申请后,三个星期发一次...),转而研究一下百度的语音识别接口.这里贴上网友的链接,里面有早期讯飞开放的sdk下载链接,有兴趣的可以去下载.

http://blog.csdn.net/yanghuan313/article/details/50992909

2百度语音识别接口.

百度语音开放平台号称永久免费,开发需要去注册账号,在平台上创建应用,这里不详细叙述了,平台操作比较简单,可以参考下面的链接(不用下载sdk什么的,这里使用语音识别 REST API ,只需要拿到API KEY、Secret KEY.)

http://www.tuicool.com/articles/z2m6V3v

平台支持android, ios.我们这里使用的是语音识别 REST API接口,也就是http传输识别.

使用python开发,在ubuntu上先尝试一下效果

需要安装pycurl

sudo apt-get install libcurl4-gnutls-dev

pip install pycurl

安装好后,下面是python的代码:

#encoding=utf-8import wave
import urllib, urllib2, pycurl
import base64
import json
## get access token by api key & secret keydef get_token():apiKey = "*******"secretKey = "***************"auth_url = "https://openapi.baidu.com/oauth/2.0/token?grant_type=client_credentials&client_id=" + apiKey + "&client_secret=" + secretKeyres = urllib2.urlopen(auth_url)json_data = res.read()return json.loads(json_data)['access_token']def dump_res(buf):print buf## post audio to server
def use_cloud(token):#  fp = wave.open('test.pcm', 'rb')fp = wave.open('cn_word.wav', 'rb')#  fp = wave.open('vad_1.wav', 'rb')nf = fp.getnframes()f_len = nf * 2audio_data = fp.readframes(nf)#mac addrcuid = "123456"srv_url = 'http://vop.baidu.com/server_api' + '?cuid=' + cuid + '&token=' + tokenhttp_header = ['Content-Type: audio/pcm; rate=16000',#  'Content-Type: audio/pcm; rate=8000','Content-Length: %d' % f_len]c = pycurl.Curl()c.setopt(pycurl.URL, str(srv_url)) #curl doesn't support unicode#c.setopt(c.RETURNTRANSFER, 1)c.setopt(c.HTTPHEADER, http_header)   #must be list, not dictc.setopt(c.POST, 1)c.setopt(c.CONNECTTIMEOUT, 30)c.setopt(c.TIMEOUT, 30)c.setopt(c.WRITEFUNCTION, dump_res)c.setopt(c.POSTFIELDS, audio_data)c.setopt(c.POSTFIELDSIZE, f_len)c.perform() #pycurl.perform() has no return valif __name__ == "__main__":token = get_token()use_cloud(token)

识别结果如下:

这里使用的是讯飞sdk中的wav文件,所以代码中rate=16000.大家根据自己的音频数据去修改.识别结果完全正确,可见音频文件效果可以的话,百度语音识别接口完全可以用,不需要讯飞sdk.

这里插一下题外的话,因为考虑语音文件效果的问题,自然考虑到了麦克风硬件的优劣,这里又再次提到讯飞,讯飞出了六麦环形阵列的麦克风阵列,链接:http://www.xfyun.cn/services/mic#list_wrap

不得不说,虽然没有使用,但是我相信效果,只是好贵.......不考虑成本的可以试试.

说一下我最后选择的方案,语音识别效果可以的情况下,要考虑唤醒的问题,唤醒方案有很多,上讯飞麦克风阵列的可以用唤醒词,可以增加声音传感器,某宝上也就几块钱,但是声音传感器的阀值是我比较担心的,我并不想语音识别被莫名的声音唤醒,因为这种传感器只能检测声音的有无.大家根据自己的需求去增加特定的传感器去唤醒语音识别就好.对于我来说,考虑到家里有小米网关,插座等大量的小米设备,使用了树莓派nodejs homebridge插件(虚拟出一个HomeKit网关),这样就可以对接到苹果手机的家庭应用,用苹果的siri控制了.当然以后还是想上自己的语音识别的.

先把关系整理一下:

  1. nodejs是一个命令行下的javascript运行环境。
  2. npm是nodejs的插件社区,里面有无数的好东西和不好的东西,因为是不需要审核的。
  3. homebridge是npm社区上的插件之一,可以虚拟出一个HomeKit网关出来,但并不负责任何设备的适配。
  4. 其它设备要想使用homebridge和HomeKit互通,就要写一个homebridge的插件,现在这种插件也有上百个了
  5. 做homebridge-aquara,Aquara是做小米多功能网关的深圳绿米联创的自有品牌,最近出的墙壁开关和空调伴侣都是这个品牌的

最后具体的步骤参见小米bbs

http://bbs.xiaomi.cn/t-13198850

树莓派系列二(语音识别)相关推荐

  1. (二)树莓派系列教程:树莓派4B手动连接wifi,远程控制。命令行界面、桌面界面

    一.通过连接同一局域网的wifi来远程操作树莓派 在树莓派系列教程(一)中我们在烧录系统的时候已经配置了树莓派在开机时候按优先级来裂解wifi.但是如果我们没有配置wifi的文件,我们可以手动连接wi ...

  2. 基于树莓派和YS-LDV7语音识别模块实现声控灯

    LDV7语音识别模块验货测试方法 1.按下图接线之后,串口插入电脑 2.打开串口调试助手 (另外我们打开软件串口后,我们可以拔下 GND 再把 GND 插上,这样重新上电可以看到接收串口会打印出相关的 ...

  3. 人工智能算法通俗讲解系列(二):逻辑回归

    2019独角兽企业重金招聘Python工程师标准>>> 今天,我们介绍的机器学习算法叫逻辑回归.它英语名称是Logistic Regression,简称LR. 跟之前一样,介绍这个算 ...

  4. 数学之美 系列二 -- 谈谈中文分词

    数学之美 系列二 -- 谈谈中文分词 2006年4月10日 上午 08:10:00 发表者: 吴军, Google 研究员 谈谈中文分词 ----- 统计语言模型在中文处理中的一个应用 上回我们谈到利 ...

  5. 图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)

    图机器学习(GML)&图神经网络(GNN)原理和代码实现(PGL)[前置学习系列二] 上一个项目对图相关基础知识进行了详细讲述,下面进图GML networkx :NetworkX 是一个 P ...

  6. A.图机器学习(GML)图神经网络(GNN)原理和代码实现(前置学习系列二)

    图学习图神经网络算法专栏简介:主要实现图游走模型(DeepWalk.node2vec):图神经网络算法(GCN.GAT.GraphSage),部分进阶 GNN 模型(UniMP标签传播.ERNIESa ...

  7. 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+kibanaV5.4.2+x-packV5.4.2安装

    相关博文: 搜索引擎ElasticSearchV5.4.2系列一之ES介绍 搜索引擎ElasticSearchV5.4.2系列二之ElasticSearchV5.4.2+klanaV5.4.2+x-p ...

  8. 【C++自我精讲】基础系列二 const

    [C++自我精讲]基础系列二 const 0 前言 分三部分:const用法.const和#define比较.const作用. 1 const用法 const常量:const可以用来定义常量,不可改变 ...

  9. 【算法系列 二】Stack

    为什么80%的码农都做不了架构师?>>>    栈应用的场景: 1.括号问题 2.后缀表达式 3.深度优先遍历 4.保存现场 1. 给定字符串,仅由"()[]{}" ...

最新文章

  1. windos 为什么会突然服务停止了_Windows服务异常自动关闭
  2. 科研实习 | 香港科技大学统计机器学习实验室张潼教授招收暑期科研实习生
  3. SAP License:从SAP顾问面试看职场
  4. 专访死马:为什么说Egg.js是企业级Node框架
  5. 自动化测试——接口自动化——requests用法
  6. 全网首发:JDK绘制文字:三、绘制句柄的内容是如何定义的
  7. 2021华为软挑(区域初赛)总结
  8. 计算机在条形码的应用,条码应用
  9. Qt 利用海康摄像头的ISAPI协议进行抓图等操作
  10. #年轻人找工作应该把钱放第一位吗#
  11. Matlab 许可证文件过期
  12. java接入支付宝支付api
  13. Linux命令之shred命令
  14. js读取解析JSON数据
  15. NetFlow学习总结
  16. java 关于xml的注解,自动生成xml文件 - @XML***
  17. 写收货地址代码模块的思路整理——省市联动
  18. cocos2d-x3.2与服务端框架Firefly的网络编程(初级网络通讯)
  19. 肺结节圆形边界光滑_【每周一例】32期讨论实录 肺部这光滑结节,是PSP吗?
  20. 【数据结构(2)】1.2 数据结构的基本概念和术语

热门文章

  1. 汽车信息安全脆弱性管理之一:NVD数据库使用
  2. 2022亚太赛C题全球变暖思路及代码
  3. VB计算机中next是什么意思,vb中的next 是什么意思
  4. c语言浮点数用16进制表示方法,浮点数用十六进制表示方式附C代码
  5. R12 AR的应收票据(Bill Receivable)的标准处理流程
  6. 如何拯救你的写作拖延症?
  7. 基于java+springboot的黄山旅游景点购票系统-计算机毕业设计
  8. 系统重装git用户名密码忘了的恢复方法
  9. Sql Plus忘了用户名和密码
  10. houdini:固定朝向的路径动画