分析结果数据结构说明.md 77.4 KB

1.繁星分析结果数据结构说明

分析结果是指对视频进行分析后输出的数据内容,所有分析结果都共有的部分称为 公共部分 ,其余部分根据事件大类(event_cate)和事件类型(event_type)而有所不同,不同部分都包含在 event_data 中,以下分别说明

1.1. 公共部分

{
    "event_cate":  "xxx",                      # 必填,string, 事件大类,目前分为face, behavior, trafficflow
    "event_type":  "xxx",                      # 可选,string, 事件类型。
    "event_refid": "123456",                   # 必填,事件的全局唯一refid
    "event_dt":    "2017-03-20T02:30:23.123",  # 必填,日期时间型string,事件发生的时间(UTC时间)  ,可能到毫秒,对于过车时间,填写结束时间。
    "dev_unid":    "xxxx",                     # 必填,string,即推送数据的设备登录(login)  平台时获取的user_unid
    #################################
    # (vdev_unid, vchan_duid)vchan_refid都可以唯一标识该视频通道,vchan_refid的填写优先级更高。
    # 存在vchan_refid而不存在vchan_duid时,可以把vchan_duid填写为vchan_refid的值。
    # vchan_refid用于数据发送设备无法获取vdev_unidvchan_duid的情况。
    "vdev_unid":    "xxxx",                    # 可选,string,视频通道所属的设备在平台分配的unid
    "vchan_duid":   "xxxx",                    # 可选,string,视频通道在其所在设备的id,只要设备内唯一即可。
    "vchan_refid":  "xxxx",                    # 可选,string,外部给出的视频通道参考id,必须在系统内唯一。
    ##################################
    "aux_dev_info": {                          # 可选,辅助设备信息
        "camera_refid": "xxxxx"                # 可选,string,相机的硬件id
    },
    ##################################
    # 这部分字段目前仅用于繁星,非非繁星任务可不填。
    "task_type":   "test",                     # 必填,如果是"test",表示这是一个测试任务,如果是"normal"表示这是一个正式任务,默认normal
    "task_id":     "xxxxxx",                   # 必填,任务id,用于把同一个任务的结果一次查询出来。
    "subtask_id":  "xxxxxx",                   # 必填,任务id,用于把同一个子任务的结果一次查询出来。
    "source_type": "pull_video_stream",        # 可选,任务输入源的类型,目前有三种push_pic_filespull_video_streampull_pic_files(  最后一种目前没有用到)
    "test_pic_file": "xxxx",                   # 可选,仅当task_typetest时,才可能有本字段,表示图片测试任务的输入图片的文件名。
    "test_frame_no": "xxxx",                   # 可选,仅当task_typetest时,才可能有本字段,表示视频测试任务的对应帧编号。
    ##################################
    "pics": [                                  # 可选,图片数组
        {
           "pic_base64":  "xxxx",              # src_url二选一,base64编码的图片数据
           "src_url":     "ftp://xxxx",        # pic_base64二选一,原始图片下载地址,也可以是http://
           "format":      "jpg",               # 可选,图像格式,一般用原始文件的扩展名
           "pic_unid":    "123456",            # 可选,平台图片服务器给返回的unid(说明:当使用上传文件的时候客户端事先通过调用平台服务器的上传图片文件接口并返回unid
           "shoot_dt":    "xxxx",              # 可选,拍摄时间,UTC
           "width": 1920,                      # 可选,图片宽度
           "hight": 1080,                      # 可选,图片高度
           "ofilename":   "xxxx",              # 可选,图片的原始文件名
           "type":        "xxx",               # 可选,图像类型,目前用于人脸抓拍机,head(头像),   body(全身)
           "object_rect": {                    # 可选,该值为目标物体对应当前图片的坐标位置
                    "top": 0.1,
                    "left": 0.1,
                    "bottom": 0.2,
                    "right": 0.2
            },
           "feature_rect": {                   # 可选,该值为特征识别对应当前图片的坐标位置
                    "top": 0.1,
                    "left": 0.1,
                    "bottom": 0.2,
                    "right": 0.2
           }
        },
        ...
    ],
    "video": [                                    # 可选,录像数组
       {
          "video_base64": "",                     # src_url二选一,base64编码后的录像文件数据
          "src_url": "ftp://xxx.avi",             # video_base64二选一,原始录像下载地址,也可以是http://
          "start_dt": "2017-03-20T12:30:08.000",  # 必选,录像开始时间
          "end_dt": "2017-03-20T12:30:13.000",    # 必选,录像结束时间
          "format": "avi",                        # 必选,录像格式
          "unid":    "123456",                    # 可选,平台图片服务器给返回的unid(说明:当使用上传文件的时候客户端事先通过调用平台服务器的上传录像文件接口并返回unid
          "width": 1920,                          # 可选,画面宽度
          "height": 1080,                         # 可选,画面高度
          "fps": 25,                              # 可选,帧率
          "ofilename": "xxxx.avi"                 # 可选,录像的原始文件名
       },
       ...
    ]
    "event_data": {...}
}

1.2. 交通

1.2.1 过车事件

  • 本事件仅指机动车事件。
  • 所有在统一编码服务中已经编码的字段,在本结构中仅仅只有code部分,name从统一编码服务获取,例如车牌颜色,车辆类型等。需要区别的是location,department等字段虽然有编码,但是并非统一标准,在不同的应用系统中有不同的含义,因此不属于统一编码,所以既包含code,又包含name。

Request Body:

