Dataset: add READMEs, organize scripts, update .gitignore

- Add README.md to all 16 dataset directories with script references
- Centralize generation scripts under scripts/ with full README
- Update .gitignore to cover all data directories, keep only metadata
- Remove redundant CCPD/.gitignore (parent covers same rules)
- Remove stale scripts/test/ (254MB pipeline residue)
- Fix label parser reference: scripts are authoritative source of truth
This commit is contained in:
kirl committed 2026-06-23 14:41:39 +08:00
1 parent 7867c3bfaf
commit a64690477a
43 files changed
+2691 -205

No files matched your search

+99
View File
@@ -0,0 +1,99 @@
#!/usr/bin/env python3
"""
C++ 管线批量重生 CCPD_SPE (9 类 x 7 子集 = 9,000 张)
比 Python 版快 ~5x,24 线程饱和
"""
import os
import sys
import time
import shutil
import subprocess
from pathlib import Path
ICE_DATASET = Path(r'C:\Users\Kirl\Desktop\ICEv2\ICE_Dataset')
CPP_EXE = ICE_DATASET / 'CCPD_SPE_GEN' / 'cpp_pipeline' / 'build' / 'Release' / 'plate_swap.exe'
PLATE_POOL = ICE_DATASET / 'cpp_pipeline' / 'output' / 'plate_pool'
CCPD2019 = ICE_DATASET / 'CCPD' / 'CCPD2019'
SPE_OUT = ICE_DATASET / 'CCPD_SPE'
# 原始分布
DIST = {
'ccpd_base': 588,
'ccpd_blur': 55,
'ccpd_challenge': 159,
'ccpd_fn': 58,
'ccpd_rotate': 30,
'ccpd_tilt': 82,
'ccpd_weather': 28,
}
TYPES = ['police','army','gangao','shiguan_old','shiguan_new',
'lingguan_old','lingguan_new','coach','new_energy']
WORKERS = 24 # 物理核心数
SEED = 42
def main():
if not CPP_EXE.exists():
print(f"[FATAL] C++ exe not found: {CPP_EXE}")
return 1
if not PLATE_POOL.is_dir():
print(f"[FATAL] Plate pool not found: {PLATE_POOL}")
return 1
# 清空旧数据
if SPE_OUT.exists():
print(f"删除旧 CCPD_SPE: {SPE_OUT}")
shutil.rmtree(str(SPE_OUT))
total_start = time.time()
total = 0
for plate_type in TYPES:
t0 = time.time()
type_count = 0
print(f"\n{'='*50}")
print(f"[{plate_type}]")
print(f"{'='*50}")
for subdir, count in DIST.items():
ccpd_dir = CCPD2019 / subdir
if not ccpd_dir.is_dir():
continue
out_dir = SPE_OUT / subdir / plate_type
out_dir.mkdir(parents=True, exist_ok=True)
cmd = [
str(CPP_EXE),
'--ccpd-dir', str(ccpd_dir),
'--plate-type', plate_type,
'--plate-pool', str(PLATE_POOL),
'--output', str(out_dir),
'--num', str(count),
'--workers', str(WORKERS),
'--seed', str(SEED + hash(plate_type) % 10000),
]
print(f" {subdir}: {count} 张...", end=' ', flush=True)
result = subprocess.run(cmd, capture_output=True, text=True)
if result.returncode == 0:
print(f"OK")
type_count += count
else:
print(f"FAIL")
print(f" stderr: {result.stderr[:200]}")
elapsed = time.time() - t0
print(f" [{plate_type}] {type_count} 张, {elapsed:.0f}s")
total += type_count
total_t = time.time() - total_start
print(f"\n{'='*50}")
print(f"DONE! {total} 张, {total_t/60:.1f}min")
print(f"{'='*50}")
if __name__ == '__main__':
os.chdir(str(ICE_DATASET))
main()