『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 76865|回复: 28

[经验分享] 分享一下关于小爱音响的几个接口文件

[复制链接]

4

主题

21

帖子

379

积分

论坛分享达人

积分
379
金钱
353
HASS币
20
发表于 2018-10-5 23:10:26 | 显示全部楼层 |阅读模式
本帖最后由 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, 下载次数: 289)
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插座。对插座状态进行监听,开/关,都可以执行一个自定义操作。最简单最费钱的操作。

评分

参与人数 2金钱 +40 HASS币 +20 收起 理由
+ 20 + 20 感谢楼主的重要研究成果!
lidicn + 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

0

主题

246

帖子

1825

积分

金牌会员

Rank: 6Rank: 6

积分
1825
金钱
1579
HASS币
0
发表于 2018-10-6 00:14:01 来自手机 | 显示全部楼层
越来越好玩了
回复

使用道具 举报

7

主题

366

帖子

1328

积分

金牌会员

Rank: 6Rank: 6

积分
1328
金钱
962
HASS币
0
发表于 2018-10-6 09:05:49 | 显示全部楼层
论坛接力啊,哈哈哈,大神们快来
回复

使用道具 举报

0

主题

55

帖子

2234

积分

论坛积极会员

积分
2234
金钱
2179
HASS币
0
发表于 2018-10-6 12:52:57 | 显示全部楼层
好利害呀,
回复

使用道具 举报

9

主题

534

帖子

4542

积分

元老级技术达人

积分
4542
金钱
3998
HASS币
60
发表于 2018-10-6 17:15:08 | 显示全部楼层
看来的搞一台了。
回复

使用道具 举报

19

主题

341

帖子

1133

积分

金牌会员

Rank: 6Rank: 6

积分
1133
金钱
792
HASS币
0
发表于 2018-10-7 08:45:46 | 显示全部楼层
关键怎么弄啊??
回复

使用道具 举报

123

主题

4664

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16442
金钱
11693
HASS币
45
发表于 2018-10-7 12:35:03 | 显示全部楼层
楼主厉害了,可以研究更仔细些,发出来供其他大神来发挥
回复

使用道具 举报

123

主题

4664

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16442
金钱
11693
HASS币
45
发表于 2018-10-7 12:37:42 | 显示全部楼层
呼叫@nero大神,前来搞定sh
回复

使用道具 举报

40

主题

3056

帖子

1万

积分

超级版主

Nero

Rank: 8Rank: 8

积分
11149
金钱
8042
HASS币
182
发表于 2018-10-7 15:05:41 | 显示全部楼层
如果我想,如果在拾音和上传到小米服务器中间,加上一道自定义流程,那么也就能实现自定义响应小爱了


楼主是想实现小爱理解语义后,再对智能家居操作的时候你进行挟持?控制ha的东西?

但我觉得小爱上传完音频后,流程应该是在云端直通米家那边,米家直接受控,而不是小爱对米家的api做控制的吧。

小爱的作用就是训练好唤醒词,当听到唤醒词后触发录音,录音后上传到云端,云端理解后发现如果理解的了就进行操作,理解不了就回传理解不来的录音,让小爱播出来。

复杂的语音解义必定不在本地,否则离线小爱也能跟你聊天了,这个目前肯定做不到的。~
Nero
回复

使用道具 举报

9

主题

256

帖子

2820

积分

金牌会员

Rank: 6Rank: 6

积分
2820
金钱
2554
HASS币
60
发表于 2018-10-7 18:25:44 | 显示全部楼层
真的很厉害了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-12-23 13:06 , Processed in 0.257566 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表