目标检测-数据集转换: csv转voc(xml)格式

csv标签样式

目标检测-数据集转换: csv转voc(xml)格式

 voc(xml)格式

目标检测-数据集转换: csv转voc(xml)格式

 转换代码

# .csv-->.xml
# ! /usr/bin/python
# -*- coding:UTF-8 -*-

import glob
from PIL import Image
import csv




#xml保存的位置
save_xml_dir = "Annotations_1/"
#src_img_dir = "Intestinal Organoid Dataset/train"
#img_Lists = glob.glob(src_img_dir + '/*.jpg')

# read csv 
file_path = "Intestinal Organoid Dataset/train_labels.csv"
width = 450
height = 450
with open(file_path) as csvfile:
    #读取csv数据
    csv_reader = csv.reader(csvfile) 
    #去掉第一行(第一行是列名) 
    csv_header = next(csv_reader) 
    #因为csv数据中有许多行其实是同一个照片,因此需要pre_img
    pre_img = '' 
    for row in csv_reader:
        #C:/Users/Timothy/Desktop/keras-retinanet/images/test/Subset_1_450x450_001.jpg
        #只要文件名Subset_1_450x450_001
        img = row[0].split("/")[-1].split(".")[0]
        #遇到的是一张新图片
        if img != pre_img: 
            #非第一张图片,在上一个xml中写下</annotation>
            if pre_img != '':
                xml_file1 = open((save_xml_dir + pre_img + '.xml'), 'a')
                xml_file1.write('</annotation>')
                xml_file1.close()
        #新建xml文件
            xml_file = open((save_xml_dir + img + '.xml'), 'w')
            xml_file.write('<annotation>\n')
            xml_file.write('    <folder>VOC2007</folder>\n')
            xml_file.write('    <filename>' + str(img) + '.jpg' + '</filename>\n')
            xml_file.write('<source>\n')
            xml_file.write('<database> orgaquant </database>\n')
            xml_file.write('<annotation> organoid </annotation>\n')
            xml_file.write('</source>\n')
            xml_file.write('    <size>\n')
            xml_file.write('        <width>' + str(width) + '</width>\n')
            xml_file.write('        <height>' + str(height) + '</height>\n')
            xml_file.write('        <depth>3</depth>\n')
            xml_file.write('    </size>\n')
            xml_file.write('    <object>\n')
            xml_file.write('<name>'+str(row[-1])+'</name>\n')
            xml_file.write('        <bndbox>\n')
            xml_file.write('            <xmin>' + str(row[1]) + '</xmin>\n')
            xml_file.write('            <ymin>' + str(row[2]) + '</ymin>\n')
            xml_file.write('            <xmax>' + str(row[3]) + '</xmax>\n')
            xml_file.write('            <ymax>' + str(row[4]) + '</ymax>\n')
            xml_file.write('        </bndbox>\n')
            xml_file.write('    </object>\n')
            xml_file.close()
            pre_img = img 
        else:
            #同一张图片,只需要追加写入object
            xml_file = open((save_xml_dir + pre_img + '.xml'), 'a')
            xml_file.write('    <object>\n')
            xml_file.write('<name>'+str(row[-1])+'</name>\n')
            '''  按需添加
            xml_file.write('        <pose>Unspecified</pose>\n')
            xml_file.write('        <truncated>0</truncated>\n')
            xml_file.write('        <difficult>0</difficult>\n')
            '''
            xml_file.write('        <bndbox>\n')
            xml_file.write('            <xmin>' + str(row[1]) + '</xmin>\n')
            xml_file.write('            <ymin>' + str(row[2]) + '</ymin>\n')
            xml_file.write('            <xmax>' + str(row[3]) + '</xmax>\n')
            xml_file.write('            <ymax>' + str(row[4]) + '</ymax>\n')
            xml_file.write('        </bndbox>\n')
            xml_file.write('    </object>\n')
            xml_file.close()
            pre_img = img

    #最后一个xml需要写入</annotation>
    xml_file1 = open((save_xml_dir + pre_img + '.xml'), 'a')
    xml_file1.write('</annotation>')
    xml_file1.close()
        
        

上一篇:学习杂记(1)


下一篇:YOLOX训练自己的VOC标注的数据