{
  "eventuate": "traffic",
  "event_type": "vehicle",                   # 机动车事件
  ...   # 公共部分, 请参考页首说明
  "event_data": {
    # 通用信息
    "version": "VT-CAM-S2E-1.0.0",           # 车辆检测事件结果
    "speed": 30.33,                          # 车辆速度
    "model": "1",                            # 车头或车尾模式: '0':车尾,'1':车头
    "start_dt": "2017-03-20T12:30:10.123",   # 开始时间
    "end_dt": "2017-03-20T12:30:10.123",     # 结束时间
    "ID": "11111111111",                     # 该过车信息的ID
    # 位置
    "location": {                            # 地点信息
      "name": "环洋大厦",
      "code": "000000",
      "department": {              # 管辖部门
        "name": "中关村支队",
        "code": "123456"
      },
      "direction": {
        "code": "01"               # 卡口方向编码, 参考'交通字典 -> 卡口方向'
      }
      "drive_direction": {
        "code": "01"               # 行驶方向编码, 参考'交通字典 -> 卡口方向'
      }
    },
    # 设备
    "device": {
      "name": "TrafficCam1",
      "code": "11111",
      "ip": "192.168.10.168",
      "model": "VT-CAM-S2E",
      "host": "1111111111"    # 主机编号
    },
    "lane": {                 # 车道
      "code":   "01",         # 车道类型编码, 参考'交通字典 -> 车道类型'
      "number":  1,           # 车道编号
      "description": "直行车道"
    },
    ###########################
    # 机动车特定信息
    "vehicle": {              # 必填,车辆
      "image": "全景1",       # 可选,该值标识信息的检测源图片名称,下同
      "global_feature": {     # 可选,全局特征
          "AlignParameters": [1.1, 2.0,  ...  ],
          "FeatureVector": [1.1, 2.0,  ...  ]
      },
      "local_feature": {     # 可选,局部特征
          "nFeatureCount": 10,
          "FeatureVector": [1.3, 1.4]
      },
      "rect": {               # 可选,该值对应检测区域在源图上的相对坐标(0-1000,需自行转换成百分比)
        "top": 0.1,
        "left": 0.1,
        "bottom": 0.2,
        "right": 0.2
      },
      "plate": {                   # 可选,车牌
        "text": "京A12345",
        "head_text": "京",
        "width": 100,              # 单位像素
        "other_text": "A12345",
        # "color": "蓝底白字",
        "color_code": "2",         # 号牌颜色代码,参考'交通字典 -> 号牌颜色'
        # "type": "小型汽车号牌",
        "type_code": "02",         # 号牌类型代码, 参考'交通字典 -> 号牌类型'
        "score": 90,
        "char_count": 7,           # 车牌各个字符的识别得分,越高越准备
        "char_score": [88, 90,78,90,99,97,98],  # 可选,每个字符的置信度
        "image": "全景1",
        "rect": {                               # 可选,车牌的相对位置
          "top": 0.1,
          "left": 0.1,
          "bottom": 0.2,
          "right": 0.2
        }
      },
      "body": {                   # 可选,车身识别信息
        "color": { # 颜色
          "code": "01",           # 车身颜色,  参考'交通字典 -> 车身颜色'
          "score": 99
        },
        "type": {                 # 类型
          "code": "01",           # 车辆类型  参考'交通字典 -> 车辆类型'
          "score": 98
        },
        "logo": {                 # 可选,车标
          "code": "01",
          "score": 88,
          "image": "全景1",
          "rect": {
            "top": 0.1,
            "left": 0.1,
            "bottom": 0.2,
            "right": 0.2
          }
        },
          "sublogo": {                # 可选,车辆子品牌
          "name": "BMW 530Li(宝马5系)"
        }
      },
      "tracks": [                  # 可选,视频测试任务输出的跟踪轨迹
         {"frame_no":1, "rect": [1,2,3,4]},
         {"frame_no":2, "rect": [1,2,3,4]},
         {"frame_no":3, "rect": [1,2,3,4]},
              ...
      ]
    },
    "RefinedFeature": {                              # 可选,精细化识别
        "rAnnualInspection": [[1,2,3,4], [2,3,4,5]], # 年检标,区域挨个赋值,剩余区域全是0, [top, left, bottom, right]
        "rDecoration": [[1,2,3,4], [2,3,4,5]],       # 摆件,区域挨个赋值,剩余区域全是0
        "rPendant": [[1,2,3,4], [2,3,4,5]],          # 吊坠,区域挨个赋值,剩余区域全是0
        "rSunshading":[[1,2,3,4], [2,3,4,5]]         # 遮阳板区域挨个赋值,剩余区域全是0
    }
    "driver": {       # 可选,驾驶员
      "holdingchild":{ # 前排是否抱小孩
           "score":0,
           "state":"0" #  -1表示未检测(拒识)1表示前排抱小孩,0表示前排未抱小孩
       },
      "safe_belt": [  # 安全带检测信息,该数组包含两个值,第一个为主驾驶位,第二个为副驾驶位
        {
          # 主驾驶、副驾驶的安全带状态 -1表示未检测(拒识)0表示未系安全带,1表示系安全带
          "state": "1",
          "score": 90
        },
        {
          "state": "1",
          "score": 99
        }
      ],
      "image": "全景1",   # 主驾驶、副驾驶的人脸识别状态(是否有人)
      "face": [
        {
          "state": "1",   # -1表示未检测(拒识)0表示未识别(驾驶位上无人),1 表示识别(驾驶位上有人)
          "rect": {
            "top": 0.1,
            "left": 0.1,
            "bottom": 0.2,
            "right": 0.2
          }
        },
        {
          "state": "0",
          "rect": {
            "top": 0,
            "left": 0,
            "bottom": 0,
            "right": 0
          }
        }
      ],
      "phone": {              # 可选,驾驶人员是否打电话 -1表示未检测(拒识)0表示未打电话,1表示打电话
           "state": "1",
           "score": 99
       }
    },
    "illegal": {              # 可选,违法信息,如果不违法,本字段可以不出现,也可以出现,但是"state"0
      "state": 1,             # 该违法信息是否可用
      "code": "04",           # 违法行为代码,  参考'交通字典 -> 违法行为'
      "detail": {             # 违法详情,根据code而不同
        # 超速违法信息
        "limit_speed": 120.0, # 路段限速
        "spark_speed": 130.0, # 起拍速度
        # 超速比, 只对超速有效
        "over_speed_rate": 1.2,
        # 闯红灯违法信息, 只对闯红灯有效
        "start_dt": "2017-03-20T12:30:10.123", # 红灯开始时间
        "end_dt": "2017-03-20T12:31.10.123", # 红灯结束时间
        "limit_time": [          # 违法开启检测时间段,
          {
            "use": 1,
            "start_dt": "0000-00-00T07:00:00.000",
            "end_dt": "0000-00-00T11:00:00.000"
          },
          {
            "use": 1,
            "start_dt": "0000-00-00T12:00:00.000",
            "end_dt": "0000-00-00T18:00:00.000"
          }
        ]
      }
    }
  }
}

Response Body:

{
    "ecode":200,
    "enote":"xxxx"
}

1.2.2.非机动车事件

Request Body:

{
  "event_cate": "traffic",
  "event_type": "xcycle",                    # 非机动车事件,包括自行车,摩托车,三轮车三种车型
  ...   # 公共部分, 请参考页首说明
  "event_data": {
    # 通用信息
    "version": "VT-CAM-S2E-1.0.0",
    "speed": 30.33,
    "model": "1",
    "start_dt": "2017-03-20T12:30:10.123",
    "end_dt": "2017-03-20T12:30:10.123",
    "ID": "11111111111",
    # 位置
    "location": {
      "name": "环洋大厦",
      "code": "000000",
      "department": {              # 管辖部门
        "name": "中关村支队",
        "code": "123456"
      },
      "direction": {
        "code": "01"
      }
      "drive_direction": {
        "code": "01"
      }
    },
    # 设备
    "device": {
      "name": "TrafficCam1",
      "code": "11111",
      "ip": "192.168.10.168",
      "model": "VT-CAM-S2E",
      "host": "1111111111"
    },
    "lane": {                 # 车道
      "code":   "01",         # 车道类型编码, 参考'交通字典 -> 车道类型'
      "number":  1,           # 车道编号
      # "description": "直行车道"
    },
    ###########################
    # 非机动车特定信息
    "xcycle_type":  "motorcycle"    # 必填,车辆类型,motorcycle, bicycle, tricycle共三种
    "xcycle": {                     # 车辆总体信息
      "image": "全景1",             # 该值标识信息的检测源图片名称,下同
      "rect": {                     # 该值对应检测区域在源图上的相对坐标(0-1)
        "top": 0.1,
        "left": 0.1,
        "bottom": 0.2,
        "right": 0.2
      },
    "b_shared_bicycle":0,           # 是否是共享单车: 0:不是,1:是
    "color":                                        # 共享单车颜色
    {
             "code": "01",
             "score": 99,
             "name": "橙"
    },
      "company":{                   #非机动车所属运行商信息
        "code":"0"                  #运营商所属编码, 参考'交通字典 -> 公司类型'
      }
    },
    "driver": {       # 驾驶员
      "face": [
        {
          "state": "1",             # -1表示未检测(拒识)0表示未识别(驾驶位上无人),1 表示识别(驾驶位上有人)
          "rect": {                 # 人脸位置
            "top": 0.1,
            "left": 0.1,
            "bottom": 0.2,
            "right": 0.2
          },
          "with_hats": 0,     # 是否带着帽子: 0:没戴帽子,1:戴帽子
          "sex": "1",               # 性别,"1"男,"2"女,"0"不确定
          "upbody": {
            "code": "01",           # 上半身颜色,  参考'交通字典 -> 车身颜色'
            "score": 99
          },
          "lobody": {
            "code": "01",           # 下半身颜色,  参考'交通字典 -> 车身颜色'
            "score": 99
          }
        }
      ]
    },
    "illegal": {
       ... # 违法信息,参见过车事件
    }
  }
}

Response Body:

{
    "ecode":200,
    "enote":"xxxx"
}

1.2.3.行人事件

Request Body:

