新年快樂~
應用背景:
pascal_voc格式數據集採用的是xml超文本標記語義記錄監督信息的。但是大型數據集的製作非一人之力可及。多人合作可能會涉及到針對同一張圖片的不同xml標籤合併。
代碼如下:
# -*- coding: utf-8 -*-
'''
@ 南石北岸生
@ 2019.1.8
'''
import os
def readxml(xmlpath):
lines=[]
f=open(xmlpath,'r')
for line in f:
lines.append(line)
f.close()
return lines
def insert_in_tail(list1,list2):
list3=[]
tail=list1[-1]
list1=list1[0:-1]
list1.extend(list2)
list1.append(tail)
return list1
if __name__ == "__main__":
image_dir = ''
dir = []
save_path=''
files_list=os.listdir(image_dir)
file_names=[]
for line in files_list:
line=line.replace('jpg','')
file_names.append(line)
for filename in file_names:
flag=0
list1=[]
for d in dir:
filedir=d+filename+"xml"
print("正在處理文件:{}".format(filedir))
if not os.path.exists(filedir):
continue
else:
if flag==0:
flag=1
list1=readxml(filedir)
else:
list2=readxml(filedir)
list1=insert_in_tail(list1,list2[13:-1])
del list2
if len(list1)!=0:
fo=open(save_path+filename+"xml",'w')
txt=''.join(list1)
fo.write(txt)
fo.close()
else:
continue
參數:
image_dir = ' ' #圖片集文件夾路徑
dir = [] #多個人的xml標籤集合文件夾路徑集合列表
save_path=' ' #合併之後的保存路徑
如,讀取00文件夾裏面的圖片,按圖片名搜索文件夾01、02、03三個文件夾裏面的該圖像xml標籤,進行合併,並輸出到save_path路徑下,得到合併後的xml。
xml可以用xml.etree.ElementTree解析,進行更結構化的操作,但是我覺得簡單的合併,用最基本的語法就能做好,所以沒有用解析xml並修改結構的方式來得到合併的xml,而是用了簡單的文本處理方式。