YOLOv8实例分割离线数据增强的方式:首先使用labelme对图像进行标注,将图像和标注文件存放到images_json文件夹中,然后使用离线数据增强代码对进行增强。
代码较长,完整代码下载地址:完整代码
使用步骤:
1.在代码中设置增强次数和文件路径,选择想要数据增强的方式
if __name__ == '__main__':
need_aug_num = 5 # 每张图片需要增强的次数
toolhelper = ToolHelper() # 工具
is_endwidth_dot = True # 文件是否以.jpg或者png结尾
dataAug = DataAugmentForObjectDetection() # 数据增强工具类
# 获取相关参数
parser = argparse.ArgumentParser()
parser.add_argument('--source_img_json_path', type=str, default='H:/CSDN/DataAugForObjectSegmentation/images_json')
parser.add_argument('--save_img_json_path', type=str, default='H:/CSDN/DataAugForObjectSegmentation/images_json2')
args = parser.parse_args()
source_img_json_path = args.source_img_json_path # 图片和json文件原始位置
save_img_json_path = args.save_img_json_path # 图片增强结果保存文件
# 是否使用某种增强方式
self.is_addNoise = True
self.is_changeLight = is_changeLight
self.is_random_point = is_random_point
self.is_filp_pic_bboxes = is_filp_pic_bboxes
self.is_shift_pic_bboxes = True
2.标签可视化代码如下:
import os
import json
import cv2
import numpy as np
# 设置源文件夹和目标文件夹路径
source_folder = 'H:/Data-enhancement-main/Data-enhancement/DataAugForObjectSegmentation/images_json2'
target_folder = 'H:/Data-enhancement-main/Data-enhancement/DataAugForObjectSegmentation/images_json2keshihua'
# 确保目标文件夹存在
if not os.path.exists(target_folder):
os.makedirs(target_folder)
# 遍历源文件夹中的所有文件
for file_name in os.listdir(source_folder):
if file_name.endswith('.json'):
json_path = os.path.join(source_folder, file_name)
with open(json_path) as json_file:
data = json.load(json_file)
# 获取图片路径
image_path = os.path.join(source_folder, data['imagePath'])
# 读取图片
image = cv2.imread(image_path)
# 遍历所有的标注
for shape in data['shapes']:
points = np.array(shape['points'], dtype=np.int32)
cv2.polylines(image, [points], True, (0, 255, 0), 2) # 标注为绿色线条
# 保存标注后的图片
cv2.imwrite(os.path.join(target_folder, file_name.replace('.json', '.png')), image)
print("标注可视化完成,并保存到指定文件夹。")