半夜起来给小朋友冲奶粉,于是忽然想到了那个在机柜里落灰的树莓派。当时用百度的语音识别和合成用python实现了一些功能。但是并没有实现语音唤醒,于是要想实现语音唤醒就只能不断的轮询接口,然后发送到百度云进行识别。但是觉得这种方式太坑了,什么都上传了,感觉随时在被监听一样。今天又看了下百度的sdk发现支持语音唤醒了。还能自定义唤醒词。

唤醒词规则

1 . 支持设置10个唤醒词,包含指令唤醒词和自定义唤醒词,指令唤醒词不支持自定义;10个唤醒词中,最多可以设置3个自定义唤醒词,最多可以包含3个两字指令唤醒词(如播放、暂停、拍照等)

2 . 已经支持的指令唤醒词有:

相机类:拍照、茄子

音乐类:增大音量、减小音量、播放、停止、暂停、上一首、下一首、

电灯类:打开电灯、关闭电灯、增大亮度、减小亮度

手电筒类:打开手电筒、关闭手电筒

3 . 自定义唤醒词可根据应用的个性化需求来免费定制,例如您的应用希望通过“你好百度”启动应用,则就可以设置“你好百度”为唤醒词;

4 . 建议每个自定义唤醒词在3至5个字之间(这里的1个字是指1个汉字、或1个英文字母),4个字最佳;一个唤醒词可以包含最多2个(含)英文字母;唤醒词中暂时不支持纯英文单词,如california;

5 . 唤醒词定制的温馨提示:请勿选择太常用的词作为唤醒词,例如”吃饭吧”,在生活中经常会用到,容易误唤醒;为保证唤醒效果,不同意义的唤醒词,请考虑唤醒词之间的差异,尽量保证唤醒词之间不易混淆;唤醒词过短会导致唤醒错误率较高,请不要选择太多短唤醒词(包括指令唤醒词);

6 . 唤醒词的音节覆盖尽量多,长度最少为4个音节;相邻音节请尽可能规避,字要发音清晰响度大;生僻字请尽量规避;零声母字请尽量规避;请避免使用叠词;例如:质量较高的唤醒词:“百度外卖”,音节覆盖多差异大;质量较差的唤醒词:“语音识别”,“语音”两个字均为零声母字,不是一个质量高的唤醒词;

于是下载了百度的demo,在实际测试的时候却提示wakeup:no license。这是tm什么鬼,配置了appid和相关的属性发现效果并不明显。还是同样的错误。搜索了一下发现了这个帖子:

https://www.cnblogs.com/wantnon/p/4915028.html

需对demo进行如下修改:

- (void)configOfflineClient {

// 离线可识别自定义语法规则下的词,

NSString* gramm_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_gramm" ofType:@"dat"];;

NSString* lm_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_basic_model" ofType:@"dat"];;

NSString* wakeup_words_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_wakeup_words" ofType:@"dat"];;

NSString* licenseFilePath = [[NSBundle mainBundle] pathForResource:@"temp_license_2017-11-25" ofType:@""];

[self.asrEventManager setDelegate:self];

[self.asrEventManager setParameter:lm_filepath forKey:BDS_ASR_OFFLINE_ENGINE_DAT_FILE_PATH];

[self.asrEventManager setParameter:licenseFilePath forKey:BDS_ASR_OFFLINE_LICENSE_FILE_PATH];

// 请在 (官网)[http://speech.baidu.com/asr] 参考模板定义语法,下载语法文件后,替换BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数

[self.asrEventManager setParameter:gramm_filepath forKey:BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH];

[self.asrEventManager setParameter:wakeup_words_filepath forKey:BDS_ASR_OFFLINE_ENGINE_WAKEUP_WORDS_FILE_PATH];

}

