车牌识别系统 - 基于HyperLPR3/MNN的嵌入式C++车牌识别平台,支持多路RTSP视频流、飞书消息推送、MQTT、Web管理、重量调度、登录认证等功能

steven_roc 6bb408c0ab fix27 v44: bug fixes from code review 1 dienu atpakaļ
assets d8ac0cc3df Initial commit 4 dienas atpakaļ
config d8ac0cc3df Initial commit 4 dienas atpakaļ
scripts d8ac0cc3df Initial commit 4 dienas atpakaļ
src 6bb408c0ab fix27 v44: bug fixes from code review 1 dienu atpakaļ
third_party d8ac0cc3df Initial commit 4 dienas atpakaļ
CHANGELOG.md 6bb408c0ab fix27 v44: bug fixes from code review 1 dienu atpakaļ
CMakeLists.txt d8ac0cc3df Initial commit 4 dienas atpakaļ
README.md 6bb408c0ab fix27 v44: bug fixes from code review 1 dienu atpakaļ
sync_to_gogs.sh 6bb408c0ab fix27 v44: bug fixes from code review 1 dienu atpakaļ

README.md

车牌识别系统 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. 克隆仓库

git clone https://git.zhonjin.com:40717/steven_roc/PlateRecApp.git
cd PlateRecApp

2. 编译

mkdir build && cd build
cmake ..
make -j4

3. 配置

# 复制配置模板并修改
cp config/config一号门.ini config.ini
# 编辑 config.ini 填入实际参数

4. 部署

sudo bash scripts/deploy.sh

5. 验证

sudo systemctl status PlateRecApp
# 访问 Web 管理: http://<设备IP>:8080

配置文件说明

核心配置通过 config.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

自动同步

项目包含 sync_to_gogs.sh 脚本,每次代码更新后执行即可自动同步到 Gogs 仓库:

bash sync_to_gogs.sh

许可证

本项目为内部使用项目。

联系方式