{
  "event_cate": "traffic",
  "event_type": "pedestrian",               # 行人事件
  ...   # 公共部分, 请参考页首说明
  "event_data": {
    # 通用信息
    "version": "VT-CAM-S2E-1.0.0",
    "speed": 30.33,
    "start_dt": "2017-03-20T12:30:10.123",
    "end_dt": "2017-03-20T12:30:10.123",
    "ID": "11111111111",
    # 位置
    "location": {
      "name": "环洋大厦",
      "code": "000000",
      "department": {
        "name": "中关村支队",
        "code": "123456"
      },
      "direction": {
        "code": "01"
      }
      "drive_direction": {
        "code": "01"
      }
    },
    # 设备
    "device": {
      "name": "TrafficCam1",
      "code": "11111",
      "ip": "192.168.10.168",
      "model": "VT-CAM-S2E",
      "host": "1111111111"
    },
    "lane": {                 # 车道
      "code":   "01",         # 车道类型编码, 参考'交通字典 -> 车道类型'
      "number":  1,           # 车道编号
      # "description": "直行车道"
    },
    ###########################
    # 行人特定信息
    "pedestrian": {             # 行人总体信息
      "image": "全景1",
      "rect": {
        "top": 0.1,
        "left": 0.1,
        "bottom": 0.2,
        "right": 0.2
      },
              "height": 0.0
    },
    "driver": {                 # 行人具体信息
      "face": [
        {
          "state": "1",       # -1表示未检测(拒识)0表示未识别(驾驶位上无人),1 表示识别(驾驶位上有人)
          "rect": {           # 人脸位置
            "top": 0.1,
            "left": 0.1,
            "bottom": 0.2,
            "right": 0.2
          },
          "with_hats": 0,     # 是否带着帽子: 0:没戴帽子,1:戴帽子
          "sex": "1",         # 性别,"1"男,"2"女,"0"不确定
          "upbody": {
            "code": "01",     # 上半身颜色,  参考'交通字典 -> 车身颜色'
            "score": 99
          },
          "lobody": {
            "code": "01",     # 下半身颜色,  参考'交通字典 -> 车身颜色'
            "score": 99
          }
        }
      ]
    },
    "illegal": {
       ... # 违法信息,参见过车事件
    }
  }
}

Response Body:

{
    "ecode":200,
    "enote":"xxxx"
}

1.2.4.交通流量事件

Request Body:

{
  "event_cate": "traffic",
  "event_type":  "tflow",

  # *公共部分, 请参考页首说明*

  "event_data": {               # 交通流量事件结果
    # 位置
    "location": {                            # 地点信息
      "name": "环洋大厦",
      "code": "000000",
      "department": {              # 管辖部门
            "name": "中关村支队",
            "code": "123456"
      },
      "direction": {
            "code": "01"               # 卡口方向编码, 参考'交通字典 -> 卡口方向'
      }
      "drive_direction": {
            "code": "01"               # 行驶方向编码, 参考'交通字典 -> 卡口方向'
      }
    },
    # 设备
    "device": {
      "name": "TrafficCam1",
      "code": "11111",
      "ip": "192.168.10.168",
      "model": "VT-CAM-S2E",
      "host": "1111111111"    # 主机编号
    },
    "big_vehicle":[  #机动车(大车
            {
              "road": "12"             # 车道标志符编码
              "direction":  "01",      # 行驶方向编码
              "sample_dura": 120,      # 采样周期()
              "sample_num":  360,      # 车流量,辆/采样周期
              "velocity":   60,        # 流速
              "velocity_unit": "km/h", # 流速单位
              "occupy":   0.62,        # 车道占有率
              "distance": 6.5,         # 车头间距
              "queue_length": 12       # 排队长度
            },
            ...
    ],
    "small_vehicle":[  #机动车(小车
            {
              "road": "12"             # 车道标志符编码
              "direction":  "01",      # 行驶方向编码
              "sample_dura": 120,      # 采样周期()
              "sample_num":  360,      # 车流量,辆/采样周期
              "velocity":   60,        # 流速
              "velocity_unit": "km/h", # 流速单位
              "occupy":   0.62,        # 车道占有率
              "distance": 6.5,         # 车头间距
              "queue_length": 12       # 排队长度
            },
            ...
    ],
    "xcycle":[    #非机动车
            {
              "road": "12"             # 车道标志符编码
              "direction":  "01",      # 行驶方向编码
              "sample_dura": 120,      # 采样周期()
              "sample_num":  360,      # 车流量,辆/采样周期
              "velocity":   60,        # 流速
              "velocity_unit": "km/h", # 流速单位
              "occupy":   0.62,        # 车道占有率
              "distance": 6.5,         # 车头间距
              "queue_length": 12       # 排队长度
            },
            ...
    ],
    "pedestrian":[   #行人
            {
              "road": "12"             # 车道标志符编码
              "direction":  "01",      # 行驶方向编码
              "sample_dura": 120,      # 采样周期()
              "sample_num":  360,      # 车流量,辆/采样周期
              "velocity":   60,        # 流速
              "velocity_unit": "km/h", # 流速单位
              "occupy":   0.62,        # 车道占有率
              "distance": 6.5,         # 车头间距
              "queue_length": 12       # 排队长度
            },
            ...
    ]
  }
}

Response Body:

{
    "ecode":200,
    "enote":"xxxx"
}

1.2.5.行人流量事件

Request Body:

{
  "event_cate": "traffic",
  "event_type":  "pflow",

  # *公共部分, 请参考页首说明*

  "event_data": {               # 交通流量事件结果
    "start_dt": "2017-03-20T12:30:10.123",
    "end_dt": "2017-03-20T12:30:10.123",
    # 位置
    "location": {                            # 地点信息
      "name": "环洋大厦",
      "code": "000000",
      "department": {              # 管辖部门
            "name": "中关村支队",
            "code": "123456"
      },
      "direction": {
            "code": "01"               # 卡口方向编码, 参考'交通字典 -> 卡口方向'
      }
      "drive_direction": {
            "code": "01"               # 行驶方向编码, 参考'交通字典 -> 卡口方向'
      }
    },
    # 设备
    "device": {
      "name": "TrafficCam1",
      "code": "11111",
      "ip": "192.168.10.168",
      "model": "VT-CAM-S2E",
      "host": "1111111111"    # 主机编号
    },
    "xcycle":[    #非机动车
            {
              "regionid": "12"         # 增加区域ID 来源于ROI 用于区分行人检测区域
              "regionname": "斑马线"   # 增加区域名称
              "direction":  "01",      # 行驶方向编码
              "sample_dura": 120,      # 采样周期()
              "sample_num":  360,      # 车流量,辆/采样周期
              "velocity":   60,        # 流速
              "velocity_unit": "km/h", # 流速单位
            },
            ...
    ],
    "pedestrian":[   #行人
            {
              "regionid": "12"         # 增加区域ID 来源于ROI 用于区分行人检测区域
              "regionname": "斑马线"   # 增加区域名称
              "direction":  "01",      # 行驶方向编码
              "sample_dura": 120,      # 采样周期()
              "sample_num":  360,      # 车流量,辆/采样周期
              "velocity":   60,        # 流速
              "velocity_unit": "km/h", # 流速单位
            },
            ...
    ]
  }
}

Response Body:

{
    "ecode":200,
    "enote":"xxxx"
}

1.2.6 区域人流密度事件

Request Body:

{
  "event_cate": "traffic",
  "event_type":  "pdensity",

  # *公共部分, 请参考页首说明*

  "event_data": {               # 交通流量事件结果
    "start_dt": "2017-03-20T12:30:10.123",
    "end_dt": "2017-03-20T12:30:10.123",
    # 位置
    "location": {                            # 地点信息
      "name": "环洋大厦",
      "code": "000000",
      "department": {              # 管辖部门
            "name": "中关村支队",
            "code": "123456"
      },
      "direction": {
            "code": "01"               # 卡口方向编码, 参考'交通字典 -> 卡口方向'
      }
      "drive_direction": {
            "code": "01"               # 行驶方向编码, 参考'交通字典 -> 卡口方向'
      }
    },
    # 设备
    "device": {
      "name": "TrafficCam1",
      "code": "11111",
      "ip": "192.168.10.168",
      "model": "VT-CAM-S2E",
      "host": "1111111111"    # 主机编号
    },
    "density":[   #人流密度
            {
              "regionid": "12"         # 增加区域ID 来源于ROI 用于区分行人检测区域
              "regionname": "斑马线"   # 增加区域名称
              "persons":"30",          # 区域内人数
              "postion_list": [ [100, 200],[]], # 人员位置
              "head_list":[ [100, 200],[]], # 人头大小  人员位置一一对应
              "area":"10.0",    #区域面积 单位:平方米
              "density":"3", # 人员密度 单位单位面积人数
            },
            ...
    ]
  }
}

