通讯协议¶
当使用串口设备与主控进行数据交互时,需要采用一定的交互协议才可以完成数据或指令的传输。Sentry系列视觉传感器支持 标准协议指令 和 简单协议指令
Sentry系列视觉传感器采用相同的通讯协议格式,但不同的产品所支持的协议指令会略有差别,下文将以 Sentry2视觉传感器 为例进行介绍,其他详细信息或技术需求可以联系我们:
标准协议指令¶
标准协议指令具有规范的数据格式,结合寄存器表可以实现完整的数据交互功能和较高的通信效率。
指令格式¶
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
简单协议指令¶
该指令没有复杂的协议规范,只需要通过串口发送简单的字母和数字就可以开启算法和获取数据,无需开发驱动库,适用于任何有UART功能的主控平台,但也只适合简单的应用场景
指令格式¶
发送
CMD | DATA | END
符号 |
含义 |
长度 |
描述 |
---|---|---|---|
CMD |
指令字符 |
1 |
指令字符,详见指令列表 |
DATA |
参数 |
NA |
指令参数 |
END |
结束符 |
1 |
非必须,也可以为换行符,回车符,或者空格 |
返回
DATA | END
符号 |
含义 |
长度 |
描述 |
---|---|---|---|
DATA |
结果 |
NA |
返回结果 |
END |
结束符 |
1 |
均以换行符结尾 |
指令列表¶
操作 |
指令字符 |
参数 |
返回 |
举例 |
---|---|---|---|---|
开启算法 |
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 |
A2:返回第2组结果的所有数值 |
|
获取图片 |
I 或 i |
无 |
I:返回一张图片 |
|
设置参数 |
S 或 s |
参数ID+X参数+Y参数+W参数+H参数+L参数 |
1:成功, 0:失败 |
S2+100+50+10+10+0,假设开启了颜色算法,设置第2组参数,x=100,y=50,w=10,h=10,l=0 |
指令A返回结果说明
返回格式为:A+001+002+003+004+005
其中001为X坐标,002为Y坐标,003为W宽度,004为H高度,005为L标签
为方便解析,每个结果采用3位固定的数字组成,不足部分用0填充
注意,对于线段检测和二维码等具有特殊返回结果的算法,返回结果的含义见各算法的介绍
指令S设置参数说明
不是所有算法都可以设置参数,设置参数前需要先开启算法
指令S后的第一个参数为Param-ID,即你所要设置第几组参数,最多支持25个参数,不应超过此值
设置参数时需要同时写入XYWHL五个参数,如果输入参数不足,则会默认为0
数字间的连接符号“+”不可省略
图像传输协议¶
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数据转为文本字符,便于网络传输和解析,通常用于云端图像识别