你是我的眼,也是我的嘴——利用萤石摄像头TTS播报

成果展示:
先留空,暂时还没拍视频啥的

前言: 前几天在论坛发了个利用萤石云的轻应用API接口直接在钉钉(或其他任何应用)里内嵌类似于萤石APP的视频、云台、对讲等全功能链接的帖子,见这里。当时在研究萤石API文档时就发现了萤石有语音API接口,想着哪天有空研究研究,上周末刚好研究了一下。终于实现了任意音频文件上传萤石云并让摄像头播放出来的功能,结合百度tts,可以用nr实现任意文字tts成mp3文件再由摄像头朗读出来,摄像头变成了可tts的音箱了。最直接的应用场景就是门口的摄像头除了当眼睛现在还可以当嘴巴,可以实现有人按门铃后语音提示门外人员,还有当我出门锁门时门口摄像头tts提醒我今天天气及车辆尾号限行。之前这些是由一个小爱音箱做的,但是放在门里,门外听不是很清楚。其他应用场景大家可以任意发挥,有好的想法也欢迎留言分享。至少百十块钱的萤石摄像头可以任意tts,代替个智能音箱也不错。

前期准备:
既然用到百度tts和萤石云,当然先去申请萤石云账户和百度云账户。教程很多,这里本人不再赘述(因为我实在太懒,并且根据程序员的思维,别人已经做过的程序模块我拿过来引用就行了,没必要自己再写一遍)。
关于百度云,网上大把的教程,例如这个这个,最后得到的参数是你的百度云账户的AppID、API Key和Secret Key。
关于萤石云,网上大把的教程,例如这个这个,最后得到的参数是你的摄像头的序列号、你的萤石云账户的appkey和appsecret。

实施:
导入我的nr流,把每个节点检查一遍,里面但凡有“此处填写你的XXX”这样的地方,都请按照要求填写自己在前期准备时获取的信息。这里本人又偷了个懒,百度TTS没有直接用百度官方API,而是用了论坛坛友已经写好了的NR节点(还是那句话,前人栽树本来就是为后人乘凉的,我没必要重新栽树),需要在NR里搜索下载“百度TTS”这个节点,节点有个配置文件,需要你自己填写上你的百度云账户的AppID、API Key和Secret Key。这个节点可以将tts出来的音频文件输出到本地硬盘,并且这个NR节点会将音频文件的二进制码输出出来,这个二进制码刚好是后面给萤石摄像头上传音频文件所需要用到的。后面上传音频文件给摄像头的部分也需要在NR里搜索一个form-data格式的节点,因为根据萤石云的API,上传文件要用到form-data格式,而NR自带的http request节点不支持form-data格式的POST请求(这点坑死我了)。这些都弄好后部署,就能听到萤石摄像头进行tts播报了,虽然经过了百度云和萤石云,但响应速度非常快,感觉经常比小爱tts和若琪tts直接到音箱还快。


这里注意有好几个form-data的fork版本,选择安装dainer88的这个,我试过选择了另一个执行的时候报错,其他的没再尝试。

后续:
1、我这里用了萤石云语音API里的一次性临时下发语音到设备的接口,如果想上传固定音频到萤石云,下发固定音频到萤石云,大家可以自行查阅语音API接口,举一反三。
2、上面那条流是定期获取萤石云的token,并存在全局上下文中。为什么要定期获取,可以点这里参见我上个帖子。3、本人小白,啥语言啥代码都不懂,很多东西都是靠猜,靠一遍遍的试错,最后试验出来的。就比如这个form-data格式传文件,估计懂的人1分钟搞定,而我整整试错了一下午才写出来这些代码……分享不易,大家共同进步。

NR流:
萤石摄像头tts.json (5.1 KB)