Response Body:

{
    "ecode":200,
    "enote":"xxxx"
}

1.3 综治

1.3.1 事件

Request Body:

{
   "event_cate": "behavior",
   "event_type":  "20",             #事件code
   ... # 公共部分
}

event_type name
0 单向越界
1 双向越界
2 进入区域
3 离开区域
4 打架
5 奔跑
11 蒙面
13 异常声音
14 区域徘徊
19 摩的
20 违章摆摊
21 区域排队长度超过阈值
22 区域人数密度超过阈值
23 异物
24 遗撒
25 车辆倒地
26 行人倒地
32 人群聚集
33 安全帽
baitan 摆摊
biaozhipaiyichang 标志牌破损
black 黑名单匹配成功
bycicleruti 自行车入楼
changtong 畅通
cheliangzhuiwei 车辆追尾
daobantingche 道板停车
daoluposun 道路破损
duiji 堆积
feijidongche 非机动车上高速
flow_num 客流数量
fogvisibility 团雾
guanggaopai 移动广告牌
guardraildaodi 护栏倒地
handcartruti 手推车入楼
hengfu 横幅
huangtuluolu 黄土裸露
huanxing 缓行
jinggaidiushi 井盖丢失
jishui 积水
lajiduiji 垃圾堆积
lajiyichu 垃圾溢出
laneoverflow 流量超限
laneoveroccupation 占有率超限
laneovervelocity 速度过低
motoruti 电动车入楼
nixing 逆行
normal 检测到人脸
pedestrian 行人上高速
shigongzhandao 施工占道
tflow 车流量
vehicle 过车事件
weidaimao 未带帽子
white 白名单匹配成功
wuliaoduiji 物料堆积
yichangtingche 异常停车
yongdu 拥堵
zhuozhuobuguifan 着装不规范
zixingcheluanfang 自行车乱放

2.交通900w相机

2.1.协议组成

2.1.1. 协议组成

违章卡口数据接入需要三个消息:注册消息、心跳包消息和抓拍数据上传消息。这三种种消息有共同的消息头部分:VNET、VAS。

​ 注册消息除包含消息头VNET、VAS外还需包括VasRegister信息。

​ 心跳包消息只包含VNET、VAS两部分。

​ 违章卡口数据除包含消息头VNET、VAS外还包括HSCResult、LPRRecord两部分。

​ 所有数据都以二进制数据流的方式发送到文安数据接入平台。不同类型的数据(注册消息、违章卡口数据等)其消息头一样,消息内容根据业务有所不同。

2.1.2.VNET说明

VNet协议包含8个字节的头,其中包括VNet数据包长度、校验码。

VNet数据包长度为4字节int类型的网络字节序(大端序)。其代表逻辑包(VNET、VAS及后续的业务数据)的长度。

后面4字节也为int类型的网络字节序(大端序),校验方式为“VNet数据包长度 ^ 2005002005”的计算结果。VNet协议仅对长度进行了校验,并没有校验内容。

除VNet结构中的数据外,其他数据采用小端序进行传输。

2.1.3.VAS说明

该部分说明了协议的ID、内容及组织格式等信息。

2.1.4.VasRegister说明

该部分代表了注册信息,文安设备接入到其他平台时,该注册消息说明了设备的相关信息。

2.1.5.HSCSystemTime说明

这个结构是一个客户端发起的校时请求,服务端返回一个系统时间。

2.1.6.HSCResult说明

说明了违章卡口数据接入协议的协议号等信息。

2.1.7.LPRRecord 说明

该部分包含了抓拍数据的所有字段内容。

2.2. 数据上传逻辑

抓拍设备需建立到接入平台的TCP长连接。当抓拍设备连接到接入平台后,首先数据向接入平台注册设备信息,然后才能够发送违章卡口数据。当设备重连后,仍需重新注册设备信息。

每隔30秒钟,抓拍设备要向接入平台发送一次心跳包。

2.3.数据结构体

2.3.1 结构体

#ifndef _TRANSMIT_PROTOCOL_H
#define _TRANSMIT_PROTOCOL_H

#include "SCTrafficDef.h"
#define  TRANSMIT_1_1_0_2_EVENT_SIZE 31
typedef struct _DSPLPRRecord_TRANSMIT_1_1_0_2
{
    int                       nDirectionNo;
    char                      sDirectionName[SC_MAX_DEC_WORDS_COUNT];
    char                      sDeviceNo[SC_MAX_DEC_WORDS_COUNT];
    char                      sDeviceName[SC_MAX_DEC_WORDS_COUNT];
    char                      sLocationNo[SC_MAX_DEC_WORDS_COUNT];
    char                      sLocationName[SC_MAX_DEC_WORDS_COUNT];
    int                       nMSNo;                                  //VAID
    int                       nImageW;                                //图像的实际宽高
    int                       nImageH;
    int                       nResultVersion;                         //结果版本号。
    int                       nVehicleID;                             //车辆唯一标识。
    int                       nEventID;                               //事件标识, 一辆车可能有多个事件。
    int                       nRegionID;                              //区域标识对应与区域设置里面的标识。
    int                       nLaneNo;                                //车道号, 与区域设置中的一致。
    int                       nLaneType;                              //车道类型
    int                       nscObjectType;                          //物体类型。
    int                       eventType[TRANSMIT_1_1_0_2_EVENT_SIZE]; //违章类型。
    ScSystemTime              lTimeStart;                             //开始时间
    ScSystemTime              lTimeEnd;                               //结束时间
    void*                     pSnapShotBufList[SC_ResultType_Count];  //照片
    int                       nSnapShotLenList[SC_ResultType_Count];  //照片长度
    void*                     pVideoBuf;                              //录像内容
    int                       nVideoLen;                              //录像长度
    ScSystemTime              SnapShotTimeList[SC_ResultType_Count];  //对应每张图片的时间
    ScRect                    rectFVehicle[SC_ResultType_Count];      //图像上车辆位置的相对坐标(原浮点值*1000)
    int                       intVelocity[SC_ResultType_Count];       //即时速度。
    ScSystemTime              lTimeRedLightBegin;                     //红灯开始时间
    ScSystemTime              lTimeRedLightEnd;                       //红灯结束时间
    int                       bToSave;                                //是仅仅显示还是保存。
    DSPLPRResult              scPlateResult;                          //车牌信息,当bToBeSaved为0时,车牌仅仅参考,1时为最终保存值。
    char                      csVideoFileName[SC_MAX_PATH];           //违法过程录像, 需要Encoder wmpcdcs8.exe
    char                      sGPSData[SC_MAX_PATH]; 
    DSPLimitPeriod            scLimitPeriod[3];                       //限行时段数据
    float                     fCarLimitVelocity;                      //小车限速值,蓝白黑牌为小车
    float                     fTruckLimitVelocity;                    //大车限速值,黄牌车为大货车
    ScLPRRecordType           nLPRRecordType ;                        // 结果类型:一般、前后拍主、从
    char                      sLPRRecordID[SC_MAX_DEC_WORDS_COUNT] ;  // 字符串,唯一标识一个结果,用于前后拍时主从相机结果对应
    ImagePropertyInfo         arrImageInfo[SC_ResultType_Count][16] ; // 图片信息
    char                      szCameraModel[20] ;                     // 相机型号字段
}DSPLPRRecord_TRANSMIT_1_1_0_2;
typedef struct _DSPLPRRecord_TRANSMIT_1_1_0_4
{
    int                       nDirectionNo;
    char                      sDirectionName[SC_MAX_DEC_WORDS_COUNT];
    char                      sDeviceNo[SC_MAX_DEC_WORDS_COUNT];
    char                      sDeviceName[SC_MAX_DEC_WORDS_COUNT];
    char                      sLocationNo[SC_MAX_DEC_WORDS_COUNT];
    char                      sLocationName[SC_MAX_DEC_WORDS_COUNT];

    int                       nMSNo;                                 //VAID
    int                       nImageW;                               //图像的实际宽高
    int                       nImageH;
    int                       nResultVersion;                        //结果版本号。
    int                       nVehicleID;                            //车辆唯一标识。
    int                       nEventID;                              //事件标识, 一辆车可能有多个事件。
    int                       nRegionID;                             //区域标识对应与区域设置里面的标识。
    int                       nLaneNo;                               //车道号, 与区域设置中的一致。
    int                       nLaneType;                             //车道类型
    int                       nscObjectType;                         //物体类型。
    int                       eventType[31];          //违章类型。
    ScSystemTime              lTimeStart;                            //开始时间
    ScSystemTime              lTimeEnd;                              //结束时间
    void*                     pSnapShotBufList[SC_ResultType_Count]; // 照片
    int                       nSnapShotLenList[SC_ResultType_Count]; //照片长度
    ScSystemTime              SnapShotTimeList[SC_ResultType_Count]; //对应每张图片的时间
    ScRect                    rectFVehicle[SC_ResultType_Count];      //图像上车辆位置的相对坐标(原浮点值*1000)
    int                       intVelocity[SC_ResultType_Count];      //即时速度。

    ScSystemTime              lTimeRedLightBegin;                    //红灯开始时间
    ScSystemTime              lTimeRedLightEnd;                      //红灯结束时间

    int                       bToSave;                               //是仅仅显示还是保存。
    DSPLPRResult              scPlateResult;                         //车牌信息,当bToBeSaved为0时,车牌仅仅参考,1时为最终保存值。

    char                      csVideoFileName[SC_MAX_PATH];          //违法过程录像, 需要Encoder wmpcdcs8.exe
    char                      sGPSData[SC_MAX_PATH]; 
    DSPLimitPeriod            scLimitPeriod[3];                       //限行时段数据
    float                     fCarLimitVelocity;                      //小车限速值,蓝白黑牌为小车
    float                     fTruckLimitVelocity;                    //大车限速值,黄牌车为大货车

    ScLPRRecordType  nLPRRecordType ; // 结果类型:一般、前后拍主、从
    char                         sLPRRecordID[SC_MAX_DEC_WORDS_COUNT] ; // 字符串,唯一标识一个结果,用于前后拍时主从相机结果对应
    ImagePropertyInfo              arrImageInfo[SC_ResultType_Count][16] ; // 图片信息

    char szReserve1[20] ; //预留字段,暂时未赋值

    void *pVideoBuf;        //短时录像内容
    int nVideoLen;          //短时录像长度
    int nVideoWidth;        //短时录像宽度
    int nVideoHeight;       //短时录像高度
    int nVideonFramerate;   //短时录像帧率

    char szUserID[512];                 //用户代码
    char szDepartmentID[512];               //管辖部门ID
    char szDataSource[512];             //数据来源
    char szInputPeople[512];                //录入人
    int nReserve;
    ScSystemTime stReserve;
}DSPLPRRecord_TRANSMIT_1_1_0_4;

typedef struct _DSPLPRRecord_TRANSMIT_1_1_0_8
{
    char                    Devicetype[16];             //设备类型
    char                    szHostID[32];               //主机编号(可以是一级或NDR的IP信息)
    char                    szHostDeviceType[16];       //主机设备类型
    char                    szIP[16];                   //设备IP(前端抓拍机)

    char                    szDeviceModel[32];          //设备型号
    char                    sProjectVersion[64];        //文安产品版本号
    char                    sSoftVersion[32];           //软件版本号
    char                    sHardWareVersion[32];       //硬件版本号
    char                    sAlgVervion[32];            //算法版本号

    int                     nDirectionNo;               //方向编号
    char                    sDirectionName[256];        //方向名称
    char                    sDeviceNo[256];             //设备编号
    char                    sDeviceName[256];           //设备名称
    char                    sLocationNo[256];           //地点编号
    char                    sLocationName[256];         //地点名称

    int                     nMSNo;                      //VAID
    int                     nImageW;                    //原始图像的实际宽高
    int                     nImageH;                    
    int                     nResultVersion;             //结果版本号。
    int                     nVehicleID;                 //车辆唯一标识。
    int                     nEventID;                   //事件标识, 一辆车可能有多个事件。
    int                     nRegionID;                             //区域标识对应与区域设置里面的标识。

    char                    szLaneNo[16];                               //车道号, 与区域设置中的一致。
    int                     nLaneType;                           //车道类型
    char                    szLaneDescription[32];          //车道描述信息

    int                     nscObjectType;                         //物体类型。
    int                     eventType;          //违章类型。
    ScSystemTime            lTimeStart;                          //开始时间
    ScSystemTime            lTimeEnd;                                //结束时间
    ScSystemTime            lTimeRedLightBegin;                    //红灯开始时间
    ScSystemTime            lTimeRedLightEnd;                      //红灯结束时间

    int                     bToSave;                                 //是仅仅显示还是保存。
    DSPLPRResult            scPlateResult;                         //车牌信息,当bToBeSaved为0时,车牌仅仅参考,1时为最终保存值。

    int                     intVelocity[6];      //即时速度。
    char                    sGPSData[256]; 
    DSPLimitPeriod          scLimitPeriod[3];                         //限行时段数据
    float                   fCarLimitVelocity;                      //小车限速值,蓝白黑牌为小车
    float                   fTruckLimitVelocity;                    //大车限速值,黄牌车为大货车

    void*                   pSnapShotBufList[6]; // 图片
    int                     nSnapShotLenList[6]; //图片长度
    ScSystemTime            SnapShotTimeList[6]; //对应每张图片的时间
    int             nWidths[6];     //图片的宽度
    int             nHeights[6];        //图片的高度
    char                    szImageType[6][16]; //图片类型(全景1、合成1等等)

    ImagePropertyInfo       arrImageInfo[6][16] ; // 图片信息
    char                    czPicFileName[6][256];          //图片路径(如果图片只是发布,不发送时使用)
    ScRect                  rectFVehicle[6];     //图像上车辆位置的相对坐标(原浮点值*1000)
    ScRect                  rectFace[6];        //人脸坐标

    char                    szVideoType[8]; //录像类型(avi\mp4等)
    void *                  pVideoBuf;      //短时录像内容
    int                     nVideoLen;          //短时录像长度
    int                     nVideoWidth;        //短时录像宽度
    int                     nVideoHeight;       //短时录像高度
    int                     nVideonFramerate;   //短时录像帧率
    char                    csVideoFileName[256];          //违法过程录像

    ScLPRRecordType         nLPRRecordType ; // 结果类型:一般、前后拍主、从
    char                    sLPRRecordID[64] ; // 字符串,唯一标识一个结果,用于前后拍时主从相机结果对应

    char                    szReserve[10][32] ; //预留字段

    char                    szUserID[32];                   //用户代码
    char                    szDepartmentID[64];             //管辖部门ID
    char                    szDataSource[128];              //数据来源
    char                    szInputPeople[64];              //录入人
    int                     nReserve;
    ScSystemTime            stReserve;
}DSPLPRRecord_TRANSMIT_1_1_0_8;

