Python實現(xiàn)xml格式轉(zhuǎn)txt格式的示例代碼_第1頁
Python實現(xiàn)xml格式轉(zhuǎn)txt格式的示例代碼_第2頁
Python實現(xiàn)xml格式轉(zhuǎn)txt格式的示例代碼_第3頁
Python實現(xiàn)xml格式轉(zhuǎn)txt格式的示例代碼_第4頁
全文預覽已結(jié)束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

第Python實現(xiàn)xml格式轉(zhuǎn)txt格式的示例代碼目錄1、前言2、分析xml、txt數(shù)據(jù)3、轉(zhuǎn)換過程4、最后結(jié)果對比

1、前言

最近學習Yolov5是遇見了個問題,找的數(shù)據(jù)集全是xml文件,VOC的標注是xml格式的,而YOLO是.txt格式,那么問題就來了,手動提取肯定是不可能的,那只能借用程序解決咯。

2、分析xml、txt數(shù)據(jù)

這是xml樹形結(jié)構(gòu)

這是txt格式

總結(jié):

1.提取object-name、bndbox-xmin,ymin,xmax,ymin

2.格式轉(zhuǎn)化需要用公式轉(zhuǎn)換

YOLO數(shù)據(jù)集txt格式:

x_center:歸一化后的中心點x坐標

y_center:歸一化后的中心點y坐標

w:歸一化后的目標框?qū)挾?/p>

h:歸一化后的目標況高度

(此處歸一化指的是除以圖片寬和高)

VOC數(shù)據(jù)集xml格式

yolo的四個數(shù)據(jù)xml-txt公式x_center((x_min+x_max)/2-1)/w_imagey_center((y_min+y_max)/2-1)/h_imagew(x_max-x_min)/w_imageh(y_max-y_min)/h_image

3、轉(zhuǎn)換過程

定義兩個文件夾,train放xml數(shù)據(jù),labels放txt數(shù)據(jù)。

代碼解析:

importos

importxml.etree.ElementTreeasET

importio

find_path='./train/'

#xml所在的文件

savepath='./labels/'

#保存文件

classVoc_Yolo(object):

def__init__(self,find_path):

self.find_path=find_path

defMake_txt(self,outfile):

out=open(outfile,'w')

print("創(chuàng)建成功:{}".format(outfile))

returnout

defWork(self,count):

#找到文件路徑

forroot,dirs,filesinos.walk(self.find_path):

#找到文件目錄中每一個xml文件

forfileinfiles:

#記錄處理過的文件

count+=1

#輸入、輸出文件定義

input_file=find_path+file

outfile=savepath+file[:-4]+'.txt'

#新建txt文件,確保文件正常保存

out=self.Make_txt(outfile)

#分析xml樹,取出w_image、h_image

tree=ET.parse(input_file)

root=tree.getroot()

size=root.find('size')

w_image=float(size.find('width').text)

h_image=float(size.find('height').text)

#繼續(xù)提取有效信息來計算txt中的四個數(shù)據(jù)

forobjinroot.iter('object'):

#將類型提取出來,不同目標類型不同,本文僅有一個類別-0

classname=obj.find('name').text

cls_id=classname

xmlbox=obj.find('bndbox')

x_min=float(xmlbox.find('xmin').text)

x_max=float(xmlbox.find('xmax').text)

y_min=float(xmlbox.find('ymin').text)

y_max=float(xmlbox.find('ymax').text)

#計算公式

x_center=((x_min+x_max)/2-1)/w_image

y_center=((y_min+y_max)/2-1)/h_image

w=(x_max-x_min)/w_image

h=(y_max-y_min)/h_image

#文件寫入

out.write(str(cls_id)+""+str(x_center)+""+str(y_center)+""+str(w)+""+str(h)+'\n')

out.close()

returncount

if__na

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論