一、系统构成
这套系统由两部分组成:算法服务端(C++)负责视频接入、解码、AI 推理、目标跟踪、事件生成、推流与录像;管理平台(Web 端)负责任务下发、算法与事件模板配置、字典维护、告警统计和地图回放。下面按这两部分展开,截图都来自最新版平台。
二、算法服务端(C++)
2.1 基础库与推理后端
后端使用 C++ 实现,基础库是 FFMPEG(解封装与编解码)、OPENCV(图像处理)、TENSORRT 等;推理后端做成可切换的一层,同一套算法插件可以跑在 TensorRT、OpenVINO、ONNX Runtime、昇腾 CANN、瑞芯微 RKNN 上,按现场算力选型(x86 服务器 / Jetson / 昇腾 / 边缘盒子)。
目标跟踪支持 BoT-SORT、ByteTrack、DeepSort 等几种跟踪器,按场景取舍精度与速度。
2.2 视频接入
实现了 RTSP、RTMP、RTP(UDP/TCP)、国标 GB28181(SIP 注册、目录查询、媒体会话、PTZ)等协议的视频接入,也支持本地文件与图片;设备的私有协议(例如裸 HEVC over TCP)以插件方式接入,不侵入主流程。
2.3 输出与 SEI 元数据
分析后的视频通过内置媒体服务以 RTSP / RTMP / HLS / HTTP-FLV 对外分发;检测框、目标 ID、事件等结构化结果会封装成 SEI 用户数据,随 H.264/H.265 码流逐帧下发——播放端不解码图像也能读到每一帧的分析结果,实时流与录像 MP4 复用同一套编码封装。
2.4 模型即插件
每个模型对应一个单独的插件包,可以灵活加载、卸载、启用,运行期升级模型不必重编译主程序;管理平台里能看到每个模型所属的算法场景、加载状态与启用状态。
2.5 事件与核查闭环
事件模板定义“什么算事件、要不要告警、阈值多少”,推理结果与模板匹配后生成告警;告警可以进入核查流程,核查任务会把画框后的核查图片一并留存,形成“检测 → 告警 → 核查 → 留档”的闭环。
三、管理平台(最新版 Web 端)
3.1 技术栈
前端是 Vue 3 + TypeScript + Vite,UI 使用 Element Plus,状态管理用 Pinia;地图与三维用 Cesium 和 Three.js,二维地图用随包发布的 Leaflet(不依赖外网 CDN);播放器除了第三方 EasyPlayer,还有一套自研的 SEI/H265 播放器:WebCodecs 解 HEVC、WebGL 渲染 YUV、SEI 解析,分析结果可以直接叠在画面上。
3.2 系统总览
硬件资源(CPU、内存、GPU)、磁盘、授权路数与到期时间、任务运行状态与趋势都在这一页,日常运维不用登服务器。
3.3 实时任务
实时任务列表按状态给出统计(总数、分析中、推送、等待、排队、失败等),每行带预览图、状态与操作;点开即可查看主码流与深度视频,开启空间感知的任务还能直接进入三维驾驶舱。
3.4 图片任务
图片可以直接拖拽上传送进分析:选择事件模板与分类模型,填上设备编号、告警坐标、告警时间,支持异步/同步分析;需要联动业务时打开“上报案件”,结果直接进入业务流程。
3.5 告警统计
按今天、近三天、近七天或自定义时间查看告警总数、告警类型数与涉及设备数,下面是告警趋势曲线,再往下是事件类型分布与设备告警 Top10,用来判断哪类事件、哪些点位最需要处理。
3.6 实时视频窗口:分析结果直接叠在画面上
在实时任务里点开某一路,弹出的就是这台设备的实时视频窗口,标题栏带设备编号与当前码率。画面里跑的就是算法正在分析的那一路流:检测框直接画在视频上,每个框带类别与置信度(摩托、行人、车、电动车、挡风板、店面、电力设施等),判定标签也一并标出来;画面里还叠加了相机角度、时间与坐标这些元数据,便于核对“这一帧是哪个点位、什么时候的”。
窗口右上角可以重新加载或新窗口打开,左侧的定位按钮能把画面一键切到该设备的位置地图——看实时画面的同时就能确认点位的实际位置。因为分析结果是随码流走的(见 2.3 的 SEI),叠加框不额外占带宽,播放端解码渲染后直接画上去,不牺牲画面清晰度。
四、算法与配置
4.1 事件模板
模板项由后端字典动态渲染,字段控件按类型与服务端取值范围生成,避免前后端口径不一致;模板支持多版本管理、导入导出(可直接粘 JSON 批量新增模板项)、模板上传与模板验证。每一个具体的类别都可以灵活配置告警规则,实现快速落地。模板项的编辑窗口见第七节。
4.2 算法模型
模型以插件包的形式管理,页面里能看到每个模型的路径、所属算法场景、加载状态、启用状态与子模型,模型总数、当前页已加载/未加载一目了然。现场要上新算法,就是放一个模型包进来再加载。
4.3 目标字典
几百类目标集中维护:编码、中英文名称、所属模型、标注类型、颜色、是否参与长期地图;目标还可以绑定三维资源包(GLB),在三维场景里用模型而不是小点来显示。
五、地图、轨迹与录像
支持二维/三维、影像/矢量切换,按时间查询设备轨迹并回放;设备监控页按固定间隔拉取坐标,轨迹增量合并,掉线的设备不会把已有轨迹清空。
5.1 轨迹回放:把一整天的轨迹拉到地图上回放
轨迹回放页先选时间段(默认当天 00:00–23:59)查询,右侧列出设备清单,可以按编号搜索、全部展示/全不显示,也可以打开“点设备加载告警案件”把该点位的告警一起带出来。点某台设备的“查看轨迹”,这段时间的轨迹线就画到地图上,并给出轨迹点数与里程。
下面的回放控制条是回放的主入口:可以叠加多台设备,每台一条独立时间轴;拖动时间轴定位到任意时刻,用“播放轨迹”按时间回放移动过程,回放设置里可以调速度、拟合方式与地图跟随,“清除轨迹”则把选中的轨迹从地图上摘掉。地图本身支持二维/三维、影像/矢量底图、图层开关与一键全览。这套东西对固定点位用来核对设备安装位置,对车载、无人机这类移动数据源就是行踪回放。
5.2 录像
录像按设备与时间段归档:录像管理页列出每台设备在某个时间段内的录像记录(时间范围、时长),可以按时间条件检索、回看;原始录像与分析后的录像分别留存,后者带着画框结果,适合事后复核“当时到底有没有检出”。固定点位与车载、无人机等移动数据源的录像都在同一套检索里。
六、多种数据源
固定点位之外,车载实时视频、无人机实时视频、图片等数据源接进来做同样的分析。
车载图片
无人机图片
七、表单与弹窗:任务下发与规则配置
平台的交互方式比较统一:列表行内是查看、编辑、启停这类操作,新增类的操作从右侧滑出一层抽屉,编辑类的操作弹一个对话框,配置项多的时候分组折叠。
7.1 新增任务(抽屉表单)
视频任务页点“新增任务”从右侧滑出表单:任务编号、设备编号、任务 ID、视频地址(RTSP/RTMP/本地文件等)填基本信息;打开“智能采集与三维驾驶舱”后才会去采集这路视频的空间数据,并允许从实时任务进入三维驾驶舱。
相机参数是这套系统比较特别的地方:相机方向可以选前 0°、右 90°、后 180°、左 270°,也可以直接填自定义角度(口径是相对车头顺时针),水平视场角按提示填 0°–180°,0 表示回退到后端全局默认值;录像保存时长按小时填,0 表示不单独配置、走全局阈值。最后一栏选事件模板,决定这路视频按哪套规则产生事件;下面的“完整相机标定”是一个可展开的高级入口。
7.2 事件模板编辑(对话框)
事件模板页点“编辑”弹出模板项的配置窗口:顶部是模板版本,基础配置里可以调距离因子、模板类型、方向、算法状态(关闭/开启)、模板 ID、上报间隔、特征过滤阈值与全局过滤;再往下是按算法场景分组的检测算法,勾选这个模板要产出的类别(例如绿化护栏破损)。
因为字段与控件都由后端字典渲染,现场新增一个检测类别不需要改前端:后端字典加一项,页面上的表单、列表与统计口径一起就绪。模板页还带模板全局参数、模板上传、模板验证等入口,支持整份模板导入导出,便于一次调好、多个项目复用。
八、部署形态
服务端是一个 C++ 进程(内置媒体服务),配置文件按接入、算法、推流、录像、数据库、授权等分组;前端是静态产物,直接由服务托管,换部署前缀不需要改代码。授权路数与版本在总览页可见,升级时替换模型包与前端产物即可。