.. _chapter_protocol_index: 通讯协议 ================ 当使用串口设备与主控进行数据交互时,需要采用一定的交互协议才可以完成数据或指令的传输。Sentry系列视觉传感器支持 :ref:`标准协议指令` 和 :ref:`简单协议指令` Sentry系列视觉传感器采用相同的通讯协议格式,但不同的产品所支持的协议指令会略有差别,下文将以 :ref:`Sentry2视觉传感器` 为例进行介绍,其他详细信息或技术需求可以联系我们: 技术:support@aitosee.com 销售:sales@aitosee.com .. _chapter_standard_protocol_index: 标准协议指令 ---------------- 标准协议指令具有规范的数据格式,结合寄存器表可以实现完整的数据交互功能和较高的通信效率。 指令格式 **************** START | LEN | ADDR | CMD | DATA | CHKSUM | END ======== ======== ================ ======== 符号 含义 长度 描述 ======== ======== ================ ======== START 帧头 1Byte 表示一个数据包的开始,始终为0xFF LEN 长度 1Byte 数据包的总长度(字节),包含帧头和帧尾 ADDR 地址 1Byte 设备物理地址 CMD 指令 1Byte 指令代码,详见指令列表 DATA 数据 (LEN-6)Byte 数据内容,详见指令列表 CHKSUM 校验 1Byte 从帧头(含)到DATA数据的所有字节累加求和,进位丢弃 END 帧尾 1Byte 表示一个数据包的结束,始终为0xED ======== ======== ================ ======== 数据交互方式 ************************ 串口模式下采用应答机制,传感器的数据交互完全由主控设备控制,传感器不会主动向主控发送数据。数据交互时,由主控设备先发送指令帧,然后传感器将会返回一个或多个应答帧,完成一次数据交互。 指令介绍 ************************ ================ ================ ================ 指令代码 名称 描述 ================ ================ ================ 0x01 SetRegister 设置寄存器 0x02 GetRegister 读取寄存器 0x20 SetParam 设置算法参数 0x21 SetParamGroup 按组设置算法参数 0x22 GetResult 读取算法结果 0x23 GetResultGroup 按组读取算法结果 0x24 SetResult 设置算法结果 0x25 SetResultGroup 按组设置算法结果 ================ ================ ================ * Param Group 参数组 一组参数可以表示一个作用区域,每组参数最多可包含5个参数值,不同的算法对这5个参数值的含义可能是不同的。 仅有部分算法具有参数设置功能,有的算法还可以设置多组参数,每组参数由Param ID进行标记。 比如颜色识别算法,要设置25个检测区域,则需要写入25组参数 * Param Value 参数值 每组参数可以由5个参数值来描述,不同算法的参数值的含义并不相同: ================ ======================== ======================== ======================== ======================== ======================== 算法 Param Value1 Param Value2 Param Value3 Param Value4 Param Value5 ================ ======================== ======================== ======================== ======================== ======================== 颜色识别 检测区域中心点x坐标 检测区域中心点y坐标 检测区域宽度w 检测区域高度h 无 色块检测 无 无 最小色块宽度w 最小色块高度h 待检测的颜色分类标签 深度学习 无 无 无 无 0=删除该ID数据,100=训练该ID数据 人脸识别 无 无 无 无 0=删除该ID数据,100=训练该ID数据 ================ ======================== ======================== ======================== ======================== ======================== * Result Group 结果组 一组数据表示一个检测结果,每组结果包含5个数据,但不同的算法对这5个数据的含义可能是不同的,部分算法可以返回多个结果,每组检测结果由ResultID进行标记。 * Result Data 结果数据 ================ ======================== ======================== ======================== ======================== ======================== ======================== 算法 Result Data1 Result Data1 Result Data3 Result Data4 Result Data5 备注 ================ ======================== ======================== ======================== ======================== ======================== ======================== 颜色识别 R红色通道值 G绿色通道值 B蓝色通道值 无 颜色分类标签 色块检测 中心x坐标 中心y坐标 宽度w 高度h 颜色分类标签 线条检测 终点x坐标 终点y坐标 起点x坐标 起点y坐标 线段角度 标签识别 中心x坐标 中心y坐标 宽度w 高度h 分类标签 深度学习 固定中心x坐标 固定中心y坐标 固定宽度w 固定高度h 分类标签 分类标签需要先进行训练 卡片识别 中心x坐标 中心y坐标 宽度w 高度h 分类标签 人脸识别 中心x坐标 中心y坐标 宽度w 高度h 分类标签 分类标签需要先进行训练 20类物体识别 中心x坐标 中心y坐标 宽度w 高度h 分类标签 二维码识别 中心x坐标 中心y坐标 宽度w 高度h 字符数量 后续结果组为字符数据 自定义算法 自定义含义 自定义含义 自定义含义 自定义含义 自定义含义 移动物体检测 中心x坐标 中心y坐标 宽度w 高度h 无 ================ ======================== ======================== ======================== ======================== ======================== ======================== * 0x01-SetRegister 描述:设置寄存器,每次只可设置一个寄存器(一个字节) 指令帧CMD:0x01 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 寄存器地址 待写入数据 ================ ================ ================ ================ ================ ================ ================ 应答帧CMD:0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 0x01 已写入数据 ================ ================ ================ ================ ================ ================ ================ * 0x02-GetRegister 描述:读取寄存器,每次只可读取一个寄存器(一个字节) 指令帧CMD:0x02 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 寄存器地址 ================ ================ ================ ================ ================ ================ ================ 应答帧CMD:0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 0x02 读取的数据 ================ ================ ================ ================ ================ ================ ================ * 0x20-SetParam 描述:设置指定算法同一类型的参数值,可以同时设置多个数据,比如单独设置颜色识别算法10个检测区域的x坐标 指令帧-0x20 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes ================ ================ ================ ================ ================ ================ ================ 算法ID 参数类型 起始ParamID1 结束ParamIDn 参数1 参数2 参数n ================ ================ ================ ================ ================ ================ ================ 应答帧CMD:0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 0x20 算法ID ================ ================ ================ ================ ================ ================ ================ * 0x21-SetParamGroup 描述:设置指定算法的参数组数据,每个参数组包含5个数据项,比如同时设置颜色识别算法的5个检测区域x,y,w,h信息 指令帧CMD:0x21 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Bytes Bytes Bytes ================ ================ ================ ================ ================ ================ ================ 算法ID 起始ParamID1 结束ParamIDn 参数组1 参数组2 参数组n ================ ================ ================ ================ ================ ================ ================ 应答帧CMD:0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 0x21 算法ID ================ ================ ================ ================ ================ ================ ================ * 0x22-GetResult 描述:获取指定算法算法的某一类型的检测结果,比如只获取颜色识别的标签数据,而不关心xy坐标 指令帧CMD:0x22 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 算法ID 数据类型 起始ResultID 结束ResultID ================ ================ ================ ================ ================ ================ ================ 因为每个数据帧的最大长度只有255个字节,当检测结果帧数据长度超过此值时,将会产生多个数据帧,当CMD为0xEC时表示中间帧,为0xE0时表示结束帧 应答帧CMD:0xEC或0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes ================ ================ ================ ================ ================ ================ ================ 0x22 图像帧号 算法ID 数据类型 起始ResultID1 结束ResultIDn 结果数据 ================ ================ ================ ================ ================ ================ ================ * 0x23-GetResultGroup 描述:获取指定算法每组的检测结果,一组检测结果包含5个数据项,比如同时获取颜色识别算法的5个区域的RGB值和分类标签值 指令帧CMD:0x23 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 算法ID 起始ResultID 结束ResultID ================ ================ ================ ================ ================ ================ ================ 因为每个数据帧的最大长度只有255个字节,当检测结果帧数据长度超过此值时,将会产生多个数据帧,当CMD为0xEC时表示中间帧,为0xE0时表示结束帧 应答帧CMD:0xEC或0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes ================ ================ ================ ================ ================ ================ ================ 0x23 图像帧号 算法ID 起始ResultID1 结束ResultIDn 结果组1 结果组n ================ ================ ================ ================ ================ ================ ================ * 0x24-SetResult 描述:设置指定算法算法的某一类型的检测结果,用于将WiFi芯片中自定义算法的结果写入K210寄存器中,以便主控读取 指令帧CMD:0x24 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 算法ID 数据类型 起始ResultID 结束ResultID ================ ================ ================ ================ ================ ================ ================ 应答帧CMD:0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Byte7 ================ ================ ================ ================ ================ ================ ================ 0x24 算法ID ================ ================ ================ ================ ================ ================ ================ * 0x25-SetResultGroup 描述:设置指定算法每组的检测结果,一组检测结果包含5个数据项,用于将WiFi芯片中自定义算法的结果写入K210寄存器中,以便主控读取 指令帧CMD:0x25 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Bytes Bytes ================ ================ ================ ================ ================ ================ ================ 算法ID 起始ResultID 结束ResultID ================ ================ ================ ================ ================ ================ ================ 应答帧CMD:0xE0 ================ ================ ================ ================ ================ ================ ================ Byte1 Byte2 Byte3 Byte4 Byte5 Byte6 Bytes ================ ================ ================ ================ ================ ================ ================ 0x25 算法ID ================ ================ ================ ================ ================ ================ ================ .. _chapter_simple_protocol_index: 简单协议指令 ---------------- 该指令没有复杂的协议规范,只需要通过串口发送简单的字母和数字就可以开启算法和获取数据,无需开发驱动库,适用于任何有UART功能的主控平台,但也只适合简单的应用场景 指令格式 ************************ CMD | ID | END ======== ================ ================ ======================== 符号 含义 长度 描述 ======== ================ ================ ======================== CMD 指令字符 1 指令字符,详见指令列表 ID ID数字编号 1 ID编号,可以为算法编号或结果编号 END 结束符 1 可以为换行符,回车符,或者空格 ======== ================ ================ ======================== 指令列表 ************************ ================================ ======================== ================================================ ===================================================================================== ======================== 操作 指令字符 ID数字编号 返回 举例 ================================ ======================== ================================================ ===================================================================================== ======================== 开启算法 O 或 o 算法编号 1:成功, 0:失败 O7开启人脸识别 关闭算法 C 或 c 算法编号 1:成功, 0:失败 C7关闭人脸识别 查询检测结果数量 N 或 n 算法编号 检测到物体的数量,0为未检测到 N7返回人脸数量 获取水平x坐标 X 或 x 检测结果的编号,可省略,默认为1 物体的水平坐标值 X1返回第1个人脸x坐标 获取垂直y坐标 Y 或 y 检测结果的编号,可省略,默认为1 物体的垂直坐标值 Y3返回第3个人脸y坐标 获取物体w宽度 W 或 w 检测结果的编号,可省略,默认为1 物体的宽度值 W返回第1个人脸宽度 获取物体h高度 H 或 h 检测结果的编号,可省略,默认为1 物体的高度值 H返回第1个人脸高度 获取物体分类标签 L 或 l 检测结果的编号,可省略,默认为1 物体的分类标签 L2返回第2个人脸的分类标签 获取所有结果 A 或 a 检测结果的编号,可省略,默认为1 :ref:`指令A返回结果说明` A返回第1个人脸的所有结果 获取图片 I 或 i 无 :ref:`图片数据帧` I返回一张图片 ================================ ======================== ================================================ ===================================================================================== ======================== .. _chapter_simple_protocol_a_index: **指令A返回结果说明** 返回格式为:A+001+002+003+004+005 其中001为X坐标,002为Y坐标,003为W宽度,004为H高度,005为L标签 为方便解析,每个结果采用3位固定的数字组成,不足部分用0填充 **注意,对于线段检测和二维码等具有特殊返回结果的算法,返回结果的含义见各算法的介绍** .. _chapter_image_protocol_index: 图像传输协议 ---------------- Sentry2支持图像传输功能,可以将图片发送给WiFi芯片,UART端口或USB端口,支持RGB565,JPEG,JPEG-Base64格式。 指令格式 **************** START | TYPE | WIDTH | HEIGHT | LEN | DATA ======== ================ ================ ======== 符号 含义 长度 描述 ======== ================ ================ ======== START 帧头 1Byte 表示一个数据包的开始,始终为0xF0 TYPE 图像格式 1Byte 2=RGB565,4=JPEG,5=JPEG-Base64 WIDTH 图像宽度 2Bytes 图像的宽度 HEIGHT 图像高度 2Bytes 图像的高度 LEN 数据长度 4Bytes 图像数据长度 DATA 图像数据 LEN 图像数据 ======== ================ ================ ======== **RGB565**:图像原始采样数据,采用2个字节表示一个像素点,数据较大,一副320×240的图片需要153600字节 **JPEG**:一种常见的图像压缩格式,可以将RGB565图片压缩至10~30KB,压缩率的大小取决于图片的颜色丰富度,颜色较少则压缩率高 **JPEG-Base64**:是将JPEG图片按照Base64规则进行编码,将十六进制HEX数据转为文本字符,便于网络传输和解析,通常用于云端图像识别