- (void)configOfflineClient {

// 离线可识别自定义语法规则下的词,

NSString* gramm_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_gramm" ofType:@"dat"];;

NSString* lm_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_basic_model" ofType:@"dat"];;

NSString* wakeup_words_filepath = [[NSBundle mainBundle] pathForResource:@"bds_easr_wakeup_words" ofType:@"dat"];;

NSString* licenseFilePath = [[NSBundle mainBundle] pathForResource:@"temp_license_2017-11-25" ofType:@""];

[self.asrEventManager setDelegate:self];

[self.asrEventManager setParameter:lm_filepath forKey:BDS_ASR_OFFLINE_ENGINE_DAT_FILE_PATH];

[self.asrEventManager setParameter:licenseFilePath forKey:BDS_ASR_OFFLINE_LICENSE_FILE_PATH];

// 请在 (官网)[http://speech.baidu.com/asr] 参考模板定义语法,下载语法文件后,替换BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH参数

[self.asrEventManager setParameter:gramm_filepath forKey:BDS_ASR_OFFLINE_ENGINE_GRAMMER_FILE_PATH];

[self.asrEventManager setParameter:wakeup_words_filepath forKey:BDS_ASR_OFFLINE_ENGINE_WAKEUP_WORDS_FILE_PATH];

}

1,我下载了一个临时授权文件temp_license_2015-10-27,把它拖到xcode工程里。

2,然后在BDVRViewController.m中的loadOfflineEngine前加一句:

NSString* licenseFilePath = [[NSBundle mainBundle] pathForResource:@”temp_license_2015-10-27″ ofType:@””];

再把loadOfflineEngine的第二个参数license由nil改成licenseFilePath。

3,把BDVRSConfig.m中的

_recognitionProperty = [[NSNumber numberWithInt: EVoiceRecognitionPropertySearch] retain];

改成

_recognitionProperty = [[NSNumber numberWithInt: EVoiceRecognitionPropertyInput] retain];

然后就可以离线识别了。

参考:http://yuyin.baidu.com/bbs/q/552

—-补充:

关于百度语音离线识别(引自http://yuyin.baidu.com/bbs/q/538):离线只是作为在线识别的补充,不支持纯离线识别。授权成功后,会每隔一段时间不定期的再次进行认证授权的。

但是这个方法是针对以前的sdk的,于是按照这个思路修改了一下:

发现ok了,但是有个问题,那就是那个临时授权文件:

只有三十天的有效期?这tm长期运行不蛋疼了,还得一个月更新一次授权文件?于是搜索了一下这个属性:BDS_ASR_OFFLINE_ENGINE_DAT_FILE_PATH 找到了这么一段说明(https://cloud.baidu.com/doc/SPEECH/ASR-iOS-SDK/3F.5C.E6.9C.8D.E5.8A.A1.E7.AB.AF.E9.85.8D.E7.BD.AE.E7.9B.B8.E5.85.B3.html):

在线引擎身份验证

参数名称

说明

BDS_ASR_API_SECRET_KEYS

开放平台设置API_KEY and SECRET_KEY

BDS_ASR_PRODUCT_ID

内部产品设置产品ID

离线引擎身份验证

参数名称

说明

BDS_ASR_OFFLINE_LICENSE_FILE_PATH

离线授权文件路径

BDS_ASR_OFFLINE_APP_CODE

离线授权所需APPCODE(APPID),

如使用该方式进行正式授权,请移除临时授权文件

看起来像是那么一回事,但是问题是实例代码里面写的就是appid,为啥不行?问题是还有一点。这个应用包名是干嘛的?没用?看意思这个东西是校验授权的。于是果断的把appid换成应用包名,去掉授权文件,再次运行ok了。

[self.asrEventManager setParameter:@"com.mars.homeai" forKey:BDS_ASR_OFFLINE_APP_CODE];

[self.asrEventManager setParameter:@"com.mars.homeai" forKey:BDS_ASR_OFFLINE_APP_CODE];

对百度的文档能力深表同情,以前用python根据rest api写的代码就踩了无数坑(那时候还没有python sdk)。现在他们依然这么坑!

分享文章:

python语音唤醒功能_百度语音识别 语音唤醒失败相关推荐

  1. php加入语音播报功能_一个有语音播报功能的网络聊天室PHP源码

    二次元作风..语音播报的功用贼欢乐,妹子说脏话的时分太逗了,演示站(明天估量就删了)能够测试下这个语音播报的功用: 以下装置过程基于一个洁净的CentOS7X64Minimal. 装置Nodejs: ...

  2. Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容。通过plus.speech可获取语音输入管理对象

    Speech模块管理语音输入功能,提供语音识别功能,可支持用户通过麦克风设备进行语音输入内容.通过plus.speech可获取语音输入管理对象. 语音输入接口可使得网页开发人员能快速调用设备的麦克风进 ...

  3. python语音输入功能_“在Python中如何实现一点按钮就出现语音输入语音,输入语音后可以自动翻译为文字的程序?“python语音识别教程...

    Python用什么模块开发语音识别系统 使用YQ5969,这个语音识别模以支持1--8个咪头,还可以支持本地和识别不同需求.5米内本地识别 93%以上,云端识别率97%.这个语音识别模块可以滤除噪声. ...

  4. python调用百度语音搜索_python调用百度语音识别实现大音频文件语音识别功能

    本文为大家分享了python实现大音频文件语音识别功能的具体代码,供大家参考,具体内容如下 实现思路:先用ffmpeg将其他非wav格式的音频转换为wav格式,并转换音频的声道(百度支持声道为1),采 ...

  5. python识别英语语音翻译器_Python结合百度语音识别实现实时翻译软件的实现

    一.所需库安装 pip install PyAudio pip install SpeechRecognition pip install baidu-aip pip install Wave pip ...

  6. 语音识别唤醒python_python版百度语音识别功能

    本文实例为大家分享了python版百度语音识别功能的具体代码,供大家参考,具体内容如下 环境:使用的IDE是Pycharm 1.新建工程 2.配置百度语音识别环境 "File"-- ...

  7. 华为语音解锁设置_华为设置语音服务功能

    设置语音服务功能开启语音服务 您可以通过以下任意一种方式开启语音服务,在语音服务倾听界面说出语音命令. 手表识别语音命令并启动对应的服务.比如:今天的天气如何? 方法一:手表亮屏时,对着主屏幕,说一声 ...

  8. uniapp使用百度语音识别语音转文字

    HBuilderX已支持讯飞语音识别和百度语音识别,这里讲下百度语音接入 一:首先是百度语音识别申请 这个步骤暂且省略,可以直接移步百度语音api页面自行申请,主要是为了获取语音权限以及AppID.A ...

  9. micropython 离线语音识别_百度语音识别.pdf

    语音识别1(百度语音识别) 简介 推荐国内用户使用!识别普通话效果可以,识别英文效果不好.尽量识别长点,有现实意义的长短语. 这样识别率比较高 语音识别,是CC喵最喜欢的一个人工智能功能.近年来智能音 ...

最新文章

  1. 子对象是什么java_面向对象编程(什么是对象)——java
  2. 华农软件工程实验报告_华南农业大学15年软件工程复习提纲
  3. PCB布线技术 很好很强大
  4. java 鼠标拖动图形_java怎么实现鼠标在桌面拖动过程中 画 矩形的 功能?
  5. 如何在input输入框中加一个搜索的小图片_前端开发困难重重,如何把握机会学习?...
  6. 开源sip客户端 linux,开源SIP服务器 Kamailio
  7. 论文浅尝 | KGQR: 用于交互式推荐的知识图谱增强Q-learning框架
  8. 经典的K-means聚类算法
  9. 【360开源】2018开源项目汇总
  10. 以下()不是python的数值运算操作符_python运算符与数据类型
  11. MySQL服务器意外关机-无法启动多实例
  12. 2018.11.27 元器件选型(2)- 连接器
  13. 电池供电的电容麦_板儿砖变电池?!是的,科学家已成功实现这一功能
  14. Java构造方法解析
  15. 手把手教你linux系统安装和完美配置
  16. 强者越强-效率与公平的幂律视角
  17. 手机计算机无法使用,用数据线把手机连接电脑,电脑无法识别,怎么回事?
  18. vs按f5没反应_【Euro 02:30沙萨基VS莫斯科中央陆军】
  19. 重新安装固态硬盘后,然后再安装系统至固态硬盘,为何开机后仍然不能从固态硬盘启动系统?
  20. error LINK2005: XXXX已经在 .obj 中定义

热门文章

  1. Mysql访问日志记录
  2. Python—完美计算个税和税后收入(求职重要参考神器)
  3. 产品狗观世界:谈装修
  4. System.DllNotFoundException: Unable to load DLL 'XX.dll': 找不到指定的模块。 (Exception from HRESULT:
  5. CENTOS linux kernel 内核编译
  6. 关于Apple ID相关设置
  7. 计算机网络相关知识总结
  8. Could not open Hibernate Session for transaction; nested exception is org.hibernate.exception.Generi
  9. 苹果手机计算机有哪些功能,苹果iPhone手机问答:iPhone计算器原来这么好用 神奇功能汇总...
  10. HTML期末作业-基于HTML+CSS+JavaScript制作学生信息管理系统模板