155 lines
4.5 KiB
Markdown
155 lines
4.5 KiB
Markdown
# 车牌识别系统
|
||
|
||
基于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接口
|
||
- 数据库集成
|
||
- 性能统计和分析 |