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, 凭据扫描, 网络测绘, 计算机视觉, 车牌识别, 逆向工具