# 车牌识别系统 PlateRecApp > 基于 HyperLPR3 / MNN 的嵌入式 C++ 车牌识别平台,运行于树莓派5 + Ubuntu 24.04 > 版本: fix27 v44 | 最后更新: 2026-08-30 > Gogs 仓库: https://git.zhonjin.com:40717/steven_roc/PlateRecApp ## 系统概述 PlateRecApp 是一套面向工业园区/物流场站的全功能车牌识别与称重管理系统,支持多路 RTSP 视频流实时识别、飞书消息推送、MQTT 数据上报、Web 管理后台、登录认证、frpc 内网穿透管理等核心功能。 ### 核心能力 | 模块 | 功能说明 | |------|---------| | **车牌识别** | HyperLPR3 + MNN 推理引擎,支持低位摄像头 ROI 推理 | | **视频流** | 4路独立 RTSP 视频流 + Web 端 ROI 手动调整 | | **飞书推送** | 进出站消息推送,支持携带重量信息,独立开关控制 | | **MQTT** | 数据上报,独立开关控制,v43 并行模式支持 | | **称重系统** | 重量调度器(promise/future 异步机制),15秒超时 | | **Web 管理** | 登录认证、系统监控、日志管理、frpc 管理、SSH 密钥管理 | | **站点锁** | 交替锁定机制,防止重复抓拍竞态 | | **日志管理** | logrotate 自动清理,系统指标历史记录 | ## 系统架构 ``` ┌─────────────────────────────────────────────────────┐ │ PlateRecApp │ ├──────────┬──────────┬──────────┬────────────────────┤ │ 车牌识别 │ 重量调度 │ Web服务 │ 飞书/MQTT推送 │ │ HyperLPR3│ 异步引擎 │ 认证+监控 │ 独立开关控制 │ ├──────────┴──────────┴──────────┴────────────────────┤ │ 统一配置管理 (config.ini) │ ├─────────────────────────────────────────────────────┤ │ SQLite DB │ MQTT Client │ RTSP Capture │ └─────────────────────────────────────────────────────┘ ``` ## 运行环境 | 项目 | 要求 | |------|------| | **硬件** | 树莓派5 8G(兼容 Ubuntu-24.04 / Raspberry Pi OS) | | **编译器** | GCC, C++17 | | **核心依赖** | OpenCV 4.x, MNN, HyperLPR3 SDK | | **其他依赖** | cJSON, cpp-httplib, bcrypt, ini-parser | | **数据库** | SQLite3 | | **网络** | 飞书 API, MQTT Broker, RTSP 视频流 | ## 项目结构 ``` PlateRecApp/ ├── src/ # 源代码 │ ├── main.cpp # 主程序入口 │ ├── common.cpp/h # 公共定义与全局变量 │ ├── config.cpp/h # 配置文件解析 (config.ini) │ ├── plate_recognizer.cpp/h # 车牌识别核心 (HyperLPR3+MNN) │ ├── rtsp_capture.cpp/h # RTSP 视频流采集 │ ├── web_server.cpp/h # Web 管理服务器 (cpp-httplib) │ ├── database.cpp/h # SQLite 数据库操作 │ ├── feishu_client.cpp/h # 飞书消息推送客户端 │ ├── mqtt_client.cpp/h # MQTT 客户端 │ ├── weight_dispatcher.cpp/h # 重量调度器 (promise/future) │ ├── weight_scale.cpp/h # 称重模块 │ ├── station_lock.cpp/h # 站点交替锁定机制 │ ├── system_monitor.cpp/h # 系统监控 (CPU/内存/温度) │ ├── system_metrics_manager.cpp/h # 系统指标管理+历史记录 │ ├── log_manager.cpp/h # 日志管理+logrotate │ ├── frpc_manager.cpp/h # frpc 内网穿透管理 │ ├── ssh_manager.cpp/h # SSH 密钥管理 │ ├── network_client.cpp/h # 网络客户端 (API上传) │ ├── utils.cpp/h # 工具函数 │ ├── auth_api.cpp/h # 认证 API │ ├── auth_db.cpp/h # 认证数据库 │ ├── auth_session.cpp/h # 会话管理 │ ├── auth_middleware.cpp/h # 认证中间件 │ ├── auth_crypto.cpp/h # 加密工具 (bcrypt) │ ├── auth_rate_limiter.h # 速率限制 │ └── bcrypt/ # bcrypt 密码哈希库 ├── config/ # 配置示例 │ ├── config一号门.ini # 一号门配置模板 │ └── config二号门.ini # 二号门配置模板 ├── scripts/ # 部署脚本 │ ├── deploy.sh # 一键部署脚本 │ ├── reset_passwords.py # Web 管理密码重置工具 │ └── setup_frpc_sudoers.sh # frpc sudoers 配置 ├── third_party/ # 第三方依赖源码 │ ├── cJSON.c/h # JSON 解析 │ ├── cvxFont.cpp/h # OpenCV 中文字体 │ ├── httplib.h # cpp-httplib 头文件库 │ ├── hyper_lpr_sdk.h # HyperLPR3 SDK 头文件 │ ├── ini.c/h # INI 配置解析 │ └── md5ex1.c/h # MD5 工具 ├── assets/web/ # Web 前端资源 (HTML/CSS/JS) ├── CMakeLists.txt # CMake 构建配置 ├── CHANGELOG.md # 详细变更日志 └── README.md # 本文件 ``` ## 快速开始 ### 1. 克隆仓库 ```bash git clone https://git.zhonjin.com:40717/steven_roc/PlateRecApp.git cd PlateRecApp ``` ### 2. 编译 ```bash mkdir build && cd build cmake .. make -j4 ``` ### 3. 配置 ```bash # 复制配置模板并修改 cp config/config一号门.ini config.ini # 编辑 config.ini 填入实际参数 ``` ### 4. 部署 ```bash sudo bash scripts/deploy.sh ``` ### 5. 验证 ```bash sudo systemctl status PlateRecApp # 访问 Web 管理: http://<设备IP>:8080 ``` ## 配置文件说明 核心配置通过 `config.ini` 管理: ```ini [rtsp] # RTSP 视频流地址(支持4路) URL_1 = rtsp://... URL_2 = rtsp://... [feishu] ENABLED = 1 # 1=启用飞书消息推送,0=禁用 WEBHOOK_URL = https://open.feishu.cn/open-apis/bot/v2/hook/xxx [MQTT] MQTT_ENABLED = 1 # 1=启用MQTT消息推送,0=禁用 MQTT_HOST = xxx MQTT_PORT = 1883 [weight] flagWeight = 1 # 飞书消息是否携带重量信息 (1=是) [web] PORT = 8080 # Web 管理端口 ``` ## Web 管理功能 | 功能 | 路径 | 说明 | |------|------|------| | 首页仪表盘 | `/` | 系统概览、最新抓拍 | | 登录认证 | `/login` | 超级管理员/普通用户双角色 | | 系统监控 | `/monitor` | CPU/内存/磁盘/温度实时监控 | | frpc 管理 | `/frpc` | 内网穿透服务管理 | | SSH 密钥 | `/ssh` | Web 端 SSH 密钥管理 | | 日志管理 | `/logs` | 在线查看 + logrotate | | ROI 调整 | `/roi` | Web 端 4 路视频 ROI 手动调整 | | 视频预览 | `/video` | 实时视频流预览 | | 称重记录 | `/weight` | 称重数据查询 | ## 账号说明 | 角色 | 用户名 | 密码 | 权限 | |------|--------|------|------| | 超级管理员 | admin | zhonjin188A | 所有页面 | | 普通用户 | zhonjin | zhonjin | 基础页面 | > 首次部署后建议通过 `scripts/reset_passwords.py` 修改默认密码 ## 安全规则 - ✅ 所有管理操作必须经过超级管理员登录认证 - ✅ frpc admin API 仅允许本机 127.0.0.1 调用,禁止通过 frp 隧道暴露到公网 - ✅ 永久失败告警受飞书开关 (`g_feishu_enabled`) 控制 - ✅ 认证系统使用 bcrypt 密码哈希 + 速率限制 ## 版本历史 | 版本 | 日期 | 主要内容 | |------|------|---------| | fix27 v44 | 2026-08-30 | 飞书消息携带重量、水印居中、MQTT修复、内存泄漏修复 | | fix26 v44 | 2026-08-30 | 飞书/MQTT独立开关 | | fix25 v44 | 2026-08-30 | P0 prelock 优化 | | fix24 v43 | 2026-08-30 | 系统指标历史、日志管理 | | fix24 v32-v41 | 2026-07~08 | Web管理、认证系统、frpc管理 | | fix24 v21 | 2026-07-03 | P0 时间对齐 bug 修复 | | fix18 | 2026-07-06 | 重复抓拍竞态、4路视频流、MQTT合并 | | V5 fix19 | 2026-06-25 | 基础版本 | 详细变更记录请查看 [CHANGELOG.md](CHANGELOG.md) ## 自动同步 项目包含 `sync_to_gogs.sh` 脚本,每次代码更新后执行即可自动同步到 Gogs 仓库: ```bash bash sync_to_gogs.sh ``` ## 许可证 本项目为内部使用项目。 ## 联系方式 - **作者**: steven_roc - **邮箱**: steven_roc@126.com - **Gogs**: https://git.zhonjin.com:40717/steven_roc/PlateRecApp