数据标注:YOLO模式到PascalVOC模式的一键转换

论坛 期权论坛 编程之家     
选择匿名的用户   2021-5-21 14:04   11   0
import os, sys
import glob
from PIL import Image

def txtLabel_to_xmlLabel(source_pth,save_xml_pth):
    if not os.path.exists(save_xml_pth):
        os.makedirs(save_xml_pth)
    classes = open(classes_file).read().splitlines()
    print(classes)
    for file in os.listdir(source_pth):
        if not file.endswith('.jpg'):
            continue
        img_file = Image.open(os.path.join(source_pth,file))
        txt_file = open(os.path.join(source_pth,file.replace('.jpg','.txt'))).read().splitlines()
        print(txt_file)
        xml_file = open(os.path.join(save_xml_pth,file.replace('.jpg','.xml')), 'w')
        width, height = img_file.size
        xml_file.write('<annotation>\n')
        xml_file.write('\t<folder>simple</folder>\n')
        xml_file.write('\t<filename>' + str(file) + '</filename>\n')
        xml_file.write('\t<size>\n')
        xml_file.write('\t\t<width>' + str(width) + ' </width>\n')
        xml_file.write('\t\t<height>' + str(height) + '</height>\n')
        xml_file.write('\t\t<depth>' + str(3) + '</depth>\n')
        xml_file.write('\t</size>\n')

        for line in txt_file:
            print(line)
            line_split = line.split(' ')
            x_center = float(line_split[1])
            y_center = float(line_split[2])
            w = float(line_split[3])
            h = float(line_split[4])
            xmax = int((2*x_center*width + w*width)/2)
            xmin = int((2*x_center*width - w*width)/2)
            ymax = int((2*y_center*height + h*height)/2)
            ymin = int((2*y_center*height - h*height)/2)

            xml_file.write('\t<object>\n')
            xml_file.write('\t\t<name>'+ str(classes[int(line_split[0])]) +'</name>\n')
            xml_file.write('\t\t<pose>Unspecified</pose>\n')
            xml_file.write('\t\t<truncated>0</truncated>\n')
            xml_file.write('\t\t<difficult>0</difficult>\n')
            xml_file.write('\t\t<bndbox>\n')
            xml_file.write('\t\t\t<xmin>' + str(xmin) + '</xmin>\n')
            xml_file.write('\t\t\t<ymin>' + str(ymin) + '</ymin>\n')
            xml_file.write('\t\t\t<xmax>' + str(xmax) + '</xmax>\n')
            xml_file.write('\t\t\t<ymax>' + str(ymax) + '</ymax>\n')
            xml_file.write('\t\t</bndbox>\n')
            xml_file.write('\t</object>\n')
        xml_file.write('</annotation>')

if __name__ == '__main__':
    classes_file = r"D:\CV_Data\Region\GZ5Region\classes.txt"
    txtLabel_to_xmlLabel(r'D:\CV_Data\Region\GZ5Region\SZ_GZ_CV_region',r'D:\CV_Data\Region\GZ5Region\SZ_GZ_CV_region_xml')





分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:3875789
帖子:775174
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP