177 lines
4.3 KiB
Markdown
177 lines
4.3 KiB
Markdown
# 车牌检测系统
|
||
|
||
基于YOLO11s模型的实时车牌检测应用,支持摄像头和视频文件输入,具备GPU加速和车牌识别接口。
|
||
|
||
## 功能特性
|
||
|
||
- ✅ **实时车牌检测**: 基于YOLO11s ONNX模型
|
||
- ✅ **GPU加速**: 支持CUDA GPU推理加速
|
||
- ✅ **多视频源**: 支持摄像头和视频文件切换
|
||
- ✅ **实时显示**: 显示检测框、置信度和实时FPS
|
||
- ✅ **图像切割**: 自动切割检测到的车牌区域
|
||
- ✅ **识别接口**: 预留车牌号识别接口,可接入OCR模型
|
||
- ✅ **友好界面**: 基于PyQt5的现代化用户界面
|
||
|
||
## 系统要求
|
||
|
||
- Python 3.7+
|
||
- Windows/Linux/macOS
|
||
- 摄像头(可选)
|
||
- NVIDIA GPU(可选,用于加速)
|
||
|
||
## 安装依赖
|
||
|
||
```bash
|
||
# 安装基础依赖
|
||
pip install -r requirements.txt
|
||
|
||
# 如果需要CPU版本的onnxruntime
|
||
pip uninstall onnxruntime-gpu
|
||
pip install onnxruntime
|
||
|
||
# 可选:安装车牌识别依赖
|
||
# PaddleOCR
|
||
pip install paddlepaddle paddleocr
|
||
|
||
# 或者 Tesseract
|
||
pip install pytesseract
|
||
```
|
||
|
||
## 使用方法
|
||
|
||
### 1. 准备模型文件
|
||
|
||
确保项目根目录下有以下文件:
|
||
- `last.onnx`: YOLO11s车牌检测模型
|
||
- `video.mp4`: 测试视频文件(可选)
|
||
|
||
### 2. 运行应用
|
||
|
||
```bash
|
||
python main.py
|
||
```
|
||
|
||
### 3. 界面操作
|
||
|
||
- **开始检测**: 点击"开始检测"按钮启动实时检测
|
||
- **切换视频源**: 勾选/取消"使用摄像头"切换视频源
|
||
- **启用检测**: 勾选/取消"启用检测"开关检测功能
|
||
- **查看结果**: 右侧面板显示检测信息和车牌识别结果
|
||
|
||
## 项目结构
|
||
|
||
```
|
||
yolopart/
|
||
├── main.py # 主程序入口
|
||
├── requirements.txt # 依赖包列表
|
||
├── README.md # 项目说明
|
||
├── last.onnx # YOLO11s模型文件
|
||
├── video.mp4 # 测试视频文件
|
||
├── ui/ # 用户界面模块
|
||
│ ├── __init__.py
|
||
│ ├── main_window.py # 主窗口
|
||
│ └── video_widget.py # 视频显示组件
|
||
├── models/ # 模型模块
|
||
│ ├── __init__.py
|
||
│ ├── yolo_detector.py # YOLO检测器
|
||
│ └── plate_recognizer.py # 车牌识别接口
|
||
└── utils/ # 工具模块
|
||
├── __init__.py
|
||
└── video_capture.py # 视频捕获管理
|
||
```
|
||
|
||
## 核心功能说明
|
||
|
||
### YOLO检测器 (`models/yolo_detector.py`)
|
||
|
||
- 支持ONNX格式的YOLO11s模型
|
||
- 自动GPU/CPU推理选择
|
||
- 640x640输入尺寸
|
||
- NMS后处理
|
||
- 检测框绘制和车牌切割
|
||
|
||
### 视频捕获 (`utils/video_capture.py`)
|
||
|
||
- 摄像头自动检测和配置
|
||
- 视频文件循环播放
|
||
- 实时FPS计算和显示
|
||
- 线程安全的帧获取
|
||
|
||
### 车牌识别接口 (`models/plate_recognizer.py`)
|
||
|
||
提供了多种识别器实现:
|
||
- `MockPlateRecognizer`: 模拟识别器(用于测试)
|
||
- `PaddleOCRRecognizer`: PaddleOCR识别器
|
||
- `TesseractRecognizer`: Tesseract识别器
|
||
|
||
可通过`PlateRecognizerManager`轻松切换不同的识别引擎。
|
||
|
||
## 配置说明
|
||
|
||
### 检测参数调整
|
||
|
||
在`models/yolo_detector.py`中可以调整:
|
||
- `conf_threshold`: 置信度阈值(默认0.5)
|
||
- `nms_threshold`: NMS阈值(默认0.4)
|
||
- `input_size`: 输入尺寸(默认640x640)
|
||
|
||
### 视频参数调整
|
||
|
||
在`utils/video_capture.py`中可以调整:
|
||
- 摄像头分辨率和帧率
|
||
- FPS计算窗口大小
|
||
- 视频文件路径
|
||
|
||
## 扩展开发
|
||
|
||
### 添加新的车牌识别器
|
||
|
||
1. 继承`PlateRecognizerInterface`基类
|
||
2. 实现`recognize`和`batch_recognize`方法
|
||
3. 在`PlateRecognizerManager`中注册新识别器
|
||
|
||
### 添加新功能
|
||
|
||
- 检测结果保存
|
||
- 车牌数据库管理
|
||
- 网络接口API
|
||
- 多摄像头支持
|
||
|
||
## 故障排除
|
||
|
||
### 常见问题
|
||
|
||
1. **模型加载失败**
|
||
- 检查`last.onnx`文件是否存在
|
||
- 确认onnxruntime版本兼容性
|
||
|
||
2. **摄像头无法打开**
|
||
- 检查摄像头是否被其他程序占用
|
||
- 尝试不同的摄像头索引
|
||
|
||
3. **GPU加速不生效**
|
||
- 确认安装了`onnxruntime-gpu`
|
||
- 检查CUDA环境配置
|
||
|
||
4. **车牌识别失败**
|
||
- 检查OCR依赖是否正确安装
|
||
- 尝试切换不同的识别器
|
||
|
||
### 性能优化
|
||
|
||
- 使用GPU加速推理
|
||
- 调整检测阈值减少误检
|
||
- 优化图像预处理流程
|
||
- 使用多线程处理
|
||
|
||
## 许可证
|
||
|
||
本项目仅供学习和研究使用。
|
||
|
||
## 更新日志
|
||
|
||
### v1.0.0
|
||
- 初始版本发布
|
||
- 支持YOLO11s车牌检测
|
||
- 实现基础UI界面
|
||
- 预留车牌识别接口 |