简介

  • 设计原则
    • 轻量化,提升效率
    • 减少访问密度
  • AI算法模型
    • 模型一:安全帽,反光衣
    • 模型二:烟火
    • 模型三:禁区入侵
  • 软件功能
    • 本地大屏:告警,视频展示
    • 摄像头管理:添加,修改,删除摄像头
    • 任务管理:启动,暂停,删除任务
    • 算法管理:添加,删除算法
    • 事件管理:删除,标记事件(有效,无效),检索,保存,上传
    • 区域配置:添加,删除

第三方工具

  • 数据持久化存储 – sqlite
    • 摄像头:名称,流地址
    • 算法数据:算法名,文件路径
    • 任务:名称,配置信息
    • 事件:任务名称,摄像头名称,算法名称,标记状态,事件时间
    • 盒子信息:盒子名称,设备型号,注册状态,序列号,软件版本,设备状态,系统时间,网络设置
  • JSON数据处理 – nlohmann/json
    • 接收vca输出的 frame.json

框架

管理节点

  • 设计思路:
    • 使用sqlite3持久化存储数据
  • 需要存储的数据
    • 摄像头:名称,流地址
    • 算法数据:算法名,文件路径
    • 任务:名称,配置信息
    • 事件:任务名称,摄像头名称,算法名称,标记状态,事件时间
    • 盒子信息:盒子名称,设备型号,注册状态,序列号,软件版本,设备状态,系统时间,网络设置

算力节点

  • 设计思路
    • 告警数据,被动获取:
      • 接收vca输出的结构化信息,通过业务模块处理,生成告警数据,存放在队列中
      • 这个队列大小固定,最新的告警数据从队尾放入,外面取告警数据从队头取
      • 如果从队尾存放最新的告警数据时,队列已满,则从队头删除最旧的告警数据,同时从队尾插入最新的告警数据
  • 业务流程:
    • 判断检测框的大小,筛掉小于指定大小的检测框
    • 标签(类别)分为两个:
      • 一个是前端传过来,用户所设置的标签,需要开启的检测
      • 一个是vca传过来的,检测出来的目标的分类标签
      • 接收vca传出的结构化信息,与用户配置的检测标签比较,如果相等,则继续进行下一步判断;否则丢弃
    • 判断检测框是否在指定区域内
      • 默认为全屏,若用户画区域,则接收前端传过来的区域点信息
      • 通过 射线法 判断检测框是否在区域内,如果在该区域,则生成告警信息;否则,丢弃
  • 区域判断
    • 射线法,具体思路在CPP的常用算法中有详细记录
  • 四层判断
    • 检测框的类别是否与用户设置的检测算法一致
    • 检测框产生的时间是否在用户设置的有效时间中
    • 检测框的置信度(分数)是否大于用户设置的阈值
    • 检测框的位置是否在用户画的区域内
  • 安全帽检测 – 业务逻辑
    • 判断frame.json的label是否为安全帽的label,如果是,则进入下一层判断;否则,丢弃
    • 判断安全帽的告警事件所发生的时间是否在设置的算法生效时间段内,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中的score分数是否大于用户设置的阈值,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中检测框的位置是否在所画区域,如果是,则产生告警事件;否则,丢弃
    • 标签(类别)
      • “10204”: “戴安全帽”,
      • “10208”: “未戴安全帽”,
    • 事件:
      • “20005”:”戴安全帽”,
      • “20006”:”未戴安全帽”,
  • 反光衣检测 – 业务逻辑
    • 判断frame.json的label是否为反光衣的label,如果是,则进入下一层判断;否则,丢弃
    • 判断反光衣的告警事件所发生的时间是否在设置的算法生效时间段内,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中的score分数是否大于用户设置的阈值,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中检测框的位置是否在所画区域,如果是,则产生告警事件;否则,丢弃
    • 标签(类别)
      • “10206”: “穿反光衣”,
      • “10210”: “未穿反光衣”,
    • 事件
      • “20009”:”穿反光衣”,
      • “20010”:”未穿反光衣”,
  • 烟火检测 – 业务逻辑
    • 判断frame.json的label是否为烟火的label,如果是,则进入下一层判断;否则,丢弃
    • 判断烟火的告警事件所发生的时间是否在设置的算法生效时间段内,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中的score分数是否大于用户设置的阈值,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中检测框的位置是否在所画区域,如果是,则产生告警事件;否则,丢弃
    • 标签(类别)
      • “30001”: “烟”,
      • “30002”: “火”,
    • 事件
      • “30001”:”烟”,
      • “30002”:”火”,
  • 禁区入侵 – 业务逻辑
    • 判断frame.json的label是否为人体的label(全身),如果是,则进入下一层判断;否则,丢弃
    • 判断人体的告警事件所发生的时间是否在设置的算法生效时间段内,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中的score分数是否大于用户设置的阈值,如果是,则进入下一层判断;否则,丢弃
    • 判断frame.json中检测框的位置是否在所画区域,如果是,则产生告警事件;否则,丢弃
    • 标签(类别)
      • “10001”: “全身”,
    • 事件
      • “10018”:”区域入侵”,