Files
2026-06-21 10:49:09 +08:00

171 lines
8.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 版为开发原型 |