typedef struct _DSPLPRRecord_TRANSMIT_1_1_0_5
{
    int                       nDirectionNo;
    char                      sDirectionName[256];
    char                      sDeviceNo[256];
    char                      sDeviceName[256];
    char                      sLocationNo[256];
    char                      sLocationName[256];

    int                       nMSNo;                                 //VAID
    int                       nImageW;                               //图像的实际宽高
    int                       nImageH;
    int                       nResultVersion;                        //结果版本号。
    int                       nVehicleID;                            //车辆唯一标识。
    int                       nEventID;                              //事件标识, 一辆车可能有多个事件。
    int                       nRegionID;                             //区域标识对应与区域设置里面的标识。
    int                       nLaneNo;                               //车道号, 与区域设置中的一致。
    int                       nLaneType;                             //车道类型
    int                       nscObjectType;                         //物体类型。
    int                       eventType[40];          //违章类型。
    ScSystemTime              lTimeStart;                            //开始时间
    ScSystemTime              lTimeEnd;                              //结束时间
    void*                     pSnapShotBufList[6]; //   照片
    int                       nSnapShotLenList[6]; //照片长度
    ScSystemTime              SnapShotTimeList[6]; //对应每张图片的时间
    ScRect                    rectFVehicle[6];      //图像上车辆位置的相对坐标(原浮点值*1000)
    int                       intVelocity[6];      //即时速度。

    ScSystemTime              lTimeRedLightBegin;                    //红灯开始时间
    ScSystemTime              lTimeRedLightEnd;                      //红灯结束时间

    int                       bToSave;                               //是仅仅显示还是保存。
    DSPLPRResult              scPlateResult;                         //车牌信息,当bToBeSaved为0时,车牌仅仅参考,1时为最终保存值。

    char                      csVideoFileName[256];          //违法过程录像, 需要Encoder wmpcdcs8.exe
    char                      sGPSData[256]; 
    DSPLimitPeriod            scLimitPeriod[3];                       //限行时段数据
    float                     fCarLimitVelocity;                      //小车限速值,蓝白黑牌为小车
    float                     fTruckLimitVelocity;                    //大车限速值,黄牌车为大货车

    // ADD 新增前后平拍系统  图片信息
    ScLPRRecordType  nLPRRecordType ; // 结果类型:一般、前后拍主、从
    char                         sLPRRecordID[256] ; // 字符串,唯一标识一个结果,用于前后拍时主从相机结果对应
    ImagePropertyInfo              arrImageInfo[6][16] ; // 图片信息

    char szReserve1[20] ; //预留字段,暂时未赋值

    void *pVideoBuf;        //短时录像内容
    int nVideoLen;          //短时录像长度
    int nVideoWidth;        //短时录像宽度
    int nVideoHeight;       //短时录像高度
    int nVideonFramerate;   //短时录像帧率

    //add  by mengs 
    char szUserID[512];                 //用户代码
    char szDepartmentID[512];               //管辖部门ID
    char szDataSource[512];             //数据来源
    char szInputPeople[512];                //录入人
    int nReserve;
    ScSystemTime stReserve;
}DSPLPRRecord_TRANSMIT_1_1_0_5;

typedef enum{
        enDSPLPRRecord_TRANSMIT_1_1_0_2 = 0,
        enDSPLPRRecord_TRANSMIT_1_1_0_4,
        enDSPLPRRecord_TRANSMIT_1_1_0_5,
        enDSPLPRRecord_TRANSMIT_1_1_0_8,
        enSemiStructLPRRecord_1_0_0_1,
        enSemiStructLPRRecord_1_0_0_2,//转发原图
        enDSPLPRRecord_Max_Cnt
}enumTransmitProtocol;

typedef struct tagTransmitProtocolDescription
{
    enumTransmitProtocol enProtocol;
    char szName[64];
    int nLen;
}TransmitProtocolDescription;

#endif

2.3.2. VAS

2.3.2.1.文安交通协议版本信息ProtocolDescribeLayer

字段类型 字段名称 字段描述
int nVersion 版本号,当前为1
int nPackType 数据打包格式,1-XML 2-BINARY 3-OTHER。当前为2

2.3.2.2文安交通协议消息头信息ProtocolDispatchLayer

字段类型 字段名称 字段描述
char[64] szMsgID 消息ID,唯一
char[32] szCommand 消息命令
char[32] szCategory 消息类型, 此处为” request”
char[32] szContentStructName 消息结构体名称
char[32] szSource 消息源,可为空
char[32] szDestination 消息目的地址,可谓空
char[32] szReserved 保留字段,可为空

说明:

1、字段szMsgID。该字段为消息ID号,需保证全局唯一。组成方式如下:

生成消息的设备IP-生成时间-七位的自增自然数

如:192.168.1.1-20140909122059754-0000001

2、字段szCommand为消息命令。对于注册消息,命令为“VasRegister”;对于心跳包消息,命令为“Alive”;对于违章抓拍数据消息,命令为“HSCResultCommand”,对于校时信息,命令为“HSCCheckingVasTimeCommand”。

3、字段szContentStructName 为消息结构体名称。对于注册消息,结构体为“VasRegister_V2.0”;对于心跳包消息,结构体名称为“”(空字符串)即可;对于违章抓拍数据消息,结构体为“HSCResultMsgStruct_v1.1”。

2.3.3.VasRegister

字段类型 字段名称 字段描述
int nVaCount 分析通道数,此处填充为1
int nLocalPort 平台反向连接端口号
int nState 设备状态,此处为1
char[32] szVasType 字符产品类型:相机-CAM,智能终端-ST,NVR-NVR,服务器-SVR,电视墙-VW,解码器-DEC,平台-FLAT,未知-UNK
char[64] szProductModel 产品型号
char[64] szDeviceName 设备名称
char[64] szDeviceID 设备ID
char[64] szSerialNum 设备序列号
char[64] szNIC 网卡地址
char[64] szIP 设备IP,为抓拍设备IP地址
char[64] szAnalysisVer 算法版本号
char[64] szSoftwareVer 软件版本号
char[64] szHardwardVer 硬件版本号
char[128] szDescription 设备描述信息
char[128] szExtend1 扩展字段 1
char[128] szExtend2 扩展字段 2
char[128] szExtend3 扩展字段 3
char[128] szExtend4 扩展字段 4

说明:

该数据以结构体VasRegister_MsgStruct_v2_0为基本数据。

2.3.4.HSCResult

2.3.5.LPRRecord

该数据以DSPLPRRecord_TRANSMIT_1_1_0_8数据为基本数据,其中包含了图片、录像等基本数据

字段类型 字段名称 字段描述
int vanum 版本号,当前为1
int resulttype 数据类型。当前为1
unsigned int nCheckCode 验证字段,当前不用,可为空
char[32] szProtocol 数据协议号,此版本转发协议填写LPR-TRANSMIT-1.1.0.8
int resultLen 数据长度
viod* pResultBuffer 辅助变量,该指针可以指向结构体,DSPLPRRecord_TRANSMIT_1_1_0_8,注意目前NDR设备发送的数据此字段为无意义的值,LPRRecord接收紧邻排列在本结构体后。

2.3.5.1. 文安交通时间ScSystemTime

字段类型 字段名称 字段描述
unsigned short wYear
unsigned short wMonth
unsigned short wDayOfWeek 星期
unsigned short wDay
unsigned short wHour
unsigned short wMinute
unsigned short wSecond
unsigned short wMilliseconds 毫秒

2.3.5.2.文安交通矩形坐标ScRect

字段类型 字段名称 字段描述
int left 矩形左 横坐标
int top 矩形上 纵坐标
int right 矩形右 横坐标
int bottom 矩形下 纵坐标

2.3.5.3.文安交通车牌信息DSPLPRResult

字段类型 字段名称 字段描述
int nCharCount 车牌字符个数
unsigned short[10] content 车牌号码
int[10] nCharScore 车牌号码个字符识别分数,可为空
int nPlateScore 车牌号码识别分数
int nPlateColor 车牌颜色,见附录9.3
int nPlateType 车牌类型,见附录9.2
ScRect rectPlate 车牌坐标,相对坐标(以1000为基数),见4.4.2
unsigned short[10] logo 车标类型
unsigned short[10] bodyColor 车身颜色

