# 车牌识别系统

基于YOLO11 Pose模型的实时车牌检测与识别系统，支持蓝牌和绿牌的检测、四角点定位、透视矫正和车牌号识别。

## 项目结构

```
License_plate_recognition/
├── main.py                    # 主程序入口，PyQt界面
├── requirements.txt           # 依赖包列表
├── README.md                 # 项目说明文档
├── yolopart/                 # YOLO检测模块
│   ├── detector.py           # YOLO检测器类
│   └── yolo11s-pose42.pt     # YOLO pose模型文件
├── OCR_part/                 # OCR识别模块
│   └── ocr_interface.py      # OCR接口（占位）
└── CRNN_part/                # CRNN识别模块
    └── crnn_interface.py     # CRNN接口（占位）
```

## 功能特性

### 1. 实时车牌检测
- 基于YOLO11 Pose模型进行车牌检测
- 支持蓝牌（类别0）和绿牌（类别1）识别
- 实时摄像头画面处理

### 2. 四角点定位
- 检测车牌的四个角点：right_bottom, left_bottom, left_top, right_top
- 只有检测到完整四个角点的车牌才进行后续处理
- 用黄色线条连接四个角点显示检测结果

### 3. 透视矫正
- 使用四个角点进行透视变换
- 将倾斜的车牌矫正为标准矩形
- 输出标准尺寸的车牌图像供识别使用

### 4. PyQt界面
- 左侧：实时摄像头画面显示
- 右侧：检测结果展示区域
  - 顶部显示识别到的车牌数量
  - 每行显示：车牌类型、矫正后图像、车牌号
- 美观的现代化界面设计

### 5. 模块化设计
- yolopart：负责车牌定位和矫正
- OCR_part/CRNN_part：负责车牌号识别（接口已预留）
- 各模块独立，便于维护和扩展

## 安装和使用

### 1. 环境要求
- Python 3.7+
- Windows/Linux/macOS
- 摄像头设备

### 2. 安装依赖
```bash
pip install -r requirements.txt
```

### 3. 模型文件
确保 `yolopart/yolo11s-pose42.pt` 模型文件存在。这是一个YOLO11 Pose模型，专门训练用于车牌的四角点检测。

### 4. 运行程序
```bash
python main.py
```

### 5. 使用说明
1. 点击"启动摄像头"按钮开始检测
2. 将车牌对准摄像头
3. 系统会自动检测车牌并显示：
   - 检测框和角点连线
   - 右侧显示车牌类型、矫正图像和车牌号
4. 点击"停止摄像头"结束检测

## 模型输出格式

YOLO Pose模型输出包含：
- **检测框**：车牌的边界框坐标
- **类别**：0=蓝牌，1=绿牌
- **置信度**：检测置信度分数
- **关键点**：四个角点坐标
  - right_bottom：右下角
  - left_bottom：左下角  
  - left_top：左上角
  - right_top：右上角

## 接口说明

### OCR/CRNN接口
车牌号识别部分使用统一接口：

```python
# OCR接口
from OCR_part.ocr_interface import ocr_predict
result = ocr_predict(corrected_image)  # 返回7个字符的列表

# CRNN接口  
from CRNN_part.crnn_interface import crnn_predict
result = crnn_predict(corrected_image)  # 返回7个字符的列表
```

### 输入参数
- `corrected_image`：numpy数组格式的矫正后车牌图像

### 返回值
- 长度为7的字符列表，包含车牌号的每个字符
- 例如：`['京', 'A', '1', '2', '3', '4', '5']`

## 开发说明

### 添加新的识别算法
1. 在对应目录（OCR_part或CRNN_part）实现识别函数
2. 确保函数签名与接口一致
3. 在main.py中切换调用的函数即可

### 自定义模型
1. 替换 `yolopart/yolo11s-pose42.pt` 文件
2. 确保新模型输出格式与现有接口兼容
3. 根据需要调整类别名称和数量

## 注意事项

1. **模型文件**：确保YOLO模型文件路径正确
2. **摄像头权限**：程序需要摄像头访问权限
3. **光照条件**：良好的光照有助于提高检测精度
4. **车牌角度**：尽量保持车牌完整出现在画面中
5. **性能优化**：可根据硬件配置调整检测参数

## 故障排除

### 常见问题
1. **摄像头无法启动**：检查摄像头是否被其他程序占用
2. **模型加载失败**：确认模型文件路径和格式正确
3. **检测效果差**：调整光照条件或摄像头角度
4. **界面显示异常**：检查PyQt5安装是否完整

### 调试模式
在代码中设置调试标志可以输出更多信息：
```python
# 在detector.py中设置verbose=True
results = self.model(image, conf=conf_threshold, verbose=True)
```

## 扩展功能

系统设计支持以下扩展：
- 多摄像头支持
- 批量图像处理
- 检测结果保存
- 网络API接口
- 数据库集成
- 性能统计和分析