机器人超脑平台
平台简介
成为超脑平台用户
讯飞超脑板
产品规格
开发指南
标准协议
使用手册
环境准备
数据采集
应用算法
应用实例
镜像导出
镜像烧录
错误码
算法配置表
机器人多模态交互开发套件
多模态交互套件产品白皮书
多模态交互套件使用手册
多模态交互套件开发手册
多模态交互套件视频传输协议
多模态交互套件串口通信协议
多模态交互套件音频传输协议
联系方式
服务条款
超脑平台服务协议
超脑平台隐私政策
本文档使用 MrDoc 发布
-
+
首页
多模态交互套件视频传输协议
上位机可通过socket与RK3588多模态盒子建立视频传输通道,可参照开发包中的[Android示例代码](https://www.yuque.com/iflyaiui/zzoolv/xk9rpv "Android示例代码")实现摄像头视频预览。 ## 视频传输协议 ### 概述 上位机可以通过socket连接盒子来获取到实时图像帧数据,以及人脸检测结果信息。 **设备IP**:如果盒子为动态ip,可通过[发送串口](https://aiui-doc.xf-yun.com/project-1/doc-367/ "发送串口")指令来获取ip。 **指定端口**:9090 ### 消息格式 消息格式与串口协议类似,唯一不同点为消息数据长度位从2个字节扩充到4个字节。 <table border="1"> <colgroup> <col width="10%" /> <col width="10%" /> <col width="50%" /> </colgroup> <tbody valign="top"> <tr><td>字节</td> <td>值</td> <td>含义说明</td> </tr> <tr><td>0</td> <td>0xA5</td> <td>同步头</td> </tr> <tr><td>1</td> <td>0x01</td> <td>用户ID</td> </tr> <tr><td>2</td> <td>0xXX</td> <td>消息类型</td> </tr> <tr><td>3~6</td> <td>0xXXXXXXXX</td> <td>消息数据长度</td> </tr> <tr><td>7~8</td> <td>0xXXXX</td> <td>消息ID</td> </tr> <tr><td>9~n</td> <td>消息数据</td> <td>消息数据</td> </tr> <tr><td>n+1</td> <td>0xXX</td> <td>内部校验码</td> </tr> </tbody> </table> ### 通信规则 * 半双工通信,进行一问一答式通信; * 语音模组主要负责下发消息,上位机主要负责接收消息及回复确认消息; * 建立socket连接之后,盒子会首先下发图像帧格式消息,上位机获取到图像格式方可进行图像绘制; * 若语音模组未收到上位机的确认消息,会在超时500ms之后再发送最新的图像数据,无重发规则; ### 通信格式 通信格式定义了图像格式消息、人脸检测消息、图像帧消息、确认消息。下面将分类详述: <table border="1"> <colgroup> <col width="13%" /> <col width="9%" /> <col width="6%" /> <col width="8%" /> <col width="8%" /> <col width="8%" /> <col width="6%" /> <col width="0%" /> <col width="5%" /> <col width="1%" /> <col width="3%" /> <col width="3%" /> <col width="9%" /> <col width="6%" /> <col width="8%" /> <col width="6%" /> </colgroup> <tbody valign="top"> <tr><td>分类</td> <td>同步头</td> <td>用户ID</td> <td>消息类型</td> <td>消息长度</td> <td>消息ID</td> <td colspan="9">消息数据</td> <td>校检码</td> </tr> <tr><td>字节</td> <td>0</td> <td>1</td> <td>2</td> <td>3~6</td> <td>7~8</td> <td colspan="9">9~n</td> <td>n+1</td> </tr> <tr><td><strong>图像格式</strong></td> <td>0xA5</td> <td>0x01</td> <td>0x07</td> <td>见下文解释</td> <td>见下文解释</td> <td colspan="9">图像格式json</td> <td>0x00</td> </tr> <tr><td>字节</td> <td>0</td> <td>1</td> <td>2</td> <td>3~6</td> <td>7~8</td> <td colspan="9">9~n</td> <td>n+1</td> </tr> <tr><td><strong>图像帧数据</strong></td> <td>0xA5</td> <td>0x01</td> <td>0x08</td> <td>见下文解释</td> <td>见下文解释</td> <td colspan="9">图像二进制</td> <td>0x00</td> </tr> <tr><td>字节</td> <td>0</td> <td>1</td> <td>2</td> <td>3~6</td> <td>7~8</td> <td colspan="9">9~n</td> <td>n+1</td> </tr> <tr><td><strong>单人版本人脸检测信息</strong></td> <td>0xA5</td> <td>0x01</td> <td>0x09</td> <td>见下文解释</td> <td>见下文解释</td> <td colspan="9">人脸信息json</td> <td>0x00</td> </tr> <tr><td>字节</td> <td>0</td> <td>1</td> <td>2</td> <td>3~6</td> <td>7~8</td> <td colspan="2">9</td> <td colspan="1">10</td> <td colspan="3">11</td> <td colspan="3">12</td> <td>13</td> </tr> <tr><td><strong>多人版本人脸检测信息</strong></td> <td>0xA5</td> <td>0x01</td> <td>0x0b</td> <td>见下文解释</td> <td>见下文解释</td> <td colspan="9">人脸信息json</td> <td>0x00</td> </tr> <tr><td>字节</td> <td>0</td> <td>1</td> <td>2</td> <td>3~6</td> <td>7~8</td> <td colspan="2">9</td> <td colspan="1">10</td> <td colspan="3">11</td> <td colspan="3">12</td> <td>13</td> </tr> <tr><td><strong>确认消息</strong></td> <td>0xA5</td> <td>0x01</td> <td>0xff</td> <td>同上</td> <td>同上</td> <td colspan="2">0xA5</td> <td colspan="1">0x00</td> <td colspan="3">0x00</td> <td colspan="3">0x00</td> <td>0x00</td> </tr> </tbody> </table> #### 消息长度: 数据格式中3-6字节为消息数据长度,消息长度编码为小端模式,即第3字节存储低字节,第6字节存储高字节。如确认消息中消息数据有4字节,则消息长度为4,编码到3-6字节就是0x04 0x00 0x00 0x00 #### 消息ID: 数据格式中7-8字节为消息ID,与消息长度类似,也是小端模式编码。可以使用消息ID过滤因超时重发导致的重复消息。两字节长度的消息ID取值0-65535,所以在实际使用中需要循环使用,具体实现可以参考Android平台上的源码实现。 #### 校检码: 数据格式中每种数据类型的最后一个字节都是校检码,由于图像帧数据较大,校验位固定为0x00 #### 编码格式: 消息中字符串类型的数据编码格式为UTF-8。 图像帧数据为bgr格式的二进制数据 #### 确认消息 确认消息是一个特殊的消息类型,它是对其他类型消息的确认,它的消息ID与其要确认的消息的ID相同。 如一个图像帧消息的消息ID为0x9527,那对应的确认消息的消息ID也应该是0x9527。 ### 图像格式消息 图像格式的数据为json字符串,包含图像的宽、高、格式信息。 ``` { "format":0, // 0:bgr 1:jpeg "width":500, "height":500 } ``` **注意:图像格式仅在建立socket连接时下发一次** ### 图像二进制消息 根据图像格式消息获取图像对应的解析格式,默认格式为`JPEG`压缩格式 #### JPEG格式 JPEG格式为有损压缩格式,上位机需对图像进行JPEG解压缩,获取原始位图后再进行屏幕渲染。 #### bgr格式 bgr图像数据为原始图像数据,图像数据传输对网络带宽要求较高,一帧图像的大小为个`width*height*3`字节,帧率最高25fps,色彩通道顺序为RGB RGB ... ### 单人版本人脸检测消息 人脸检测结果为json字符串,结果中数据仅作为参考使用。 无人脸时: ``` { "hasFace": false, //有无人脸 "wakeup": false, //是否人脸唤醒 "frameIndex": 0 //图像帧id } ``` 有人脸时: ``` { "hasFace": true, //有无人脸 "wakeup": true, //是否人脸唤醒 "frameIndex": 0, //图像帧id "x": 10, //人脸左上角x坐标 "y": 10, //人脸左上角y坐标 "w": 100, //人脸宽度 "h": 100, // 人脸高度 "faceIndex":101, //人脸跟随id "headPitch": -0.2, //头姿上下偏转角 "headYaw":-0.2, //头姿左右偏转角 "mouthOcc":false //true:嘴部遮挡 false:嘴部无遮挡 } ``` ### 多人版本人脸检测消息 人脸检测结果为json字符串,结果中数据仅作为参考使用。 无人脸时: ``` { "list":[ { "hasFace": false, //有无人脸 "wakeup": false, //是否人脸唤醒 "frameIndex": 0 //图像帧id } ] } ``` 有人脸时: ``` { "list":[ { "hasFace": true, //有无人脸 "wakeup": true, //是否人脸唤醒 "frameIndex": 0, //图像帧id "x": 10, //人脸左上角x坐标 "y": 10, //人脸左上角y坐标 "w": 100, //人脸宽度 "h": 100, // 人脸高度 "faceIndex":101, //人脸跟随id "headPitch": -0.2, //头姿上下偏转角 "headYaw":-0.2, //头姿左右偏转角 "mouthOcc":false //true:嘴部遮挡 false:嘴部无遮挡 }, ... ] } ``` ## 常见问题 **Q:图像卡顿,1秒仅收到2帧图像数据** **A:** 语音模组未收到确认消息,延迟500ms下后才发出第二帧数据 **Q:图像传输对带宽的要求** **A:** 如果传输格式为JPEG压缩格式,使用百兆带宽即可。
admin
2025年1月14日 15:34
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
分享
链接
类型
密码
更新密码