2.3.5.4.文安交通图片属性信息ImagePropertyInfo

字段类型 字段名称 字段描述
char[16] szKey 属性标签
char[8] szValue 属性值

2.3.5.5.文安交通抓拍数据信息DSPLPRRecord_TRANSMIT_1_1_0_8

字段类型 字段名称 字段描述
char[16] Devicetype 设备类型
char[32] szHostID 主机编号
char[16] szHostDeviceType 主机设备类型
char[16] szIP 设备IP(前端抓拍机)
char[32] szDeviceModel 设备型号
char[64] sProjectVersion 文安产品版本号
char[32] sSoftVersion 软件版本号
char[32] sHardWareVersion 硬件版本号
char[32] sAlgVervion 算法版本号
int nDirectionNo 方向编号
char[256] sDirectionName 方向名称
char[256] sDeviceNo 设备编号
char[256] sDeviceName 设备名称
char[256] sLocationNo 地点编号
char[256] sLocationName 地点名称
int nMSNo VAID
int nImageW 原始图像的实际宽
int nImageH 原始图像的实际高
int nResultVersion 结果版本号
int nVehicleID 车辆唯一标识
int nEventID 事件标识, 一辆车可能有多个事件
int nRegionID 区域标识对应与区域设置里面的标识
char[16] szLaneNo 车道号, 与区域设置中的一致
int nLaneType 车道类型
char[32] szLaneDescription 车道描述信息
int nscObjectType 物体类型
int eventType 违章类型
ScSystemTime lTimeStart 开始时间
ScSystemTime lTimeEnd 结束时间
ScSystemTime lTimeRedLightBegin 红灯开始时间
ScSystemTime lTimeRedLightEnd 红灯结束时间
int bToSave 是仅仅显示还是保存
DSPLPRResult scPlateResult 车牌信息,当bToBeSaved为0时,车牌仅仅参考,1时为最终保存值
int[6] intVelocity 即时速度,单位米每小时(m/h),存储在第0位
char[256] sGPSData GPS信息
DSPLimitPeriod[3] scLimitPeriod 限行时段数据
float fCarLimitVelocity 小车限速值,蓝白黑牌为小车
float fTruckLimitVelocity 大车限速值,黄牌车为大货车
void *[6] pSnapShotBufList 图片
int[6] nSnapShotLenList 图片长度
ScSystemTime[6] SnapShotTimeList 对应每张图片的时间
int[6] nWidths 图片的宽度
int[6] nHeights 图片的高度
char[6][16] szImageType 图片类型(全景1、合成1等等)
ImagePropertyInfo[6][16] arrImageInfo 图片信息
char[6][256] `czPicFileName 图片路径(如果图片只是发布,不发送时使用)
ScRect[6] rectFVehicle 图像上车辆位置的相对坐标(原浮点值*1000)
ScRect[6] rectFace 人脸坐标
char[8] szVideoType 录像类型(avi\mp4等)
void * pVideoBuf 短时录像内容
int nVideoLen 短时录像长度
int nVideoWidth 短时录像宽度
int nVideoHeight 短时录像高度
int nVideonFramerate 短时录像帧率
char[256] csVideoFileName 违法过程录像
ScLPRRecordType nLPRRecordType 结果类型:一般、前后拍主、从
char[64] sLPRRecordID 字符串,唯一标识一个结果,用于前后拍时主从相机结果对应
char[10][32] szReserve 预留字段
char[32] szUserID 用户代码
char[64] szDepartmentID 管辖部门ID
char[128] szDataSource 数据来源
char[64] szInputPeople 录入人
int nReserve 预留字段
ScSystemTime stReserve 预留字段

2.4.数据类型说明

2.4.1基本数据类型

本文中的基本数据类型包括char、int、unsigned int、short int、long、long long、float、double。

​ 其中明码字符串均采用GBK编码。

除本文档中特别说明的地方外,其他各基本字段采用的均是小端模式。以下为各字段的长度(实为32位机器小端模式):

数据类型 长度(字节)
char 1
int 4
unsigned int 4
short int 2
long 4
long long 8
float 4
double 8
BOOL 4

2.4.2.指针类型

基本数据结构中的各指针长度均为4个字节(实为32位系统平台)。在扁平化的buf结构中,指针当做int类型来用,用于存储相对偏移位置。

2.4.3.自定义数据类型

自定义数据类型的长度如下表:

数据类型 长度(字节)
ScSystemTime 16
ScRect 16
DSPLPRResult 132
ImagePropertyInfo 24
DSPLPRRecord_TRANSMIT_1_1_0_8 7540

2.5.图片数据说明

对于Transmit_1_1_0_8中的图片数据,最多有六个。每个图片信息中的szImageType字段不同,szImageType的取值见附件7.7。

其中的“合成图1”、“合成图2”、“合成图3”为按时间顺序依次抓取的合成图片,“全景1”、“全景2”、“全景3”为按时间顺序依次抓取的全景图片。“特写1”、“特写2”为在其中一张合成图中抠取的车辆特写和车牌特写。且车辆特写和车牌特写必须在同一张合成图中抓取。

全景图与合成图的差别在于合成图已经进行解码、转换等附加的图像操作,接入平台不需要再做处理。

“特写1”、“特写2”的图片buf信息字段,需与抠取特写的合成图中的pSnapShotBufList 字段为同一个对象,在buf数据中需指向相同的地址偏移。

车牌特写相对于对应全景图(用于抠取特写的全景图)的坐标需填充在车牌信息scPlateResult中的rectPlate字段中。在用于抠取特写的合成图需填充,车辆特写在该特写图中的坐标,字段为rectFVehicle。

2.6.反馈

2.6.1.消息结构体

反馈信息包括Vas和VNet公共头加上消息结构体(总长532字节),消息结构体如下:

struct FeedBackMsg

{

​ int lStatus; // 操作状态

​ char szErrDesc[256]; // 数据, MsgStatusFeedback pData=NULL, 其他为数据

};

FeedBackMsg

数据类型 长度(字节)
lStatus 4
szErrDesc 256

lStatus : 1为成功 0为失败

szErrDesc :失败的描述信息

打包格式同结果打包,Vas信息变更如下:

szCommand : 跟被反馈的消息szCommand 相同 szCategory : "statusfeedback" szContentStructName : "StatusFeedBackMsg"

校时信息反馈:

​ 前面272字节是vnet+vas,打包方式与上述相同,后面跟一个ScSystemTime结构体,赋值为当前时间,共288字节。另注:也可以返回532字节的普通反馈信息,这样屏蔽校时信息。

2.7.客户端与服务端开发指南

2.7.1.通信模型

客户端操作 服务端操作
☞ 发送注册信息
☞接收注册反馈
☞每30秒发送一次心跳信息,接收反馈
☞发送数据
☞接收反馈
☞接收注册信息,并注册设备
☞发送注册反馈
☞接收心跳信息,发送反馈
☞接收数据处理
☞发送数据反馈

综合上文协议所述,本协议的网络报文总共有4种:注册报文、心跳报文、数据报文和反馈报文。其中客户端根据要求和需要发送注册、心跳或数据报文,每发一次均接受一次反馈;而服务端负责接受注册、心跳或数据报文,在处理后发送反馈报文。客户端发起报文,由服务端发送反馈客户端接收成功才算一次完整的通信。

注:前面提到的校时协议在某些设备上存在,新开发的客户端无特殊情况无需发送此协议,只需要保证正常的注册、心跳与数据。

2.7.2.报文整体内存布局

image-20200604144121658

2.7.3.客户端开发

2.7.3.1. 报文封装

心跳报文,注册报文的结构固定,只需要引用相应的结构体并保持默认的struct对齐就可以直接使用。需要注意填充必要的字段,可空字段需要全部memset为零。

重点在于数据报文的内存排列与偏移量的计算,下面展示LPRRecord的内存布局如何排列:

image-20200604144542292

如果紧邻排列,则内存分别如上表格所示,这里需要填充的偏移量有LPRRecord结构内pSnapShotBufList[6]六张图片的偏移量,这里以void *存储,需要将imageBuff_n的初始地址减去LPRRecord的初始地址,然后强制转换为void *存入pSnapShotBufList数组。pSnapShotLenList[6]则分别存储了六张图片的大小(图片可能小于六张,pSnapShotBufList的相应字段置零)。录像内容类似图片将偏移量存储至pVideoBuf即可。

这里一定要注意所有指针都要转换为偏移量。

2.7.3.2.与服务端通信

每个数据包文中VNet长度和校验值必须确认正确并且以大端序发送,如果校验不正确则服务端会忽略之且不发送任何反馈信息,需要客户端自行超时判断。

为了与服务端保持长连接,需要定时发送心跳包,设置一个简单的循环发送线程即可。注意每一次发送消息都要接受反馈以判断通信结果。

2.7.4.服务端开发

2.7.4.1.与客户端通信

服务端接受客户端连接后首先接收8个字节的VNet数据,转换字节序后校验和,如果校验失败就关闭这次连接(避免接受无效数据浪费带宽);校验成功后根据VNet中的报文长度接收剩余部分存储至缓冲区。

首先从缓冲区提取出消息头Vas部分,根据消息命令判断是心跳、注册还是数据部分。如果是注册消息则提取相应信息进入注册例程,同时建立相应的计时机制,超时则断开连接;如果是心跳信息则重置计时器,保持与设备的连接。

如果是数据报文,则首先提取HSCResult部分, pResultBuffe有两种处理方式,第一种直接无视其含义,后面结构体紧邻排列,第二种是将pResultBuffer赋值为前面数据包的总长,NDR发送的数据包固定为324字节,这样pResultBuffer就指向了LPRRecord结构体的首地址,解析出LPRRecord结构体后根据resultLen和pResultBuffer指针提取出LPRRecord结构以及图像录像等其余部分,并将这部分缓冲传入到解包例程。

验证通过后开始接收数据包,接收完成后应当立即给客户端反馈消息表明接收成功还是失败(接收超时等网络问题),而不必等待处理结果,即反馈信息不需要通知处理结果。

2.7.4.2.报文解包

相比封装报文而言解包就稍显容易。首先从缓冲区提取出LPRRecord结构,然后根据LPRRecord首地址和图像指针、录像指针将指针字段复位就可以提取相应的字段了。同时注意区分图像类型,“全景x”一般指原始图片,可能需要进行转换,添加字幕等操作;而“合成图x”一般是合成好后的图片,应当不做任何处理直接转存。

2.8.附录

2.8.1.图片类型

代码 描述
0 RGB
1 YUV420
2 BAYER
4 JPEG
5 YUV422
6 YCbCr_VYUY
7 GRAY
8 YUV422PSemi
9 RGBY
10 32BIT
11 YCbCr422
12 YUV420SP_Y_UV

2.8.2.号牌类型

代码 描述
0 未知号牌
1 大型汽车号牌
2 小型汽车号牌
3 使馆汽车号牌
4 领馆汽车号牌
5 境外汽车号牌
6 外籍汽车号牌
7 摩托车号牌
8 轻便摩托车号牌
9 使馆摩托车号牌
10 领馆摩托车号牌
11 境外摩托车号牌
12 外籍摩托车号牌
13 农用运输车号牌
14 拖拉机号牌
15 挂车号牌
16 教练汽车号牌
17 教练摩托车号牌
18 试验汽车号牌
19 试验摩托车号牌
20 临时入境汽车号牌
21 临时入境摩托车号牌
22 临时行驶车号牌
23 警用汽车号牌
24 警用摩托号牌
25 小型新能源号牌
26 大型新能源号牌
99 其他号牌

2.8.3.号牌颜色

代码 描述
0 未知
1 黄底黑字
2 蓝底白字
3 黑底白字
5 白底黑字
6 绿底黑字
7 黄绿底黑字
9 其他颜色

2.8.4.车道类型

代码 描述
0 左转
1 右转
2 直行
3 直左混行
4 直右混行
5 黄线
6 自行车道
7 人行横道
8 公交车道
9 应急车道
10 非机动车道
11 左转弯待停区
12 非大货车车道

2.8.5车辆类型

代码 描述
0 小型车
1 中型车
2 大型车
3 未知车型
4 行人
5 遗撒

2.8.6.违章类型

代码 描述
0 正常
1 流量、拥堵时间报警
2 小车走公交车道
3 异常停车
4 禁停区内停车
5 压实线或者黄线
6 逆行
7 违章掉头
8 直行闯红灯
9 左转闯红灯
10 右转闯红灯
11 左右转超过转弯限制线,可能为直行闯红灯
12 机动车占用非机动车道
13 非法改变车道属性,不能右转的车道右转了
14 非法改变车道属性,不能左转的车道左转了
15 行人
16 遗撒
17 交通事故:撞车、翻车、驶出车道
18 绿灯期间,超高速行驶
19 绿灯期间,超低速行驶
20 绿灯期间突然降速行驶
21 超速
22 紧急停车带停车
23 大货车禁行
24 限时单行
25 压白线
26 跨线变道
27 禁止左转
28 禁止右转
29 路口滞留
30 绿灯滞留
31 限号
32 外地车限行
36 未系安全带
37 黄标车禁行
40 缓行
41 畅通
42 直行闯红灯
43 左转闯红灯
44 右转闯红灯
45 超速百分之十到二十
46 超速百分之二十到五十
47 超速百分之五十到七十
48 超速百分之七十以上
49 区间超速百分之十到二十
50 区间超速百分之二十到五十
51 区间超速百分之五十到七十
52 区间超速百分之七十以上
53 黑名单报警
54 大弯小转检测
55 左转机动车未让直行车辆先行
56 不按规定未依次交替驶入
57 不按规定使用远光灯
58 行人闯红灯
59 危险品车辆
60 右转未让非机动车
61 非机动车逆行

2.8.7.图片内容

字符串 描述
合成图1 抓拍车辆的第一张合成图
合成图2 抓拍车辆的第二张合成图
合成图3 抓拍车辆的第三张合成图
全景1 抓拍车辆的第一张全景图
全景2 抓拍车辆的第二张全景图
全景3 抓拍车辆的第三张全景图
特写1 车辆特写
特写2 车牌特写

2.8.8.车标类型

系统代码 默认名称 备注信息
0 未知
1 大众
2 现代
3 丰田
4 本田
5 长安
6 五菱
7 别克
8 日产
9 雪铁龙
10 奥迪
11 奇瑞
12 夏利
13 起亚
14 福特
15 雪佛兰
16 比亚迪
17 长城
18 吉利
19 铃木
20 东风风神
21 马自达
22 斯柯达
23 一汽
24 三菱
25 宝马
26 奔驰
27 标致
28 海马
29 哈飞
30 奔腾
31 江淮
32 金杯
33 中华
34 昌河
35 荣威
36 沃尔沃
37 帝豪
38 斯巴鲁
39 东南
40 路虎
41 福田
42 雷克萨斯
43 思铭
44 全球鹰
45 黄海
46 纳智捷
47 欧宝
48 开瑞
49 英菲尼迪
50 众泰
51 青年莲花
52 雷诺
53 凯迪拉克
54 厦门金龙
55 Jeep
56 双环
57 陆风
58 福迪
59 北汽制造
60 宝骏
61 力帆
62 野马
63 北京汽车
64 MG
65 中兴
66 启辰
67 菲亚特
68 英伦
69 江南奥拓
70 理念
71 广汽
72 DS
73 华泰
74 致观
75 哈弗
76 江铃
77 永源
78 吉奥
79 瑞麒
80 保时捷
81 东风
82 依维柯
83 猎豹
84 宾利
85 红旗