yethuaung9124-coder/Myanmar-License-Plate-Detection-System

GitHub: yethuaung9124-coder/Myanmar-License-Plate-Detection-System

基于 YOLO 与 OCR 的缅甸车牌实时检测识别系统,提供可视化仪表盘、结构化信息解析与事件日志存储。

Stars: 0 | Forks: 0

# MLPD - 缅甸车牌检测系统 该系统结合了 YOLO 车牌检测、OCR、缅甸地区/镇区规则解析、车牌颜色分类、车型模糊匹配、SQLite 事件存储以及基于浏览器的仪表盘交互。 ## 功能 - 通过实时摄像头画面进行实时车牌检测与识别。 - 支持上传图片以进行单张图片车牌检测。 - 支持上传视频,从抽帧画面中提取唯一车牌。 - 将车牌裁剪图像保存至 `captures/` 文件夹。 - 将检测结果保存至 `detection_log.txt` 和 `data/mlpd_events.sqlite`。 - 显示地区、镇区、主号码、底部文本、车型、车牌颜色、车辆类型、置信度及状态。 - 支持通过仪表盘或 API 设置摄像头旋转与镜像。 - 提供健康状态、日志、抓拍图像及事件检查 API 端点。 ## 仓库结构 ``` MLPD/ ├── server.py # FastAPI web server and API routes ├── lpr_service.py # Camera, tracking, upload processing, DB/log service layer ├── lpr_engine.py # YOLO detection, OCR, plate parsing, color/type/model logic ├── dashboard.html # Main browser dashboard ├── requirements.txt # Python dependency list ├── start.ps1 # Windows server launcher ├── stop.ps1 # Server stop script ├── logs.ps1 # Server log viewer ├── server_daemon.py # Background uvicorn runner ├── plate_detector.pt # License plate detector model ├── car_models.txt # Car model matching dictionary ├── region-rules.txt # Myanmar region/township rules ├── myanmar-region-plate-rules.txt # Region code/range rules ├── color_classifier/ │ └── myanmar_plate_color_v4/ │ └── weights/best.pt # Plate color classifier model ├── static/ │ ├── app.js # Dashboard frontend logic │ ├── style.css # Dashboard styling │ ├── LOGO.jpg │ └── icon.jpg ├── captures/ # Detected plate crop images └── data/ └── mlpd_events.sqlite # Detection event database ``` ## 环境要求 - Windows PowerShell - Python 3.13(或项目启动器选择的其他兼容版本) - 摄像头或图像/视频测试文件 - 首次安装依赖所需的网络连接 `requirements.txt` 中当前的 Python 依赖项包括: ``` fastapi uvicorn[standard] python-multipart aiofiles opencv-python numpy<2.4 ultralytics easyocr torch pillow ``` 注意:在 Windows 上,PaddleOCR 在 Python 3.14+ 版本下可能无法稳定运行。本项目被设计为在需要时可回退至 EasyOCR。如果您想使用 PaddleOCR,请单独设置一个兼容版本的 Python 环境。 ## 快速开始 打开 PowerShell 并切换至项目文件夹: ``` cd **location** ``` 安装依赖并启动服务器,同时打开浏览器: ``` .\start.ps1 -Install -OpenBrowser ``` 之后在无需重新安装依赖的情况下启动服务器: ``` .\start.ps1 -OpenBrowser ``` 在后台运行服务器且不打开浏览器: ``` .\start.ps1 ``` 在前台运行服务器: ``` .\start.ps1 -Foreground ``` 重启服务器并打开浏览器: ``` .\start.ps1 -Restart -OpenBrowser ``` 停止服务器: ``` .\stop.ps1 ``` 查看日志: ``` .\logs.ps1 ``` 查看错误日志: ``` .\logs.ps1 -ErrorLog ``` ## 浏览器 URL 在此处打开仪表盘: ``` http://localhost:8000 ``` 如果端口 `8000` 已被占用,启动器将尝试使用 `8001`、`8002` 等。请查看 PowerShell 输出中生效的 `URL:` 行。 ## 仪表盘使用 仪表盘包含实时摄像头预览、最新检测结果、事件摘要、抓取图像库以及上传控件。 典型工作流程: 1. 启动服务器:`.\start.ps1 -OpenBrowser` 2. 选择摄像头源并启动摄像头。 3. 将车辆车牌对准摄像头。 4. 查看检测状态、最新结果、抓拍图像及日志表。 5. 如果摄像头方向不正确,请调整旋转或镜像设置。 6. 使用仪表盘控件测试图片/视频上传。 ## 检测结果字段 MLPD 会提取并返回每次检测的以下字段: | 字段 | 描述 | | --- | --- | | `region` | 地区代码,例如 `YGN`, `MDY`, `BGO` | | `township` | 镇区代码 | | `region_display` | 组合的地区-镇区字符串,例如 `YGN-12` | | `township_name` | 根据规则文件得出的镇区名称 | | `number` | 最终格式化的车牌号码 | | `main_number` | 中间排的主号码 | | `bottom_text_raw` | 底排的原始 OCR 文本 | | `model` | 从 `car_models.txt` 匹配出的车型 | | `color` | 推断出的车牌颜色 | | `type` / `vehicle_type` | 根据车牌规则推断出的车辆类型 | | `confidence` | OCR/模型匹配的置信度 | | `detection_confidence` | YOLO 车牌检测器的置信度 | | `status` | `Success` 或 `Fail` | | `missing_fields` | 未检测到的必填字段 | | `capture_url` | 保存的车牌裁剪图像的 URL | ## OCR 与检测 Pipeline 系统流程: 1. `server.py` 提供 FastAPI API 端点。 2. `lpr_service.py` 管理摄像头画面、上传处理、追踪、SQLite 事件以及日志文件。 3. `lpr_engine.py` 执行车牌检测、OCR 预处理、地区/镇区解析、主号码提取、底部文本匹配、颜色检测以及车辆类型分类。 4. 车牌裁剪图像会保存在 `captures/` 下,结果会写入 `detection_log.txt` 和 `data/mlpd_events.sqlite`。 5. 仪表盘从 `/data`、`/events`、`/log_entries` 和 `/captures_data` 等 API 端点检索数据。 ## API 端点 | 方法 | API 端点 | 用途 | | --- | --- | --- | | `GET` | `/` | 主仪表盘 | | `GET` | `/health` | 检查服务器、摄像头及 OCR/模型状态 | | `GET` | `/video_feed` | MJPEG 实时摄像头流 | | `GET` | `/data` | 最新检测 payload | | `GET` | `/events?limit=50` | 近期检测事件 | | `GET` | `/event_stats` | 总计/成功/失败/最新统计数据 | | `POST` | `/camera/start` | 启动摄像头采集 | | `POST` | `/camera/stop` | 停止摄像头采集 | | `POST` | `/camera/settings` | 更新旋转/镜像设置 | | `GET` | `/log_file` | 原始检测日志文本 | | `GET` | `/log_entries?limit=100` | 解析后的日志/事件列表 | | `GET` | `/captures_data` | 抓拍图像元数据 | | `GET` | `/captures` | 抓拍图像库页面 | | `GET`/`POST` | `/clear_logs` | 清除日志/事件 | | `POST` | `/upload_image` | 上传图片进行车牌检测 | | `POST` | `/upload_video` | 上传视频进行车牌检测 | ## API 测试命令 检查健康状态: ``` Invoke-RestMethod http://localhost:8000/health ``` 获取最新检测数据: ``` Invoke-RestMethod http://localhost:8000/data ``` 获取最近的日志条目: ``` Invoke-RestMethod "http://localhost:8000/log_entries?limit=20" ``` 获取抓拍元数据: ``` Invoke-RestMethod http://localhost:8000/captures_data ``` 启动摄像头: ``` Invoke-RestMethod ` -Method Post ` -Uri http://localhost:8000/camera/start ` -ContentType "application/json" ` -Body '{"source":0,"label":"Live Camera","rotation":"none","mirror":false}' ``` 停止摄像头: ``` Invoke-RestMethod -Method Post http://localhost:8000/camera/stop ``` ## 上传示例 PowerShell 7+: ``` curl.exe -X POST ` -F "image=@D:\path\to\plate.jpg" ` -F "rotation=none" ` -F "mirror=false" ` http://localhost:8000/upload_image ```
标签:AV绕过, FastAPI, OCR, SQLite, YOLO, 凭据扫描, 网络测绘, 计算机视觉, 车牌识别, 逆向工具