1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
| #!/usr/bin/env python3 # -*- coding: utf-8 -*- ''' * 说明:制作CSV格式 * 时间:2019-6-27 ''' import xml.dom.minidom import os,shutil,glob, csv '''--------------------------配置文件------------------------''' # XML文件的目录 xmlpath = './/xml' # 图片的目录 photopath = './/photo'
xmlpath = os.path.join(os.getcwd(), xmlpath) photopath = os.path.join(os.getcwd(), photopath) def getxmlinfo(filename): dom = xml.dom.minidom.parse(filename) root = dom.documentElement namelist = root.getElementsByTagName('filename') name = namelist[0] label = list() objectlist = root.getElementsByTagName('object') for object in objectlist: flaglist = object.getElementsByTagName('name') flag = flaglist[0] xminlist = object.getElementsByTagName('xmin') xmin = xminlist[0] yminlist = object.getElementsByTagName('ymin') ymin = yminlist[0] xmaxlist = object.getElementsByTagName('xmax') xmax = xmaxlist[0] ymaxlist = object.getElementsByTagName('ymax') ymax = ymaxlist[0] label += list([flag.firstChild.data, xmin.firstChild.data, ymin.firstChild.data, xmax.firstChild.data, ymax.firstChild.data]) return name.firstChild.data, label
class CSVDate(): def __init__(self, photopath = 'photo', xmlpath = 'xml'): self.csv = [] self.photopath = photopath self.xmlpath = xmlpath self.test_size = 0.2 self.label = []
self.getcsv() print(self.csv) self.write_file()
def getcsv(self): xmllist = os.listdir(self.xmlpath) for xml in xmllist: _, date = getxmlinfo(os.path.join(self.xmlpath, xml)) name = xml.split(".xml")[0] for i in range(int(len(date)/5)): if date[i*5 + 0][2] not in self.label: self.label.append(date[i*5 + 0][2]) self.csv.append(['CSV//photo//' + name + '.jpg', date[i*5 + 1], date[i*5 + 2], date[i*5 + 3], date[i*5 + 4],date[i*5 + 0][2]])
def write_file(self): with open('train_annotations.csv', 'w', newline='') as fp: csv_writer = csv.writer(fp, dialect='excel') csv_writer.writerows(self.csv[int(len(self.csv)*self.test_size):]) csv_writer.writerows(self.csv[:5]) with open('val_annotations.csv', 'w', newline='') as fp: csv_writer = csv.writer(fp, dialect='excel') csv_writer.writerows(self.csv[:int(len(self.csv)*self.test_size)])
class_name = sorted(self.label) class_ = [] for num, name in enumerate(class_name): class_.append([name, num]) with open('classes.csv', 'w', newline='') as fp: csv_writer = csv.writer(fp, dialect='excel') csv_writer.writerows(class_)
CSVDate(photopath, xmlpath)
|