YOLOv8目标检测离线数据增强的方式:首先使用labelme对图像进行标注,将图像和标注文件存放到images和annotations文件夹中,然后使用离线数据增强代码对进行增强。
代码较长,完整代码下载地址:完整代码
使用方法:
1.在代码中设置增强次数和文件路径,选择想要数据增强的方式
2.数据增强完成后需要检查标签的正确性,检查标签是否越界的代码如下:
import os
# 定义两个文件夹的路径
folder1 = 'E:/images' ##图片文件夹
folder2 = 'E:/labels'##标签文件夹
# 定义函数,用于获取文件夹中的以.jpg和.json结尾的文件前缀
def get_prefixes_of_images_and_json_files(folder_path):
valid_extensions = ['.jpg','.jpeg','.png', '.json'] # 图片和JSON文件的扩展名
prefixes = set()
for file in os.listdir(folder_path):
_, extension = os.path.splitext(file)
if extension.lower() in valid_extensions:
filename = os.path.splitext(file)[0]
prefixes.add(filename)
return prefixes
# 获取每个文件夹中的图片和JSON文件前缀列表
prefixes_in_folder1 = get_prefixes_of_images_and_json_files(folder1)
prefixes_in_folder2 = get_prefixes_of_images_and_json_files(folder2)
# 比较前缀列表,并找出不同的前缀
different_prefixes = prefixes_in_folder1.symmetric_difference(prefixes_in_folder2)
# 打印出不同的前缀
for prefix in different_prefixes:
print(prefix)
3.标签可视化代码如下:
import cv2
import os
img_dir = 'C:/Users/CDG/Desktop/yolov7-main/data/mydata/images/'
label_dir = 'C:/Users/CDG/Desktop/yolov7-main/data/mydata/labels/'
save_dir = 'data/keshihua/' # 事先新建一个文件夹,用来存放标注好的图片
lable_file = os.listdir(label_dir)
img_file = os.listdir(img_dir)
for file in lable_file:
file_dir = os.path.join(label_dir, file)
with open(file_dir, 'r') as f:
print(os.path.join(img_dir, file.split('.')[0] + '.jpg'))
image_src = cv2.imread(os.path.join(img_dir, file.split('.')[0] + '.jpg'))
image_row = image_src.shape[0]
image_col = image_src.shape[1]
for line in f.readlines():
x_ = float(line.split(' ')[1])
y_ = float(line.split(' ')[2])
w_ = float(line.split(' ')[3])
h_ = float(line.split(' ')[4])
w = image_col
h = image_row
x1 = w * x_ - 0.5 * w * w_
x2 = w * x_ + 0.5 * w * w_
y1 = h * y_ - 0.5 * h * h_
y2 = h * y_ + 0.5 * h * h_
draw = cv2.rectangle(image_src, (int(x1), int(y1)), (int(x2), int(y2)), [0, 255, 0], 2)
cv2.imwrite(os.path.join(save_dir, file.split('.')[0] + '.jpg'), draw)