数据集扩充增广(分割标签同步) 适用于yolov5到v12的分割数据集和obb数据集,支持同步更新标签(txt) 使用labelme标注的多边形数据集,支持同步更新

发布时间:2026/7/10 22:47:50
数据集扩充增广(分割标签同步) 适用于yolov5到v12的分割数据集和obb数据集,支持同步更新标签(txt) 使用labelme标注的多边形数据集,支持同步更新 数据集扩充增广分割标签同步适用于yolov5到v12的分割数据集和obb数据集支持同步更新标签txt使用labelme标注的多边形数据集支持同步更新标签json小工具Windows10以上系统可以直接打开使用无需安装无需配置环境翻转、旋转、缩放、拉伸、剪裁、平移、亮度、对比度、饱和度、噪声等多种增广方式可以组合和自定义方式可选择增广倍数生成的图像和标签自定义重命名不会覆盖原数据可视化增强图像和标签方便查看是否增强有误带有手把手教程视频提供学习参考代码不含界面分割/OBB 数据集增强工具完整说明下面是这套分割/OBB 数据集扩充工具的功能介绍、使用说明和完整实现代码。一、工具核心功能表项目详情适用场景YOLOv5~v12 分割/OBB 数据集、Labelme 多边形标注数据集支持标签格式YOLO-seg TXT、YOLO-obb TXT、Labelme JSON系统要求Windows 10免安装、免配置直接双击运行增强方式翻转、旋转、缩放、拉伸、剪裁、平移、亮度、对比度、饱和度、噪声、模糊等自定义增强支持imgaug序列语法可自由组合、修改增强操作标签同步自动更新分割/OBB/多边形标签保证与增强后图像对应输出控制可设置增强倍数、自定义前缀、自动重命名不覆盖原数据辅助功能生成增强预览图可直观检查标签是否同步正确交付内容可执行文件.exe、使用教程视频、增强序列参考文档、Python 学习代码二、项目结构dataset_augment/ ├── points增强工具.exe # Windows 可执行文件 ├── 教程.mp4 # 手把手使用教程 ├── 必读.txt # 常用增强操作说明 ├── 增强序列参考.pdf # imgaug 增强语法参考 ├── src/ # 源代码学习参考 │ ├── main.py # PyQt5 主界面 │ ├── augmentor.py # 图像与标签增强核心逻辑 │ └── utils.py # 文件读写与格式转换工具 ├── seg/ # 分割数据集示例 └── obb/ # OBB 数据集示例三、核心代码实现Python 学习参考版1. 增强核心模块augmentor.pyimportosimportcv2importjsonimportimgaugasiafromimgaugimportaugmentersasiaafromimgaug.augmentablesimportPolygon,PolygonsOnImage,BoundingBox,BoundingBoxesOnImageclassDatasetAugmentor:def__init__(self,img_dir,label_dir,out_dir,label_formatyolo-seg):self.img_dirimg_dir self.label_dirlabel_dir self.out_dirout_dir self.label_formatlabel_format os.makedirs(os.path.join(out_dir,images),exist_okTrue)os.makedirs(os.path.join(out_dir,labels),exist_okTrue)defload_yolo_seg(self,label_path,img_shape):h,wimg_shape[:2]polygons[]withopen(label_path,r)asf:forlineinf:partsline.strip().split()cls_idint(parts[0])coordslist(map(float,parts[1:]))points[(coords[i]*w,coords[i1]*h)foriinrange(0,len(coords),2)]polygons.append((cls_id,Polygon(points)))returnpolygonsdefsave_yolo_seg(self,polygons,save_path,img_shape):h,wimg_shape[:2]lines[]forcls_id,polyinpolygons:coords[]for(x,y)inpoly.exterior:coords.append(f{x/w:.6f}{y/h:.6f})lines.append(f{cls_id}{ .join(coords)})withopen(save_path,w)asf:f.write(\n.join(lines))defaugment_image(self,img_path,label_path,aug_seq,prefixaug,times1):imgcv2.imread(img_path)img_h,img_wimg.shape[:2]polygonsself.load_yolo_seg(label_path,img.shape)foriinrange(times):aug_imgimg.copy()aug_polygons[]polysPolygonsOnImage([pfor_,pinpolygons],shapeimg.shape)aug_img,aug_polysaug_seq(imageaug_img,polygonspolys)for(cls_id,_),pinzip(polygons,aug_polys.polygons):aug_polygons.append((cls_id,p))img_namef{prefix}_{i}_{os.path.basename(img_path)}label_namef{prefix}_{i}_{os.path.splitext(os.path.basename(label_path))[0]}.txtcv2.imwrite(os.path.join(self.out_dir,images,img_name),aug_img)self.save_yolo_seg(aug_polygons,os.path.join(self.out_dir,labels,label_name),img.shape)2. 主界面main.pyPyQt5importsysfromPyQt5.QtWidgetsimport(QApplication,QMainWindow,QWidget,QVBoxLayout,QHBoxLayout,QPushButton,QLineEdit,QComboBox,QSpinBox,QTextEdit,QFileDialog)fromaugmentorimportDatasetAugmentorimportimgaugasiafromimgaugimportaugmentersasiaaclassAugmentTool(QMainWindow):def__init__(self):super().__init__()self.setWindowTitle(分割数据集增强工具)self.setGeometry(100,100,800,600)self.init_ui()definit_ui(self):centralQWidget()self.setCentralWidget(central)layoutQVBoxLayout(central)# 路径选择self.img_dir_editQLineEdit()self.label_dir_editQLineEdit()self.out_dir_editQLineEdit()layout.addWidget(self.create_path_layout(图像文件夹:,self.img_dir_edit))layout.addWidget(self.create_path_layout(标签文件夹:,self.label_dir_edit))layout.addWidget(self.create_path_layout(输出文件夹:,self.out_dir_edit))# 参数设置self.format_comboQComboBox()self.format_combo.addItems([YOLO-seg TXT,Labelme JSON,YOLO-obb TXT])layout.addWidget(self.format_combo)self.times_spinQSpinBox()self.times_spin.setValue(1)layout.addWidget(self.times_spin)self.prefix_editQLineEdit(aug)layout.addWidget(self.prefix_edit)# 增强序列self.aug_seq_editQTextEdit()self.aug_seq_edit.setPlainText( iaa.Sequential([ iaa.OneOf([ iaa.Fliplr(p1.0), iaa.Affine(rotate(-45, 45)), ]), iaa.OneOf([ iaa.GaussianBlur(sigma(0, 4.0)), iaa.GammaContrast(gamma0.5), iaa.AdditiveGaussianNoise(scale40.0), ]) ]) )layout.addWidget(self.aug_seq_edit)self.start_btnQPushButton(开始处理)self.start_btn.clicked.connect(self.start_augment)layout.addWidget(self.start_btn)defcreate_path_layout(self,label,edit):layoutQHBoxLayout()layout.addWidget(edit)browse_btnQPushButton(浏览)browse_btn.clicked.connect(lambda:self.browse_path(edit))layout.addWidget(browse_btn)returnlayoutdefbrowse_path(self,edit):pathQFileDialog.getExistingDirectory()edit.setText(path)defstart_augment(self):img_dirself.img_dir_edit.text()label_dirself.label_dir_edit.text()out_dirself.out_dir_edit.text()label_formatself.format_combo.currentText()timesself.times_spin.value()prefixself.prefix_edit.text()aug_seq_codeself.aug_seq_edit.toPlainText()# 执行增强序列aug_seqeval(aug_seq_code,{iaa:ia,iaa:iaa})augmentorDatasetAugmentor(img_dir,label_dir,out_dir,label_format)forimg_nameinos.listdir(img_dir):ifimg_name.endswith((.jpg,.png)):img_pathos.path.join(img_dir,img_name)label_nameos.path.splitext(img_name)[0].txtiflabel_formatLabelme JSON:label_nameos.path.splitext(img_name)[0].jsonlabel_pathos.path.join(label_dir,label_name)ifos.path.exists(label_path):augmentor.augment_image(img_path,label_path,aug_seq,prefix,times)if__name____main__:appQApplication(sys.argv)winAugmentTool()win.show()sys.exit(app.exec_())四、使用说明准备数据将图像和标签按对应格式整理好YOLO-seg/OBB TXT 或 Labelme JSON。设置路径在工具中选择图像文件夹、标签文件夹和输出文件夹。配置参数选择标签格式设置增强次数每张图片生成多少张增强结果输入输出前缀避免覆盖原数据自定义增强序列根据需要修改imgaug序列支持翻转、旋转、模糊、噪声、对比度等操作。开始处理点击“开始处理”工具会自动生成增强后的图像和同步更新的标签文件并可生成预览检查效果。五、常用增强操作参考来自必读.txt# 单增操作示例iaa.Identity()# 原图iaa.GammaContrast((0.85,1.15))# 对比度调整iaa.MultiplyBrightness((0.5,1.5))# 亮度调整iaa.Rotate((-10,10))# 随机旋转iaa.AdditiveGaussianNoise(scale(0,20))# 高斯噪声iaa.GaussianBlur(sigma2.0)# 高斯模糊iaa.MultiplySaturation((0.5,1.5))# 饱和度调整iaa.Crop(px(0,16))# 随机裁剪iaa.Affine(translate_px{x:(-20,20),y:(-20,20)})# 平移