臻识车牌识别相机对接(mqtt协议):
华夏车牌识别相机对接(mqtt协议):
芊熠车牌识别相机对接(mqtt协议):
大华车牌识别相机对接(mqtt协议):
海康威视车牌识别相机对接(otap协议):
车牌识别一体机
MQTT协议开发文档
本手册可能包含技术上不准确的地方或文字错误,欢迎您的纠正。 本手册内容将做定期的更新,更新内容将在本手册的新版本中加入。 我们随时会改进或更新本手册中描述的产品或程序。 |
版本变更记录
版本号 | 拟制日期 | 版本描述 | 存档编号 |
1.0.5 |
| 2021-9-30 | |
1.0.4 |
| 2021-5-25 | |
1.0.3 | 1.支持mqtt+oss | 2020-11-11 | |
1.0.1 | 1. 发布第一个版本 | 2020-01-04 |
- MQTT程序打包
- 修改对应包里面的配置文件server_conf.json,将mqtt账户信息填入配置中,如果需要oss上传图片功能,需填入oss账户信息。
{
"server_ip": "yfptos.cn", // mqtt服务器地址
"server_port": 1883, // mqtt服务器端口
"mqtt_user_name": "Ca_VZ", // mqtt用户名
"mqtt_password": "x511!8", // mqtt 密码
"white_list_mode": 0, // 白名单模式 0脱机启用, 1启用 2不启用
"oss_endpoint":"", // oss账号信息(对应阿里云oss的信息)
"oss_access_key_id":"",
"oss_access_key_secret":"",
"oss_bucket_name":"",
"send_plate_result":1, // 是否发送车牌结果
"send_big_image":0, // 是否传大图
"send_plate_image":0, // 是否传小图
"parking_lot_id":0 // 停车场id
}
- 打包程序
配置后server_conf.json文件后,启动pack_tool下的PatcketTool.exe程序,点击”添加文件”打包mqtt程序
- 在网页中升级打包好的程序UserApp.bin文件,支持mqtt功能
- 升级后就支持mqtt功能了
相机发布mqtt消息的topic为:"/device/push/result"
相机订阅mqtt消息的topic为:"/device/" + device_sn + "/command" (device_sn为设备序列号)
二、车牌识别结果推送
oss图片路径命名规则:
/picture/停车场ID/摄像机SN/日期/当前小时(两位数)/日期_时分秒_随机三位数.jpg
场景图片:/picture/10102/00D150220100081/20200110/14/20200110_144346_632.jpg
车牌图片:/picture/10102/00D150220100081/20200110/14/20200110_144346_632_plate.jpg
数据内容:JSON格式(车牌汉字utf8编码)
{
"AlarmInfoPlate" : {
"channel" : 0,
"deviceName" : "IVS",
"ipaddr" : "192.168.1.100",
"result" : {
"PlateResult" : {
// 红色字体部分为扩展信息
"plate_true_width" : 80,
"plate_distance" : 40,
"is_fake_plate" : 1,
"car_location" :
{
"RECT" : {
"bottom" : 545,
"left" : 871,
"right" : 1365,
"top" : 391
}
},
"car_brand" :
{
"brand" : 6
"year" : 2018
"type" : 1
},
"feature_Code" : "asf", // 扩展信息结束
"bright" : 0,
"carBright" : 0,
"carColor" : 0,
"colorType" : 0,
"colorValue" : 0,
"confidence" : 0,
"direction" : 0,
"imagePath" : "/picture/10102/00D150220100081/20200110/14/20200110_144346_632.jpg",
"license" : "_无_",
"location" : {
"RECT" : {
"bottom" : 0,
"left" : 0,
"right" : 0,
"top" : 0
}
},
"timeStamp" : {
"Timeval" : {
"decday" : 8,
"dechour" : 10,
"decmin" : 26,
"decmon" : 6,
"decsec" : 28,
"decyear" : 2018,
"sec" : 1441815171,
"usec" : 672241
}
},
"timeUsed" : 0,
"triggerType" : 4,
"type" : 0,
"plateid" : 123
}
},
"serialno" : "eff50e18-e3d3862b"
}
}
说明:
字段名称 | 类型 | 取值范围 | 是否必须 | 描述 |
AlarmInfoPlate | json | 无 | 是 | 推送结果为车牌识别结果 |
serialno | string | 无 | 是 | 设备序列号,设备唯一 |
channel | int | [0, 100] | 是 | 默认通道号(预留) |
deviceName | string | 无 | 是 | 设备名称 |
ipaddr | string | 无 | 是 | 设备ip地址 |
result | json | 无 | 是 | 实际数据 |
PlateResult | json | 无 | 是 | 车牌识别结果信息 |
license | string | 无 | 是 | 车牌号字符串,如“京AAAAAA” |
colorValue | int | [0, 32] | 是 | (预留) |
colorType | int | [0, 5] | 是 | 车牌颜色 0:未知、1:蓝色、2:黄色、3:白色、4:黑色、5:绿色 |
type | int | [0, 19] | 是 | 车牌类型 0:未知车牌:、1:蓝牌小汽车、2::黑牌小汽车、3:单排黄牌、4:双排黄牌、 5:警车车牌、6:武警车牌、7:个性化车牌、8:单排军车牌、9:双排军车牌、10:使馆车牌、11:香港进出中国大陆车牌、12:农用车牌、13:教练车牌、14:澳门进出中国大陆车牌、15:双层武警车牌、16:武警总队车牌、17:双层武警总队车牌、18:民航车牌、19:新能源车牌 |
confidence | int | [0, 100] | 是 | 识别结果可信度 1-100 |
bright | int | 无 | 是 | 亮度评价(预留) |
direction | int | [0, 4] | 是 | 车的行进方向,0:未知,1:左,2:右,3:上, 4:下 |
location | json | 无 | 是 | 车牌在图片中位置 |
RECT | json | 无 | 是 | 位置为矩形区域;left\right\top\bottom:车牌在图片中位置 |
timeUsed | int | 无 | 是 | 识别所用时间 |
carBright | int | 无 | 是 | 车身亮度(预留) |
carColor | int | 无 | 是 | 车身颜色(预留) |
timeStamp | json | 无 | 是 | 识别结果对应帧的时间戳 |
Timeval | json | 无 | 是 | 时间戳结构体类型 |
sec | uint32 | 无 | 是 | 从1970年1月1日到对应帧的秒 |
dechour | int | [0, 60] | 是 | 时间,小时 |
decmin | Int | [0, 60] | 是 | 时间,分钟 |
decsec | Int | [0, 60] | 是 | 时间,秒 |
decday | Int | [0, 31] | 是 | 时间,天 |
decmon | Int | [0, 12] | 是 | 时间,月 |
decyear | Int | [0, 2038] | 是 | 时间,年 |
usec | uint32 | 无 | 是 | 从1970年1月1日到对应帧的毫秒 |
triggerType | int | [1, 8] | 是 | 当前结果的触发类型:1:自动触发类型、2:外部输入触发(IO输入)、4:软件触发(SDK)、8:虚拟线圈触发 |
imagePath | string | 无 | 是 | 识别大图片的路径 |
plateid | unsigned int | 无 | 否 | 识别结果车牌ID |
plate_true_width | int | [10, 1000] | 是 | 车牌真实宽度 |
plate_distance | int | [0, 1000] | 是 | 车牌距离 |
is_fake_plate | int | [0, 1] | 是 | 是否伪车牌,0:真实车牌,1:伪车牌 |
car_location | 无 | 无 | 是 | 车头位置 |
car_brand | 无 | 无 | 无 | 车辆品牌 |
brand | int | [0, 128] | 是 | 车辆品牌 |
year | int | [0, 65535] | 是 | 车辆年份 |
type | int | [0, 128] | 是 | 车辆类型 |
feature_Code | string | 长度[0, 20] | 是 | 车辆特征码 |
IO口触发信息推送
开启了外部输入1触发或者2触发,输入有变化时,会推送json格式数据,内容如下:
数据内容:JSON格式(utf8编码)
{
"AlarmGioIn" :
{
"deviceName" : "IVS",
"ipaddr" : "192.168.109.40",
"result" :
{
"TriggerResult" :
{
"source" : 3, .
"value" : 1
}
},
"serialno" : "d85b1269-8f942256"
}
}
其中,TriggerResult中:
source=0代表是IO输入1;
source=1代表是IO输入2;
source=2代表是IO输入3;
source=3代表输入TCP 触发输入;
source=4代表是IO输入4;
value表示触发时输入的状态;
其他参数的含义和车牌识别结果推送中相同。
串口数据推送
在相机收到485数据时,会主动推送485数据;
数据内容:JSON格式(utf8编码)
{
"SerialData":{
"channel" : 0, // 通道号,当前为0
"serialno" : "cead13eb-1a198cd7", //设备序列号
"ipaddr" : "192.168.1.100", // 设备ip
"deviceName" : "IVS", // 设备名称
"serialChannel" : 0, //串口的通道号,通道0为485口1,通道1根据跳线方式为485口2或者232
"data": "Y2guY29tFw==",//串口数据,采用base64编码
"dataLen" : 7//串口数据实际长度
}
}
三、业务处理
1. 云端业务系统可主动发送指令给mqtt服务器,服务器会转发到相机端,相机执行指令;
2. 相机执行指令后,会返回执行结果。如下所示,开闸命令的结果返回200代表成功,其他值代表失败,失败信息会显示到error_msg字段中。如果发送命令带了msgId,相机端会返回同样的id,用于判断此条开闸命令是否执行成功。
{
"cmd":"info",
"msgId":"2020-4-10 16:23:24 454",
"error_msg":"success",
"ipaddr":"192.168.6.112"
"serialno":"843b0b0c-c6ee1db1",
"state_code":"200"
}
3.1控制IO开闸
{
"Response_AlarmInfoPlate":
{
"info":"ok",//回复ok开闸
"msgId":"2020-4-10 16:23:24 454",
"delay":1000,// 继电器闭合时间(0-5000)毫秒
"channelNum":0// ....其他数据
}
}
3.2控制串口推送485数据
可一次下发多条485指令,每条485之间相机会间隔200ms执行,避免485数据粘包。
{
"Response_AlarmInfoPlate":
{
"serialData" :[
{
"serialChannel":0,
"data" : "...",
"dataLen" : 123
},
{ //数据1,可以有或者没有,收到后将发送到对应串口
"serialChannel":1,
"data" : "....",
"dataLen" : 123
}//数据2,可以有或者没有,收到后将发送到对应串口
]
// ....其他数据
}
}
3.3手动触发识别
{
"Response_AlarmInfoPlate":
{
"manualTrigger" : "ok",//回复ok进行手动触发
// ....其他数据
}
}
3.4设置相机时间
时间格式必须为下面所示,不然不会执行成功。
{
"Response_AlarmInfoPlate":
{
"cmd":"set_datetime",
"datetime":"2019-03-07 13:01:02"
}
}
3.5白名单操作
注意:最多操作5条白名单数据;
1.命令使用JSON格式,格式如下
{
"Response_AlarmInfoPlate": {
...// 其他数据
"white_list_operate":{
"operate_type" : 0,
"white_list_data":
[
{
"plate": "京A12345",
"enable": 1,
"need_alarm": 1,
"enable_time": "2018-01-01 11:11:11",
"overdue_time": "2018-01-01 11:11:11"
},
{
"plate": "川A12345",
"enable": 1,
"need_alarm": 1,
"enable_time": "2018-01-01 11:11:11",
"overdue_time": "2018-01-01 11:11:11"
}
]
}
}
}
2. 字段含义如下:
字段名称 | 类型 | 取值范围 | 是否必须 | 描述 |
operate_type | int | [0,1] | 是 | 操作类型(0:增加,1:删除) |
white_list_data | 无 | 个数[1, 5] | 是 | 白名单数组:单次操作,最大支持5条 |
plate | string | 长度[7, 15] | 是 | 车牌(GB2312) |
enable | int | [0, 1] | 是 | 当前名单是否有效(0:无效, 1,:有效) |
need_alarm | int | [0, 1] | 是 | 当前名单是否为黑名单(0:否,1:黑名单) |
enable_time | string | 固定格式、固定长度:19 | 否 | 当前名单生效时间,如:2018-01-01 11:11:11 |
overdue_time | string | 固定格式、固定长度:19 | 否 | 当前名单过期时间,如:2018-01-01 11:11:11 |
3.消息示例:
同时增加两条白名单数据(多条数据,格式一致):
第一条没有白名单有效时间,则默认白名单永久有效;
第二条有白名单有效时间,表示当前白名单在这个时间段内有效;
{
"Response_AlarmInfoPlate": {
...// 其他数据
"white_list_operate":{
"operate_type" : 0,
"white_list_data":
[
{
"plate": "京A12345",
"enable": 1,
"need_alarm": 0
},
{
"plate": "川A12345",
"enable": 1,
"need_alarm": 0,
"enable_time": "2018-01-01 11:11:11",
"overdue_time": "2019-01-01 11:11:11"
}
]
}
}
}
- 删除两条白名单的消息示例:
{
"Response_AlarmInfoPlate": {
...// 其他数据
"white_list_operate":{
"operate_type" : 1,
"white_list_data":
[
{
"plate": "京A12345"
},
{
"plate": "川A12345"
}
]
}
}
}
- 删除全部白名单的消息示例:
{
"Response_AlarmInfoPlate": {
...// 其他数据
"white_list_operate":{
"operate_type" : 1,
"white_list_data":
[
{
"plate": ""
}
]
}
}
}
3.6 控制相机截图
{
"Response_AlarmInfoPlate":
{
"TriggerImage":"ok",//ok截图
"msgId":"2020-4-10 16:23:24 454",
}
}
截图命令回复:
{
"cmd":"TriggerImage",
"msgId":"2020-4-10 16:23:24 454",
"error_msg":"success",
"ipaddr":"192.168.6.112"
"serialno":"843b0b0c-c6ee1db1",
"oss_path":"/picture/12/843b0b0c-c6ee1db1/20200905/14/144346_632.jpg",
"state_code":"200"
}