import xml.etree.ElementTree as ET#xml 是python自帶的package
import osclasses=['walnut']#寫自己的分類名
pre_dir='F:/2023walnut/labels'#xml文件所在文件夾
target_dir='F:/2023walnut/yolo'#想要存儲txt文件的文件夾
path=os.listdir(pre_dir)for path1 in path:
# path1=r'C:\Users\loadlicb\Desktop\chrome_RTJOXXsYHM.xml'#xml文件路徑tree=ET.parse(os.path.join(pre_dir,path1))root=tree.getroot()#這兩個步驟將xml文件拆出來了oo=[]for child in root:if child.tag == 'filename':#tag對應的是《》中的內容,text對應的是兩個《》中間的部分內容oo.append(child.text)#獲得xml文件的名# print(child.text)for i in child:if i.tag == 'width':#獲得圖片的woo.append(i.text)# print(i.text)if i.tag == 'height':#獲得圖片的hoo.append(i.text)# print(i.text)if i.tag == 'name':#獲得當前框的classoo.append(i.text)# print(i.text)for j in i:if j.tag == 'xmin':#獲得當前框的兩個對角線上的點的兩組坐標oo.append(j.text)# print(j.text)if j.tag == 'ymin':oo.append(j.text)# print(j.text)if j.tag == 'xmax':oo.append(j.text)# print(j.text)if j.tag == 'ymax':oo.append(j.text)# print(j.text)print(oo)filename=oo[0]#讀取圖片的名和寬高filename=os.path.split(filename)# print(filename)name,extension=os.path.splitext(filename[1])#獲取xml名和后綴width=oo[1]dw=1/int(width)height=oo[2]dh=1/int(height)oo.pop(0)oo.pop(0)oo.pop(0)#刪除三次oolist的0號元素back=[]# print((len(oo))%5)for i in range(len(oo)//5):for p in range(len(classes)):#劃定class的序號if classes[p] == oo[5*i]:#str == strcl=pback.append(cl)x=(int(oo[5*i+1])+int(oo[5*i+3]))/2#oo里的所有元素都是str,數字也是y = (int(oo[5 * i + 2]) + int(oo[5 * i + 4])) / 2#計算標注框的中心點的xy坐標w=int(oo[5*i+3])-int(oo[5*i+1])h=int(oo[5*i+4])-int(oo[5*i+2])#計算標注框的寬高back.append('{:.4f}'.format(x*dw))back.append('{:.4f}'.format(y * dh))back.append('{:.4f}'.format(w * dw))back.append('{:.4f}'.format(h * dh))# back.append(y*dh)# back.append(w*dw)# back.append(h*dh)#轉換到0-1區間print(back)# dir=r'C:\Users\loadlicb\Desktop'#label文件夾名file=open(os.path.join(target_dir,name+'.txt'),'w')for i in range(len(back)):l=' 'if (i+1)%5==0:l='\n'file.writelines(str(back[i])+l)#完成了,現在進行批量操作修改
#完成
這個腳本中只需要修改三處地方:
classes=['walnut']#寫自己的分類名
pre_dir='F:/2023walnut/labels'#xml文件所在文件夾
target_dir='F:/2023walnut/yolo'#想要存儲txt文件的文件夾
——————————————今天不學習,明天變垃圾!—————————————