本帖最后由 baisetiankong 于 2018-10-7 21:53 编辑
前两天看到了囧神发的这个帖子:https://bbs.hassbian.com/thread-4961-1-1.html,简述了些结论,今天照着大神的指引,顺利的进入了小爱音响系统,然后就有了些小发现,分享给大家,希望各位大大发挥出更多的玩法来。
发现1:控制小爱同学的的api
起源是这里:https://bbs.hassbian.com/thread-3669-1-1.html,那位大神也是厉害,愣是通过抓包抓到了相关api,但当时只有一个tts的api,我进入小爱系统,发现了这个文件:/usr/bin/mphelper,这里面有更丰富的的api,包括播放音频,控制小爱暂停、播放等,调用方法也很简单,需要同tts接口一样的,传入path,methon,message3个参数,具体对应的参数,详见/usr/bin/mphelper
发现2:劫持小爱同学的响应
这也是大家都想要的一个东西,自定义响应小爱同学,这样就更加自由了。小爱音响的工作流程:拾音-上传到小米服务器-小米服务器分析处理-回调小爱音响响应操作,也就是上面的api。所以,如果我想,如果在拾音和上传到小米服务器中间,加上一道自定义流程,那么也就能实现自定义响应小爱了,需要支持的有:语音转文字,语义分析。(目前我自己在用的自定义了一套语义分析,其实也就是大量关键字匹配和别名匹配,想了解的小伙伴可以私信我,这里就不说了)。想法有了,接下来就是行动,幸运的发现了这个文件:/bin/wakeup.sh,经过测试,发现里面的ready函数,就是小爱音响接受完用户输入,准备上传的函数,所以就是这里动手,接下来。。我也不会了,因为我不会写sh脚本,剩下靠大神了,附件为2个相关文档,大家自行下载查询,等待大神。。
相关文件
xiaomiAI.rar
(2.35 KB, 下载次数: 288)
2018-10-07更新
经过1天的尝试,我放弃了“劫持小爱同学的响应“这个想法。原因如下:
1.无法解码语音文件。
小爱流程是,拾音-拾音结束上传音频文件-小米大脑音频解析后回调。本来计划是在拾音结束,上传到小米服务器之间插入自定义处理方式,如果自定义流程处理了相关语音,那么就不上传到小米服务器,否则进行正常上传。我找到了小米拾音的文件,有2种格式,pcm和opus。经过查询资料得知,pcm是模拟音频文件,具体百度;opus是一种高压缩格式的文件,具体百度,小米默认是上传opus文件,我网上找了下,打算解码这两种格式,opus似乎小米有自己的加密,无法用通用播放器解码,pcm资料更少,所以,流程就到这里终端了,后面的想法都无法实现,附上两个demo文件,语音内容为:你好(应该没复制错,错了就算了)。期待大神能解码转换成文字。
audio你好.rar
(151.83 KB, 下载次数: 98)
2.无法获得语音解析后的文字。
经过翻阅日志文件,发现了一个有用的日志/var/mibrain/mibrain_asr.log,整理后格式如下
{
"meta": {
"type": "RESULT_ASR_FINAL",
"request_id": "e446bffe29314308c28226e48cXXXXXX",//保护隐私,部分字符用XXX替代,总体长度一致,下同
"timestamp": 1538XXX6XXX64
},
"response": {
"queries": [
{
"query": "关闭投影仪",
"confidence": 0.9991,
"is_final": true,
"query_vendor": 1015,
"query_debug": "{"end_flag":1,"err_no":0,"idx":-68,"result":{"nbest":["关闭投影仪"]},"sid":"e446bXXXXXX14308c28226XXXXX8ef8d"}\n",
"locale": "zh-CN"
},
{
"query": "关闭投影仪",
"confidence": 0.9964,
"is_final": true,
"query_vendor": 1001,
"query_debug": "AsrResponse{text=[B@1bXXXX26, lastPacket=true, decodedText=关闭投影仪, error=null, gender=0, packetId=8, volume=0.0}",
"gender": 0,
"locale": "zh-CN"
}
]
}
}
看这个意思似乎是小米大脑解析了语音后回传的了文字,然后又将文字意图上传到小米大脑进行处理,也或许真个操作都是在小米大脑云端,这里只是记录,具体情况,需要反编译/usr/bin/pns_upload_helper这个文件,因为wakeup里面调用的就是这个文件,我附上这个文件,请大神进行处理
pns_upload_helper
(18.84 KB, 下载次数: 49)
关于接入小爱的一些想法
1.翻阅论坛,看到了很多朋友的想法,比如红外接入,自定义技能接入,灯泡亮度数值控制等,都是可行性的,我还有个不可靠的想法,监听小米网关的rgb颜色值做判断,但问题出在,小爱不能直接控制网关颜色,场景也只能随机切换颜色,不能很好利用,这里只是暂时预留这个想法,以后一旦小爱能直接控制网关,这一点就可以利用了。
2.查阅了相关文档,看到yeelight提供了相关api,同时又看了坛友的帖子,说yeelight有比较大的延时,之后有空在看下这个,如果yeelight的没有延时问题,通过判断等的rgb值将会是一个很好的入口,到时候只需要一个灯泡,拆掉led灯,只留下模块即可。
3.土豪接入法,小米zigbee插座。对插座状态进行监听,开/关,都可以执行一个自定义操作。最简单最费钱的操作。
|