171 lines
8.0 KiB
Markdown
171 lines
8.0 KiB
Markdown
# ICE_Dataset
|
||
|
||
ICE 车牌检测/识别项目的数据集仓库,涵盖 CCPD 原始数据、特殊车牌生成、YOLO 训练数据构建。
|
||
|
||
---
|
||
|
||
## 目录总览
|
||
|
||
```
|
||
ICE_Dataset/
|
||
├── chinese_license_plate_generator/ ← 车牌底板渲染引擎(核心依赖)
|
||
├── CCPD/ ← CCPD2019 & CCPD2020 原始街拍图片
|
||
├── CCPD_SPE_GEN/ ← 特殊车牌生成工具集
|
||
│ ├── cv_pipeline/ ← Python 原型管线(开发/调色/预览用)
|
||
│ ├── cpp_pipeline/ ← ★ C++ 生产引擎(~53张/秒,实际全量生成用)
|
||
│ ├── gan_pipeline/ ← GAN 纹理迁移实验(已废弃,未实际使用)
|
||
│ └── scripts/ ← 一键运行脚本
|
||
├── CCPD_SPE/ ← 特殊车牌数据集输出(C++ 管线全量生成)
|
||
├── ccpd_combined_5k5k_spe/ ← YOLO 训练用合并数据集
|
||
├── scripts/ ← 数据集构建/统计工具
|
||
├── LP_Standard.md ← GA36-2018 中国车牌标准参考
|
||
└── output/ ← 临时输出、调色预览
|
||
```
|
||
|
||
---
|
||
|
||
## 各部分说明
|
||
|
||
### 1. `chinese_license_plate_generator/` — 车牌渲染引擎
|
||
|
||
第三方车牌图像生成器,提供 `MultiPlateGenerator`:
|
||
- 按 GA36-2018 标准渲染 9 种特殊车牌底板
|
||
- 输出纯车牌图像(无背景),作为后续管线的合成素材
|
||
- **管线实际依赖**:被 `cv_pipeline/plate_swap.py` 直接调用
|
||
|
||
### 2. `CCPD/` — CCPD 原始数据集
|
||
|
||
| 子集 | 说明 |
|
||
|------|------|
|
||
| `CCPD2019/ccpd_base` | 标准街拍(主力) |
|
||
| `CCPD2019/ccpd_tilt` | 倾斜视角 |
|
||
| `CCPD2019/ccpd_rotate` | 旋转视角 |
|
||
| `CCPD2019/ccpd_fn` | 远/近景(Far/Near) |
|
||
| `CCPD2019/ccpd_weather` | 恶劣天气 |
|
||
| `CCPD2019/ccpd_blur` | 模糊 |
|
||
| `CCPD2019/ccpd_challenge` | 挑战性样本 |
|
||
| `CCPD2020/` | CCPD2020 扩展集 |
|
||
|
||
CCPD 文件名自带角点标注(4 个角点 `x&y_x&y_x&y_x&y`),**管线不依赖 YOLO 检测**,直接解析文件名即可获取车牌坐标。
|
||
|
||
### 3. `CCPD_SPE_GEN/` — 特殊车牌生成工具
|
||
|
||
#### 3.1 `cv_pipeline/` ★ 主力管线(实际使用)
|
||
|
||
| 文件 | 功能 |
|
||
|------|------|
|
||
| `plate_swap.py` | 核心:CCPD 原图 → 解析角点 → 生成特殊车牌 → Lab 色彩对齐 → 透视回贴 → 羽化 + 噪声匹配 → 输出 |
|
||
| `extract_real_plates.py` | 从 CCPD 提取真实车牌 ROI(用于 GAN 训练数据准备,实际未用) |
|
||
| `gen_pure_plates.py` | 生成纯合成车牌(无背景) |
|
||
| `color_tuner.py` | HSV 手动调色 GUI,保存参数到 `plate_color_profile.py` |
|
||
| `plate_color_profile.py` | 底板色校正参数(由 color_tuner.py 生成,`plate_swap.py` 运行时读取) |
|
||
|
||
**特点**:零训练成本,纯 OpenCV + NumPy,即开即用。
|
||
|
||
#### 3.2 `cpp_pipeline/` — C++ 高性能版
|
||
|
||
| 文件 | 功能 |
|
||
|------|------|
|
||
| `plate_swap.cpp/.hpp` | C++ 复刻 CV 管线核心逻辑 |
|
||
| `main.cpp` | 多线程入口(`--workers` 参数,默认自动检测全部 CPU 核心) |
|
||
| `gen_plate_pool.py` | 预生成车牌池 `.bin` 供 C++ 读取 |
|
||
| `build.ps1` | VS2022 + CMake 编译脚本 |
|
||
| `install/plate_swap.exe` | 预编译可执行文件(Git LFS) |
|
||
|
||
**当前状态**:C++ 版是 **CCPD_SPE 的实际生产引擎**,当前生成 9000 张(9 类 × 1000 张,~53 张/秒,线程数按本机 CPU 核心自动分配),全量 35.5 万张预估 1.9 小时。
|
||
Python `cv_pipeline` 作为**开发原型**保留——用于初始验证、`color_tuner.py` 调色 GUI、以及单张预览/调试。
|
||
两套管线核心功能对齐(色温匹配、噪声匹配、退化模拟一致),羽化实现有差异:Python 用 `distanceTransform` 精确渐变,C++ 用 `erode+GaussianBlur` 近似(快 3 倍,肉眼几无区别)。
|
||
|
||
#### 3.3 `gan_pipeline/` — GAN 纹理迁移(已废弃)
|
||
|
||
| 文件 | 功能 |
|
||
|------|------|
|
||
| `models.py` | CUT (Contrastive Unpaired Translation) Generator + PatchGAN + PatchNCE Loss |
|
||
| `dataset.py` | L 通道车牌 DataLoader |
|
||
| `train.py` | 训练脚本 |
|
||
|
||
**当前状态**:❌ **未实际使用**。设计目标是用 GAN 将合成车牌的 L (亮度) 通道纹理迁移为真实风格,替代硬编码的 JPEG 退化模拟。但因以下原因废弃:
|
||
- CV 管线的 JPEG 降采样 + 模糊退化已能满足训练需要
|
||
- GAN 训练需要额外 GPU 时间,收益不明确
|
||
- YOLO 检测模型对退化模拟的敏感度不高
|
||
|
||
代码保留以供未来可能的实验。
|
||
|
||
#### 3.4 `scripts/` — 一键脚本
|
||
|
||
| 脚本 | 功能 |
|
||
|------|------|
|
||
| `quick_test.sh` | 快速测试:生成 20 张警车牌 |
|
||
| `preview_all.sh` | 预览全部 9 种类型(各 2 张 + 中间结果) |
|
||
| `gan_data_prep.sh` | GAN 训练数据准备(当前无实际用途) |
|
||
|
||
### 4. `CCPD_SPE/` — 特殊车牌数据集(输出)
|
||
|
||
由 C++ 管线(`cpp_pipeline/`)生成,按 CCPD 子集 → 特殊车牌类型两级目录组织:
|
||
```
|
||
CCPD_SPE/
|
||
├── ccpd_base/
|
||
│ ├── police/ gangao/ coach/ new_energy/ ...
|
||
├── ccpd_tilt/
|
||
├── ccpd_weather/
|
||
...
|
||
```
|
||
文件命名:`{CCPD原名}__{特殊车牌类型}__{车牌号拼音}.jpg`
|
||
|
||
### 5. `ccpd_combined_5k5k_spe/` — YOLO 训练数据集
|
||
|
||
由 `scripts/build_ccpd_combined.py` 构建,合并三部分:
|
||
- CCPD2019 原始蓝牌(5k 张采样)
|
||
- CCPD2020 原始蓝牌(5k 张采样)
|
||
- CCPD_SPE 特殊车牌(全量)
|
||
|
||
输出标准 YOLO 格式:`images/` + `labels/`(单类 `license_plate`),直接用于训练 `yolov5t`。
|
||
|
||
### 6. 其他
|
||
|
||
| 路径 | 说明 |
|
||
|------|------|
|
||
| `LP_Standard.md` | GA36-2018 中国机动车号牌标准全文参考(颜色、尺寸、字符集) |
|
||
| `scripts/build_ccpd_combined.py` | YOLO 数据集构建脚本 |
|
||
| `output/` | 临时输出目录(调色预览、调试中间结果),已在 `.gitignore` 中排除 |
|
||
|
||
---
|
||
|
||
## 数据流(实际使用)
|
||
|
||
```
|
||
chinese_license_plate_generator/ CCPD/ (CCPD2019/CCPD2020)
|
||
│ │
|
||
▼ ▼
|
||
MultiPlateGenerator parse_ccpd_filename() 解析角点
|
||
│ │
|
||
▼ ▼
|
||
cpp_pipeline/plate_swap.cpp ─── 色温匹配 → 透视回贴 → 羽化 → 噪声 ──→ CCPD_SPE/
|
||
│ │
|
||
[预生成 .bin 池] │
|
||
│
|
||
CCPD (5k+5k 蓝牌) ─────────────────────────────────────────────────┤
|
||
▼
|
||
build_ccpd_combined.py
|
||
│
|
||
▼
|
||
ccpd_combined_5k5k_spe/
|
||
│
|
||
▼
|
||
ICE_NNv2/yolov5t/
|
||
```
|
||
|
||
---
|
||
|
||
## 技术说明
|
||
|
||
| 项目 | 说明 |
|
||
|------|------|
|
||
| 角点来源 | CCPD 文件名自带,无需 YOLO/ICE-COR 推理 |
|
||
| 色温匹配 | Lab 空间白参考提取,每通道 clamp ±15% |
|
||
| 羽化策略 | 纯内侧距离变换羽化,不做泊松融合(保护车牌本色) |
|
||
| 噪声匹配 | 从原车牌区域估计 σ + Laplacian 模糊度,仅车牌区域叠加 |
|
||
| 退化模拟 | JPEG Q=2 + 4×降采样→最近邻升采样 + GaussianBlur |
|
||
| GAN | **未实际使用**,代码保留在 `gan_pipeline/` |
|
||
| C++ 版 | ★ **生产引擎**,CCPD_SPE 全量由此生成;Python 版为开发原型 |
|