目标检测数据集格式转换(yolo→voc)

目标检测数据集格式转换(yolo→voc)

拿到的数据集标注格式为yolo,不过空格很奇怪:
标签 坐标1 坐标2 坐标3 坐标4 (标签后面一个空格 坐标之间两个空格)
现成的转换代码不能用,自己写一个

import os
import glob
from PIL import Image
from tqdm import tqdm


voc_annotations = r"E:\Master\dataset_person\dataset_person\dataset2\xml_labels/" #存放的xml文件地址
yolo_txt = r"E:\Master\dataset_person\dataset_person\dataset2\labels\train2017/"  #yolo数据集标签文件地址
img_path = r"E:\Master\dataset_person\dataset_person\dataset2\images\train2017/" #yolo数据集图片地址
labels = ['people']  #darknet数据集的类别

# 图像存储位置
src_img_dir = img_path
# 图像的txt文件存放位置
src_txt_dir = yolo_txt
src_xml_dir = voc_annotations
img_Lists = glob.glob(src_img_dir + '/*.jpg')
img_basenames = []

for item in img_Lists:
    img_basenames.append(os.path.basename(item))

img_names = []
for item in img_basenames:
    temp1, temp2 = os.path.splitext(item)
    img_names.append(temp1)

for img in tqdm(img_names):
    im = Image.open((src_img_dir + '/' + img + '.jpg'))
    width, height = im.size

    # 打开txt文件
    gt = open(src_txt_dir + '/' + img + '.txt').read().splitlines()
    # print(gt)
    if gt:
        # 将主干部分写入xml文件中
        xml_file = open((src_xml_dir + '/' + img + '.xml'), 'w')
        xml_file.write('\n')
        xml_file.write('    VOC2007\n')
        xml_file.write('    ' + str(img) + '.jpg' + '\n')
        xml_file.write('    \n')
        xml_file.write('        ' + str(width) + '\n')
        xml_file.write('        ' + str(height) + '\n')
        xml_file.write('        3\n')
        xml_file.write('    \n')

        # write the region of image on xml file
        for img_each_label in gt:  # txt 文件中的每一行
            spt = img_each_label.split('  ')  # 这里如果txt里面是以逗号‘,’隔开的,那么就改为spt = img_each_label.split(',')。
            #print(f'spt:{spt}')
            spt1 = spt[0].split(' ')
            #print(f'spt1:{spt1}')
            for i in range(1, 4):
                spt1.append(spt[i])
            #print(f'spt1:{spt1}')
            spt = spt1
            # print(f'spt:{spt}')
            xml_file.write('    \n')
            xml_file.write('        ' + str(labels[int(spt[0])]) + '\n')
            xml_file.write('        Unspecified\n')
            xml_file.write('        0\n')
            xml_file.write('        0\n')
            xml_file.write('        \n')
            #print(spt)
            center_x = round(float(spt[1].strip()) * width)
            #print(spt[2])
            center_y = round(float(spt[2].strip()) * height)
            bbox_width = round(float(spt[3].strip()) * width)
            bbox_height = round(float(spt[4].strip()) * height)
            xmin = str(int(center_x - bbox_width / 2))
            ymin = str(int(center_y - bbox_height / 2))
            xmax = str(int(center_x + bbox_width / 2))
            ymax = str(int(center_y + bbox_height / 2))

            xml_file.write('            ' + xmin + '\n')
            xml_file.write('            ' + ymin + '\n')
            xml_file.write('            ' + xmax + '\n')
            xml_file.write('            ' + ymax + '\n')
            xml_file.write('        \n')
            xml_file.write('    \n')

        xml_file.write('')





你可能感兴趣的:(项目经历,深度学习,目标检测,计算机视觉)