141 lines
3.9 KiB
Markdown
141 lines
3.9 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
|
||
# 接口函数名(导入所需模块,每个模块统一函数名)
|
||
|
||
# 初始化
|
||
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']`
|
||
|
||
## 开发说明
|
||
|
||
### 添加新的识别算法
|
||
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接口
|
||
- 数据库集成
|
||
- 性能统计和分析 |