172 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			172 lines
		
	
	
		
			5.0 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接口(占位)
 | 
						||
└── LPRNET_part/              # LPRNet识别模块
 | 
						||
    ├── lpr_interface.py      # LPRNet接口(已完成)
 | 
						||
    └── LPRNet__iteration_74000.pth  # LPRNet模型权重文件
 | 
						||
```
 | 
						||
 | 
						||
## 功能特性
 | 
						||
 | 
						||
### 1. 实时车牌检测
 | 
						||
- 基于YOLO11 Pose模型进行车牌检测
 | 
						||
- 支持蓝牌(类别0)和绿牌(类别1)识别
 | 
						||
- 实时摄像头画面处理
 | 
						||
 | 
						||
### 2. 四角点定位
 | 
						||
- 检测车牌的四个角点:right_bottom, left_bottom, left_top, right_top
 | 
						||
- 只有检测到完整四个角点的车牌才进行后续处理
 | 
						||
- 用黄色线条连接四个角点显示检测结果
 | 
						||
 | 
						||
### 3. 透视矫正
 | 
						||
- 使用四个角点进行透视变换
 | 
						||
- 将倾斜的车牌矫正为标准矩形
 | 
						||
- 输出标准尺寸的车牌图像供识别使用
 | 
						||
 | 
						||
### 4. 多种识别方案
 | 
						||
- 支持OCR、CRNN和LPRNet三种车牌识别方法
 | 
						||
- LPRNet模型准确率高达98%
 | 
						||
- 模块化接口设计,便于切换不同识别算法
 | 
						||
 | 
						||
### 5. PyQt界面
 | 
						||
- 左侧:实时摄像头画面显示
 | 
						||
- 右侧:检测结果展示区域
 | 
						||
  - 顶部显示识别到的车牌数量
 | 
						||
  - 每行显示:车牌类型、矫正后图像、车牌号
 | 
						||
- 美观的现代化界面设计
 | 
						||
 | 
						||
### 6. 模块化设计
 | 
						||
- yolopart:负责车牌定位和矫正
 | 
						||
- OCR_part/CRNN_part/LPRNET_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. 选择识别模块
 | 
						||
在 `main.py` 中修改导入语句来选择不同的识别方案:
 | 
						||
 | 
						||
```python
 | 
						||
# 使用LPRNet(推荐,准确率98%)
 | 
						||
from LPRNET_part.lpr_interface import LPRNmodel_predict, LPRNinitialize_model
 | 
						||
 | 
						||
# 使用OCR
 | 
						||
from OCR_part.ocr_interface import LPRNmodel_predict, LPRNinitialize_model
 | 
						||
 | 
						||
# 使用CRNN
 | 
						||
from CRNN_part.crnn_interface import LPRNmodel_predict, LPRNinitialize_model
 | 
						||
```
 | 
						||
 | 
						||
### 6. 使用说明
 | 
						||
1. 点击"启动摄像头"按钮开始检测
 | 
						||
2. 将车牌对准摄像头
 | 
						||
3. 系统会自动检测车牌并显示:
 | 
						||
   - 检测框和角点连线
 | 
						||
   - 右侧显示车牌类型、矫正图像和车牌号
 | 
						||
4. 点击"停止摄像头"结束检测
 | 
						||
 | 
						||
## 模型输出格式
 | 
						||
 | 
						||
YOLO Pose模型输出包含:
 | 
						||
- **检测框**:车牌的边界框坐标
 | 
						||
- **类别**:0=蓝牌,1=绿牌
 | 
						||
- **置信度**:检测置信度分数
 | 
						||
- **关键点**:四个角点坐标
 | 
						||
  - right_bottom:右下角
 | 
						||
  - left_bottom:左下角  
 | 
						||
  - left_top:左上角
 | 
						||
  - right_top:右上角
 | 
						||
 | 
						||
## 接口说明
 | 
						||
 | 
						||
### 车牌识别接口
 | 
						||
 | 
						||
项目为OCR、CRNN和LPRNet识别模块提供了标准接口:
 | 
						||
 | 
						||
```python
 | 
						||
# 接口函数名(导入所需模块,每个模块统一函数名)
 | 
						||
 | 
						||
# 初始化
 | 
						||
from 对应模块 import LPRNinitialize_model
 | 
						||
LPRNinitialize_model()
 | 
						||
 | 
						||
# 预测主函数
 | 
						||
from 对应模块 import LPRNmodel_predict
 | 
						||
result = LPRNmodel_predict(corrected_image)  # 返回7个字符的列表
 | 
						||
```
 | 
						||
 | 
						||
### 输入参数
 | 
						||
- `corrected_image`:numpy数组格式的矫正后车牌图像
 | 
						||
 | 
						||
### 返回值
 | 
						||
- 长度为7的字符列表,包含车牌号的每个字符
 | 
						||
- 例如:`['京', 'A', '1', '2', '3', '4', '5']`
 | 
						||
 | 
						||
### LPRNet模块特性
 | 
						||
 | 
						||
- **高准确率**: 模型准确率高达98%
 | 
						||
- **快速推理**: 基于深度学习的端到端识别
 | 
						||
- **CTC解码**: 使用CTC(Connectionist Temporal Classification)解码算法
 | 
						||
- **支持中文**: 完整支持中文省份简称和字母数字组合
 | 
						||
- **模型权重**: 使用预训练的LPRNet__iteration_74000.pth权重文件
 | 
						||
 | 
						||
## 开发说明
 | 
						||
 | 
						||
### 添加新的识别算法
 | 
						||
1. 在对应目录(OCR_part或CRNN_part)实现识别函数
 | 
						||
2. 确保函数签名与接口一致
 | 
						||
3. 在main.py中导入对应模块即可
 | 
						||
 | 
						||
### 自定义模型
 | 
						||
1. 替换 `yolopart/yolo11s-pose42.pt` 文件
 | 
						||
2. 确保新模型输出格式与现有接口兼容
 | 
						||
3. 根据需要调整类别名称和数量
 | 
						||
 | 
						||
### 调试模式
 | 
						||
在代码中设置调试标志可以输出更多信息:
 | 
						||
```python
 | 
						||
# 在detector.py中设置verbose=True
 | 
						||
results = self.model(image, conf=conf_threshold, verbose=True)
 | 
						||
```
 | 
						||
 | 
						||
## 扩展功能
 | 
						||
 | 
						||
系统设计支持以下扩展:
 | 
						||
- 多摄像头支持
 | 
						||
- 批量图像处理
 | 
						||
- 检测结果保存
 | 
						||
- 网络API接口
 | 
						||
- 数据库集成
 | 
						||
- 性能统计和分析 |