# 车牌检测系统

基于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界面
- 预留车牌识别接口