起重机挂钩数据集自动生成工具 - 从视频到CVAT标注的全流程自动化
|
|
há 1 semana atrás | |
|---|---|---|
| README.md | há 1 semana atrás | |
| config.py | há 1 semana atrás | |
| pipeline.py | há 1 semana atrás | |
| upload_cvat.py | há 1 semana atrás |
从视频到CVAT标注的全流程自动化工具,用于生成钢包位起重机挂钩识别训练数据集。
hoist_dataset_project/
├── config.py # 配置文件(路径、参数、模型)
├── pipeline.py # 主流程脚本(7步自动化)
├── upload_cvat.py # CVAT上传脚本
└── README.md # 本文件
编辑 config.py,修改以下路径:
# 视频源目录
VIDEO_DIR = Path('/path/to/your/videos')
# 中间数据目录(抽帧结果)
EXTRACTED_DIR = Path('/path/to/extracted')
# 最终输出目录
OUTPUT_DIR = Path('/path/to/output')
# CVAT ZIP输出目录
CVAT_ZIP_DIR = Path('/path/to/zips')
# 模型权重路径
MODEL_PATH = '/path/to/best.pt'
# 运行全部7个步骤
python pipeline.py
# 跳过已完成的步骤(例如抽帧已完成)
python pipeline.py --skip-extract
# 跳过多个步骤
python pipeline.py --skip-extract --skip-select
# 上传所有机位
python upload_cvat.py
# 只上传指定机位
python upload_cvat.py --cameras cam01 cam02
# 删除测试任务并上传
python upload_cvat.py --delete-test
┌─────────────────────────────────────────────────────────────┐
│ Step 1: 视频抽帧 │
│ - FFmpeg NVDEC硬件解码加速 │
│ - 自动解析目录结构提取机位/日期信息 │
│ - 输出: 32.7万帧图片 │
├─────────────────────────────────────────────────────────────┤
│ Step 2: Engagement状态筛选 │
│ - 多维度评分: hoist+ear共现、距离中心、数量惩罚 │
│ - 时序去重避免连续帧重复 │
│ - 输出: 挂钩工作状态帧 │
├─────────────────────────────────────────────────────────────┤
│ Step 3: Ready标签注入 │
│ - YOLOv5模型检测挂钩到位状态 │
│ - IoU过滤避免与ear重叠 │
│ - 输出: 带ready标签的图片 │
├─────────────────────────────────────────────────────────────┤
│ Step 4: 质量过滤 │
│ - ready/hoist面积比过滤 │
│ - ear宽高比过滤(排除扁平误检) │
│ - 输出: 高质量标注帧 │
├─────────────────────────────────────────────────────────────┤
│ Step 5: 高阈值重推理 │
│ - conf=0.5重新推理所有图片 │
│ - YOLO NMS自动消除重叠框 │
│ - 输出: 无重叠的纯净标注 │
├─────────────────────────────────────────────────────────────┤
│ Step 6: 质量排序选取 │
│ - 亮度+清晰度综合评分 │
│ - 每机位取top 1000张 │
│ - 输出: 最终数据集 │
├─────────────────────────────────────────────────────────────┤
│ Step 7: CVAT格式导出 │
│ - 生成标准CVAT导入ZIP │
│ - 支持API自动上传 │
│ - 输出: 10个CVAT数据包 │
└─────────────────────────────────────────────────────────────┘
dataset_release/
├── images/
│ ├── cam01/ # 1000张图片
│ ├── cam02/
│ └── ...
└── labels/
├── cam01/ # YOLO格式标签
├── cam02/
└── ...
cvat_zips_release/
├── cam01.zip # CVAT导入包
├── cam02.zip
└── ...
YOLO格式:class_id x_center y_center width height
| class_id | 名称 | 说明 |
|---|---|---|
| 0 | hoist | 吊钩 |
| 1 | ear | 耳板 |
| 2 | ready | 挂钩到位 |
所有可调参数在 config.py 中集中管理:
| 参数 | 默认值 | 说明 |
|---|---|---|
| MAX_PER_CAM | 1000 | 每机位最终保留图片数 |
| SCORE_THRESH | 0.35 | Engagement评分阈值 |
| SEQ_GAP | 180 | 时序去重间隔 |
| REINFER_CONF | 0.5 | 重推理置信度阈值 |
| REINFER_IOU | 0.45 | 重推理NMS IoU阈值 |
| EAR_FLAT_ASPECT_THRESH | 2.0 | ear宽高比阈值 |
| READY_HOIST_RATIO_THRESH | 0.9 | ready/hoist面积比阈值 |
--skip-*参数跳过已完成的步骤