# zeno_dataset_processor **Repository Path**: hhy08/zeno_dataset_processor ## Basic Information - **Project Name**: zeno_dataset_processor - **Description**: Zeno数据集处理脚本 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-10-28 - **Last Updated**: 2026-01-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Zeno数据集处理脚本 ## 目录 - [简介](#简介) - [环境配置](#环境配置) - [脚本说明](#脚本说明) - [1. strawberry_padding_disease.py](#1strawberry_padding_diseasepy) - [2. merge_fruit_stem_mask.py](#2merge_fruit_stem_maskpy) - [3. label_converter.py](#3label_converterpy) - [4. annotation_visualizer.py](#4annotation_visualizerpy) - [5. video_frame_extractor.py](#5video_frame_extractorpy) ## 简介 ## 环境配置 ```bash pip install -r requirements.txt ``` ## 脚本说明 ### 1.strawberry_padding_disease.py [返回目录](#目录) `strawberry_padding_disease.py` 是一个专门用于 **草莓病害数据集构建** 的自动化脚本。 它能够从已有标注的草莓图像中 **提取病害实例**,并将这些实例 **随机填充** 到背景图片上, 自动生成新的训练图像与对应的 YOLO 格式标注文件。 本脚本专注于草莓病害数据的扩充,适合目标检测、实例分割等计算机视觉任务的前期数据准备。 --- #### 功能特点 - ✅ 自动提取原始标注中的"Disease"类别实例(生成透明背景PNG) - ✅ 智能位置填充,避免重叠并优先选择中心区域 - ✅ 支持随机缩放、旋转和亮度调整 - ✅ 自动生成对应的YOLO格式多边形标注 - ✅ 固定随机种子确保结果可复现 - ✅ 批量自动化处理,无需人工干预 --- #### 使用方法 ##### 1.运行脚本 ```bash python strawberry_padding_disease.py [--num_padded N] ``` ###### 参数说明 | 参数 | 说明 | |:-----------------:|:--------------------------------------:| | | 原始数据集路径,需包含 images/、labels/、notes.json | | | 生成结果输出目录 | | | 背景图片目录,用于粘贴草莓病害实例 | | --num_padded | 可选,要创建的填充图像数量(默认:100) | ##### 2.输出目录结构 运行后在输出目录生成: ```txt output_path/ ├── extracted_instances/ # 提取的病害实例PNG(透明背景) ├── padded_images/ # 生成的填充图像 └── padded_labels/ # YOLO格式多边形标注文件 ``` --- #### 示例 假设项目目录结构如下: ```txt dataset/ ├── images/ │ ├── 0001.jpg │ ├── 0002.jpg ├── labels/ │ ├── 0001.txt │ ├── 0002.txt └── notes.json ``` 执行命令:`python strawberry_padding_disease.py ./dataset ./output ./backgrounds --num_padded 200` 输出: ```txt 找到 50 张原始图片 找到 100 张背景图片 成功提取 143 个Disease草莓实例 填充完成!共创建 200 张填充图像 任务完成 ``` --- #### 注意事项 - 仅处理"Disease"类别的草莓实例 - 保持原始标注格式和坐标精度 - 自动处理不同尺寸的背景图片 - 随机种子固定,确保多次运行结果一致 ### 2.merge_fruit_stem_mask.py [返回目录](#目录) `merge_fruit_stem_mask.py` 是一个专门用于 **处理Label Studio标注数据** 的自动化脚本。 它能够将Label Studio项目中分开标注的 **果实和果梗多边形** 按关系融合为单一标注, 并生成标准的YOLO格式标注文件。 本脚本专注于解决果实与果梗的分割标注融合问题,适合农业视觉分析中的果实检测和分割任务。 --- #### 功能特点 - ✅ 自动解析Label Studio导出的JSON标注文件 - ✅ 使用膨胀腐蚀算法智能融合果实和果梗多边形 - ✅ 支持不同图像尺寸的自适应参数调整 - ✅ 生成标准的YOLO格式多边形标注 - ✅ 固定随机种子确保颜色映射一致性 - ✅ 批量处理整个数据集,自动跳过无标注图像 --- #### 使用方法 ##### 1.运行脚本 ```bash python merge_fruit_stem_mask.py ``` ###### 参数说明 | 参数 | 说明 | |:------------------:|:--------------------------------------:| | | 原始数据集路径,需包含 images/、labels/、notes.json | | | Label Studio导出的JSON标注文件路径 | ##### 2.输出目录结构 运行后在项目目录重新生成: ```txt project_path/ └── labels/ # YOLO格式标注文件 ``` --- #### 示例 假设项目目录结构如下: ```txt project/ ├── images/ │ ├── image1.jpg │ ├── image2.jpg ├── labels/ │ ├── 0001.txt │ ├── 0002.txt ├── notes.json └── export.json # Label Studio导出文件 ``` 执行命令:`python merge_fruit_stem_mask.py ./project ./project/export.json` 输出: ```txt 固定随机种子为 42 开始融合果实与果梗多边形 ... 已处理 image1.jpg: 3 个标注写入 image1.txt 已处理 image2.jpg: 2 个标注写入 image2.txt 任务完成 ``` --- #### 注意事项 - 自动删除并重新创建labels目录 - 仅处理包含多边形关系的图像 - 支持PNG和JPG格式图像 - 自动适配不同图像尺寸的处理参数 - 保持Label Studio中的类别映射关系 ### 3.label_converter.py [返回目录](#目录) `label_converter.py` 是一个专门用于 **处理YOLO格式标签顺序** 的自动化脚本。 它能够解决Label Studio导出标签顺序不符合要求的问题,将标签索引按照指定映射关系进行转换, 并自动更新相关的配置文件。 本脚本专注于标签顺序的标准化处理,确保标注文件与目标类别顺序保持一致。 --- #### 功能特点 - ✅ 支持两种映射关系:十三分类转七分类、七分类转七分类 - ✅ 自动处理labels目录中的所有标注文件 - ✅ 自动更新classes.txt和notes.json文件 - ✅ 保持原有标注格式和坐标精度 - ✅ 批量自动化处理,无需人工干预 --- #### 使用方法 ##### 1.运行脚本 ```bash python merge_fruit_stem_mask.py ``` ###### 参数说明 | 参数 | 说明 | |:--------------:|:--------------------------------------:| | | 原始数据集路径,需包含 images/、labels/、notes.json | | | 映射类型:13to7(十三分类转七分类)或 7to7(七分类转七分类) | ##### 2.标签处理效果 转换前标签顺序: ```txt Disease Ripe Ripe2 Ripe4 Ripe7 Unripe strawberry_flower ``` 转换后标签顺序: ```txt Ripe Ripe7 Ripe4 Ripe2 Unripe Disease strawberry_flower ``` ##### 3.自动更新的文件 - labels/ - 所有标注文件 - classes.txt - 类别名称文件 - notes.json - 项目配置文件 --- #### 示例 假设项目目录结构如下: ```txt project/ ├── images/ │ ├── image1.jpg │ ├── image2.jpg ├── labels/ │ ├── image1.txt │ ├── image2.txt ├── classes.txt └── notes.json ``` 执行命令: ```bash # 使用十三分类转七分类映射 python label_converter.py ./project 13to7 # 使用七分类转七分类映射 python label_converter.py ./project 7to7 ``` 输出: ```txt 开始标签顺序转换 ... 项目路径: ./project 映射类型: 13to7 处理文件夹: ./project/labels 使用映射表: 13to7 已处理: image1.txt 已处理: image2.txt 完成: 共处理 2 个文件 已更新: ./project/classes.txt 已更新: ./project/notes.json 标签顺序转换完成! ``` --- #### 注意事项 - 转换前请备份原始文件 - 确保项目路径包含labels目录和notes.json文件 - 新的类别顺序固定为:Ripe, Ripe7, Ripe4, Ripe2, Unripe, Disease, strawberry_flower ### 4.annotation_visualizer.py [返回目录](#目录) `annotation_visualizer.py` 是一个专门用于 **可视化YOLO格式标注** 的交互式工具。 它能够显示原始图像和对应的多边形标注,帮助用户验证标注质量和完整性。 本脚本专注于标注结果的可视化检查,适合在数据预处理阶段进行质量验证。 --- #### 功能特点 - ✅ 显示原始图像和彩色掩码对比 - ✅ 支持YOLO格式的多边形标注 - ✅ 为每个多边形实例生成随机颜色 - ✅ 显示类别标签和边界 - ✅ 交互式浏览,支持按键切换 - ✅ 自动处理不同图像格式 --- #### 使用方法 ##### 1.运行脚本 ```bash python annotation_visualizer.py ``` ###### 参数说明 | 参数 | 说明 | |:-----------------:|:--------------------------------------:| | | 原始数据集路径,需包含 images/、labels/、notes.json | ##### 2.交互操作 ```txt 按 'n'、空格 或 回车 继续下一张图像 按 'q' 或 ESC 键退出程序 ``` --- #### 示例 假设项目目录结构如下: ```txt project/ ├── images/ │ ├── image1.jpg │ ├── image2.jpg ├── labels/ │ ├── image1.txt │ ├── image2.txt └── notes.json ``` 执行命令:`python annotation_visualizer.py ./project` 输出: ```txt 开始可视化标注 ... 项目路径: ./project 总共 50 张图像 图像 1/50: image1.jpg (5 个多边形) 按 'n' 或空格继续下一张,按 'q' 退出... 图像 2/50: image2.jpg (3 个多边形) 按 'n' 或空格继续下一张,按 'q' 退出... 用户退出程序 ``` 显示内容: - 左侧: 原始图像 + 多边形边界 + 类别标签 - 右侧: 彩色掩码图(每个实例不同颜色) - 标题: 图像文件名和多边形数量 --- #### 注意事项 - 需要安装matplotlib用于显示 - 支持常见的图像格式(PNG、JPG、JPEG) - 自动处理归一化坐标到像素坐标的转换 - 为每个多边形实例生成唯一随机颜色 - 固定随机种子确保颜色一致性 ### 5.video_frame_extractor.py [返回目录](#目录) `video_frame_extractor.py` 是一个专门用于 **从视频文件中抽取帧** 的自动化工具。 它能够按固定间隔从视频中提取帧,并保存为高质量的图像文件。 本脚本专注于视频数据的预处理,适合计算机视觉项目的训练数据准备。 --- #### 功能特点 - ✅ 支持多种视频格式(AVI、MP4、MOV、MKV、FLV、WMV) - ✅ 按固定帧间隔抽取图像 - ✅ 自动为每个视频创建独立的输出文件夹 - ✅ 保存高质量JPEG图像(100%质量) - ✅ 自动处理文件名和组织结构 - ✅ 批量处理整个视频文件夹 --- #### 使用方法 ##### 1.运行脚本 ```bash python video_frame_extractor.py [--frame_interval N] ``` ###### 参数说明 | 参数 | 说明 | |:-----------------:|:----------------:| | | 视频文件夹路径 | | | 输出目录 | | --frame_interval | 可选,抽帧间隔(默认:600帧) | ##### 2.输出目录结构 ```txt output_base_dir/ ├── video1_name/ │ ├── video1_name_000000.jpg │ ├── video1_name_000600.jpg │ └── ... ├── video2_name/ │ ├── video2_name_000000.jpg │ ├── video2_name_000600.jpg │ └── ... └── ... ``` --- #### 示例 假设视频文件夹结构: ```txt videos/ ├── plant1_RGB.avi ├── plant2_RGB.mp4 └── plant3_RGB.mov ``` 执行命令:`python video_frame_extractor.py ./videos ./extracted_images --frame_interval 300` 输出结果: ```txt 找到 3 个视频文件 开始处理视频: ./videos/plant1_RGB.avi 完成视频 ./videos/plant1_RGB.avi 的处理,共保存 24 张图片 开始处理视频: ./videos/plant2_RGB.mp4 完成视频 ./videos/plant2_RGB.mp4 的处理,共保存 18 张图片 开始处理视频: ./videos/plant3_RGB.mov 完成视频 ./videos/plant3_RGB.mov 的处理,共保存 30 张图片 所有视频处理完成,共提取 72 张图片! ``` 输出目录结构: ```txt extracted_images/ ├── plant1_RGB/ │ ├── plant1_RGB_000000.jpg │ ├── plant1_RGB_000300.jpg │ └── ... ├── plant2_RGB/ │ ├── plant2_RGB_000000.jpg │ ├── plant2_RGB_000300.jpg │ └── ... └── plant3_RGB/ ├── plant3_RGB_000000.jpg ├── plant3_RGB_000300.jpg └── ... ``` --- #### 注意事项 - 使用6位数字补零命名图像文件 - 保存为100%质量的JPEG图像 - 自动创建必要的输出目录 - 支持常见的视频格式