Python:目標檢測中多個xml標籤合併

新年快樂~

應用背景:

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,而是用了簡單的文本處理方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章