# ZoneAlarm - 车辆检测电子围栏系统 基于 RK3576 NPU 的边缘计算电子围栏报警系统:多路 RTSP 摄像头视频接入,YOLO 目标检测 + NPU 推理,目标进入用户自定义电子围栏时触发网络继电器(声光报警器、警示灯等)并截图存档,提供 Web 平台进行实时预览、围栏绘制与报警查询。 ## 功能特性 - **多路视频接入**:最多 8 路 RTSP 拉流(MPP 硬解 H.264/H.265),通道可 Web 热插拔增删改 - **AI 检测**:RKNN NPU 推理(YOLOv5/v8 int8 模型),NMS 解析,报警类别可配置(车辆等) - **电子围栏**:每路视频支持多个任意多边形围栏,目标入侵即触发;Web 端绘制并持久化 - **继电器控制**:智嵌物联网络继电器(TCP ASCII 协议),支持脉冲、周期闪烁、DI 输入联动 - **报警策略**:脉冲 + 回合上限 + 重新武装(防抖动),每次动作留截图证据 - **Web 平台**:登录会话/MJPEG 实时预览/围栏绘制/通道管理/报警与动作历史查询 - **数据管理**:SQLite 报警历史 + 截图存档,按保留天数自动清理 - **运维**:systemd 服务、开机自启、定时重启、版本化部署包 ## 技术栈 | 组件 | 说明 | |---|---| | C++17 / CMake | 编译语言与构建系统 | | OpenCV | 图像处理、JPEG 编码、绘图 | | RKNN | Rockchip NPU 推理运行时 | | MPP | Rockchip 视频硬解码 | | FFmpeg | RTSP 协议拉流 | | cpp-httplib / nlohmann-json | Web 服务与 JSON | | SQLite | 报警历史存储 | | HTML/JS | Web 前端(MJPEG 预览) | ## 项目结构 ``` zone_alarm/ ├── src/ # 源码 │ ├── main.cpp # 主程序:初始化、主循环、API 注册 │ ├── rtsp_capture.* # RTSP 拉流 + MPP 硬解(每通道一线程,断线重连) │ ├── rga_processor.* # NV12→RGB 转换与 letterbox 缩放 │ ├── yolo_detector.* # RKNN 推理 + 后处理 │ ├── fence_engine.* # 围栏管理与射线法判定 │ ├── relay_ctrl.* # 网络继电器控制(持久 TCP、轮询、脉冲/周期模式) │ ├── alarm_history.* # 截图与报警历史(SQLite,异步写盘) │ └── web_server.* # HTTP 服务(登录会话、MJPEG、路由) ├── include/ # 第三方头文件(httplib、json、rknn_api) ├── config/ # 配置文件(config.json / fences.json) ├── web/ # Web 前端(index.html / login.html) ├── models/ # RKNN/ONNX/PT 模型 ├── scripts/ # 模型导出脚本(export_onnx.py) ├── docs/ # 文档(继电器控制手册、开发功能汇总表) ├── deploy/ # 部署脚本(打包 install.sh / pack.sh) ├── data/ # 运行数据(alarms.db / screenshots,不入库) └── zone_alarm.service # systemd 服务文件 ``` ## 配置说明(config/config.json) | 项 | 默认值 | 说明 | |---|---|---| | `rtsp` | - | RTSP 通道列表(id/name/url),Web 端可热改 | | `model_path` | yolov5s_rk3576_int8.rknn | RKNN 模型路径 | | `input_size` | 640 | 模型输入尺寸 | | `conf_thresh` / `nms_thresh` | 0.35 / 0.45 | 置信度与 NMS 阈值 | | `skip_frames` | 3 | 抽帧推理间隔(每 N+1 帧推断一次) | | `alarm_classes` | 车辆类别列表 | 触发报警的检测类别 | | `web_port` / `web_auth` | 8080 / admin | Web 端口与登录凭据(登录后可改密) | | `fence_file` | config/fences.json | 围栏配置文件 | | `alarm_retention_days` | 30 | 报警历史保留天数 | | `auto_reboot` | 关闭 | 定时重启(周期/日期时间) | | `relay` | 192.168.1.253:1030 | 继电器主机/端口/地址、`pulse_sec` 脉冲、`rearm_sec` 重新武装、`alarm_max_sec` 回合上限、`di_bindings` 输入联动、`aliases` 通道别名、`y_config` 输出模式 | ## 构建与运行 ```bash # 编译(自动解包项目内 SQLite 开发包到 .deps/) ./build.sh # 运行(校验模型与配置后启动) ./start.sh # 前台调试(可指定配置路径) ./build/zone_alarm [config/config.json] ``` **工作目录要求**:程序按相对路径读取 `config/`、`web/`、`data/`、`models/`,必须在项目根目录启动。 ## 部署到目标机 ```bash # 开发机打包(自动编译、收集运行库、生成版本号与 CHANGELOG) bash deploy/pack.sh # 拷贝到目标机 scp deploy/zone_alarm_v2.0_*_*.tar.gz root@目标机:/tmp/ # 目标机安装(安装到 /opt/zone_alarm,注册 systemd,开机自启) cd /tmp && tar xzf zone_alarm_v2.0_*.tar.gz cd zone_alarm_v2.0_* && sudo bash install.sh ``` 可选环境变量(install.sh):`ZA_PORT=80` Web 端口、`ZA_INSTALL_DIR=/opt/zone_alarm` 安装目录、`ZA_SKIP_SERVICE=1` 跳过注册服务。 ## Web 平台 访问 `http://<设备IP>:8080`(默认账号 admin/admin,登录后可修改密码): - **实时预览**:各通道 MJPEG 画面,叠加围栏与检测框,报警目标红色高亮 - **围栏配置**:绘制/编辑多边形围栏,绑定触发继电器通道 - **继电器面板**:输出通道手动开合、周期闪烁模式、输入联动绑定、运行状态与动作历史 - **通道管理**:增删改 RTSP 通道、连通性测试 - **报警查询**:按时间/通道查询报警记录与截图,支持删除与清空 - **系统设置**:抽帧间隔、置信度、保留天数、定时重启、立即重启 ## systemd 服务 ```bash systemctl status zone_alarm # 状态 journalctl -u zone_alarm -f # 日志 systemctl restart zone_alarm # 重启 ``` ## 版本 - **v2.0**(2026-09-03):当前版本。RK3576 NPU 推理 + MPP 硬解、电子围栏、继电器联动、Web 平台、SQLite 报警史