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

 找回密码
 立即注册
楼主: 秋雨轩

[进阶教程] 你是我的眼,也是我的嘴——利用萤石摄像头TTS播报

  [复制链接]

11

主题

271

帖子

2658

积分

金牌会员

Rank: 6Rank: 6

积分
2658
金钱
2377
HASS币
50
 楼主| 发表于 2021-12-23 10:20:33 来自手机 | 显示全部楼层
scxs535 发表于 2021-12-22 20:42
楼主能不能在这个基础上再研究研究,怎么用http request调用本地mp3文件,不通过baidu? ...

这两天太忙,能有时间的,应该能实现。
回复

使用道具 举报

34

主题

709

帖子

4693

积分

论坛元老

Rank: 8Rank: 8

积分
4693
金钱
3974
HASS币
50
发表于 2021-12-23 10:34:36 | 显示全部楼层
dinglifeng 发表于 2021-12-23 00:09
老大 安装了 edge-tts节点 部署的时候提示 流程由于缺少节点类型而停止,能给看看咋回事么
  • SyntaxErro ...

  • 加q 237974847,我看看什么情况
    回复

    使用道具 举报

    46

    主题

    640

    帖子

    3827

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    3827
    金钱
    3187
    HASS币
    0
    发表于 2021-12-23 11:37:47 | 显示全部楼层
    秋雨轩 发表于 2021-12-23 10:14
    我的还可以啊,刚测试的。如果有问题那就是萤石云端的问题。另外看看会不会是你的token没获取到,token过 ...

    刚获取的啊 反复测试过 不行了
    回复

    使用道具 举报

    46

    主题

    640

    帖子

    3827

    积分

    论坛元老

    Rank: 8Rank: 8

    积分
    3827
    金钱
    3187
    HASS币
    0
    发表于 2021-12-23 11:40:23 | 显示全部楼层
    秋雨轩 发表于 2021-12-23 10:14
    我的还可以啊,刚测试的。如果有问题那就是萤石云端的问题。另外看看会不会是你的token没获取到,token过 ...

    能否链接再发下 我看地址根据你nr流输进去没错啊 让后替换自己的token和序列号 打开提示404错误
    回复

    使用道具 举报

    11

    主题

    271

    帖子

    2658

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2658
    金钱
    2377
    HASS币
    50
     楼主| 发表于 2021-12-23 12:49:15 | 显示全部楼层
    wangmucha 发表于 2021-12-23 11:40
    能否链接再发下 我看地址根据你nr流输进去没错啊 让后替换自己的token和序列号 打开提示404错误 ...

    你说的链接再发下是什么链接?https://open.ys7.com/api/lapp/voice/sendonce是这个吗?这个就是萤石云tts的API链接啊,NR流程里都有。
    回复

    使用道具 举报

    15

    主题

    636

    帖子

    2201

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2201
    金钱
    1565
    HASS币
    0
    发表于 2021-12-23 15:07:50 | 显示全部楼层
    scxs535 发表于 2021-12-22 08:39
    成功了。
    终于用nr自带的http request节点成功发声了。
    这样只需安装node-red-contrib-baidutts一个节点 ...

    大佬,我导入您的代码,提示说什么sysnax错误之类的,然后对比了下秋雨轩大佬的原始代码,发现有些什么“post”的引号前面少了\, 照着葫芦画瓢,添加了几个\后,(2段最长的代码),然后能成功导入了。

    不过还在外面,没有试验,先把更新后的代码发出来,大佬可以帮忙看下对吗。。。感谢。

    小白一个,什么都不懂。。。。见谅

    [
        {
            "id": "ed5c22be.f24b8",
            "type": "tab",
            "label": "样例:百度TTS萤石摄像头播放",
            "disabled": false,
            "info": ""
        },
        {
            "id": "e295bd00.6875f",
            "type": "function",
            "z": "ed5c22be.f24b8",
            "name": "萤石appkey&appsecret",
            "func": "msg.headers={\n         'Content-Type':'application/x-www-form-urlencoded',\n}\nmsg.payload={\n    "appKey":"此处填写你的萤石云账号信息",\n    "appSecret":"此处填写你的萤石云账号信息"\n}\nreturn msg;",
            "outputs": 1,
            "noerr": 0,
            "initialize": "",
            "finalize": "",
            "x": 390,
            "y": 120,
            "wires": [
                [
                    "b6de2172.7894"
                ]
            ]
        },
        {
            "id": "b6de2172.7894",
            "type": "http request",
            "z": "ed5c22be.f24b8",
            "name": "",
            "method": "POST",
            "ret": "obj",
            "paytoqs": "ignore",
            "url": "https://open.ys7.com/api/lapp/token/get",
            "tls": "",
            "persist": false,
            "proxy": "",
            "authType": "",
            "x": 620,
            "y": 120,
            "wires": [
                [
                    "ada5c087.d9e7d"
                ]
            ]
        },
        {
            "id": "58b8501a.8f147",
            "type": "inject",
            "z": "ed5c22be.f24b8",
            "name": "",
            "props": [
                {
                    "p": "payload"
                }
            ],
            "repeat": "",
            "crontab": "00 02 * * 1",
            "once": false,
            "onceDelay": 0.1,
            "topic": "",
            "payload": "",
            "payloadType": "date",
            "x": 200,
            "y": 120,
            "wires": [
                [
                    "e295bd00.6875f"
                ]
            ]
        },
        {
            "id": "ada5c087.d9e7d",
            "type": "change",
            "z": "ed5c22be.f24b8",
            "name": "",
            "rules": [
                {
                    "t": "set",
                    "p": "萤石token",
                    "pt": "global",
                    "to": "payload.data.accessToken",
                    "tot": "msg"
                }
            ],
            "action": "",
            "property": "",
            "from": "",
            "to": "",
            "reg": false,
            "x": 820,
            "y": 120,
            "wires": [
                []
            ]
        },
        {
            "id": "ca58bc7e.c053c",
            "type": "baidu-tts",
            "z": "ed5c22be.f24b8",
            "server": "b7a5e998.62a508",
            "data": "",
            "spd": "5",
            "pit": "6",
            "vol": "13",
            "per": "0",
            "path": "",
            "x": 380,
            "y": 260,
            "wires": [
                [
                    "57c2029.6a274fc"
                ]
            ]
        },
        {
            "id": "db13457a.010148",
            "type": "inject",
            "z": "ed5c22be.f24b8",
            "name": "输入TTS的文字",
            "props": [
                {
                    "p": "data",
                    "v": "谁人笑我太疯癫。此处填写想要TTS的文字",
                    "vt": "str"
                }
            ],
            "repeat": "",
            "crontab": "",
            "once": false,
            "onceDelay": 0.1,
            "topic": "",
            "payloadType": "str",
            "x": 200,
            "y": 260,
            "wires": [
                [
                    "ca58bc7e.c053c"
                ]
            ]
        },
        {
            "id": "57c2029.6a274fc",
            "type": "function",
            "z": "ed5c22be.f24b8",
            "name": "整理数据",
            "func": "msg.token=global.get('萤石token')\n\nmsg.headers = {}\nmsg.method = "POST"\nmsg.url = "https://open.ys7.com/api/lapp/voice/sendonce" ;\nmsg.headers["content-type"] = "multipart/form-data";\n\n\nmsg.payload  = {\n    accessToken: `${msg.token}`,\n    deviceSerial:'此处填写你的摄像头序列号',\n    voiceFile: {\n        value: msg.result.data,\n        options: {\n            filename: 'tts.mp3',\n        },\n    },\n};\nreturn msg;",
            "outputs": 1,
            "noerr": 0,
            "initialize": "",
            "finalize": "",
            "x": 580,
            "y": 260,
            "wires": [
                [
                    "fa1e4c48.e86e"
                ]
            ]
        },
        {
            "id": "fa1e4c48.e86e",
            "type": "http request",
            "z": "ed5c22be.f24b8",
            "name": "摄像头播放",
            "method": "use",
            "ret": "txt",
            "paytoqs": "ignore",
            "url": "https://open.ys7.com/api/lapp/voice/sendonce",
            "tls": "",
            "persist": false,
            "proxy": "",
            "authType": "",
            "x": 730,
            "y": 260,
            "wires": [
                []
            ]
        },
        {
            "id": "e5c3f635.5e07b8",
            "type": "comment",
            "z": "ed5c22be.f24b8",
            "name": "获取萤石云token",
            "info": "",
            "x": 360,
            "y": 80,
            "wires": []
        },
        {
            "id": "1204021c.a16b5e",
            "type": "comment",
            "z": "ed5c22be.f24b8",
            "name": "百度云tts萤石摄像头播放",
            "info": "",
            "x": 420,
            "y": 220,
            "wires": []
        },
        {
            "id": "b7a5e998.62a508",
            "type": "baidu-tts-server",
            "z": "",
            "name": "百度TTS配置样例",
            "appID": "此处填写你的百度云appID",
            "apiKey": "此处填写你的百度云API Key",
            "secretKey": "此处填写你的百度云Secret Key"
        }
    ]
    回复

    使用道具 举报

    11

    主题

    271

    帖子

    2658

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2658
    金钱
    2377
    HASS币
    50
     楼主| 发表于 2021-12-23 15:12:13 | 显示全部楼层
    telanx 发表于 2021-12-23 15:07
    大佬,我导入您的代码,提示说什么sysnax错误之类的,然后对比了下秋雨轩大佬的原始代码,发现有些什么“ ...

    你这个问题是论坛的原因,论坛复制黏贴代码的时候,会有一些代码因为格式问题导致导入NR时报错,比如“前面的\问题。所以我一般都直接发js附件,不在论坛帖代码。其实那位大佬的代码我猜是没问题的,只不过复制到论坛上会出格式问题。
    回复

    使用道具 举报

    11

    主题

    271

    帖子

    2658

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2658
    金钱
    2377
    HASS币
    50
     楼主| 发表于 2021-12-23 15:24:08 | 显示全部楼层
    scxs535 发表于 2021-12-22 20:42
    楼主能不能在这个基础上再研究研究,怎么用http request调用本地mp3文件,不通过baidu? ...

    刚有时间打开电脑折腾,发现我之前用过其实弄过本地mp3文件萤石tts,其实很简单。用个file in节点就行了。你看你的流,在http request节点之前的function节点里,定义了 value: msg.result.data, 而msg.result.data正是从上一个百度TTS节点流过来的数据流,是百度输出的音频文件的二进制代码的数据流。你如果能把本地文件也变成二进制数据流,定义给 value不就行了,就用file in节点就行。该节点文件名的地方填你的本地mp3文件路径,输出的地方选择输出格式为一个buffer对象(也就是二进制数据),就可以把本地文件转成二进制流输出了,输出的二进制流在msg.payload里面。

                                   
    登录/注册后可看大图

    回复

    使用道具 举报

    11

    主题

    271

    帖子

    2658

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2658
    金钱
    2377
    HASS币
    50
     楼主| 发表于 2021-12-23 15:28:58 | 显示全部楼层
    scxs535 发表于 2021-12-22 20:42
    楼主能不能在这个基础上再研究研究,怎么用http request调用本地mp3文件,不通过baidu? ...

    另外,如果你是想让萤石摄像头播报固定的mp3文件,而不是临时生成语音文件临时调用的话,其实可以不用这个API,这个API是临时萤石云的临时一次性语音播报接口。萤石云有其他API,可以实现一次上传之后,后续直接调用。可以把mp3文件传到云端,然后以后每次调用之前获取一下云端动态地址,直接通过动态地址调用播放。具体可以看一下萤石云的官方文档。
    回复

    使用道具 举报

    15

    主题

    636

    帖子

    2201

    积分

    金牌会员

    Rank: 6Rank: 6

    积分
    2201
    金钱
    1565
    HASS币
    0
    发表于 2021-12-23 15:50:34 | 显示全部楼层
    对了,大佬,萤石新的c6摄像头,带两个npu,可以实现人脸识别的功能,不知是否可以直接调用呢?这样就连baidu face这些都省了。而且萤石的摄像头识别应该会比百度那种快很多吧。不知大佬有没有兴趣啊。
    回复

    使用道具 举报

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

    本版积分规则

    Archiver|手机版|小黑屋|Hassbian

    GMT+8, 2024-11-25 20:42 , Processed in 0.086434 second(s), 30 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

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