網站首頁 編程語言 正文
項目場景:
在做目標檢測時,重新進行標注會耗費大量的時間,如果能夠批量對xml中的信息進行修改,那么將會節省大量的時間,接下來將詳細介紹如何修改標注文件xml中的相關信息。
問題描述:
例如:當我有一批標注好的xml文件,文件格式如下圖所示 :
<?xml version='1.0' encoding='us-ascii'?> <annotation> <folder>VOC2012</folder> <filename>x0y1115.png</filename> <source> <database>The VOC2007 Database</database> <anotation>PASCAL VOC2007</anotation> <image>flickr</image> </source> <size> <width>2233</width> <height>2177</height> <depth>3</depth> </size> <segmented>1</segmented> <object> <name>[1]</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>1</difficult> <bndbox> <xmin>0</xmin> <ymin>1115</ymin> <xmax>30</xmax> <ymax>1145</ymax> </bndbox> </object> </annotation> }
分析:
可以發現整個標注文件的層級是按照annotation------folder/filename/…/object------name/pose/truncated/difficult/bndbox------xmin/ymin/xmax/ymax這樣的格式來的。現在我需要修改標注目標的類別信息(將[1]改成lack),其他信息同理可以修改。Python代碼如下:
解決方案:
import os import os.path from xml.etree.ElementTree import parse, Element #批量修改xml中內容 def test(): path = "./datasets/Annotations/" # xml文件所在的目錄 files = os.listdir(path) # 遍歷文件夾下所有文件名稱 for xmlFile in files: # 對所有文件進行循環遍歷處理 path1 = "./datasets/Annotations/"+xmlFile #定位當前處理的文件的路徑 newStr = os.path.join(path, xmlFile) dom = parse(newStr) # 獲取xml文件中的參數 root = dom.getroot() # 獲取數據結構 for obj in root.iter('object'): # 獲取object節點中的name子節點(此處如果要換成別的比如bndbox) name = obj.find('name').text # 獲取相應的文本信息 # 以下為自定義的修改規則,我這里把文本信息為[1]~[5]的內容改成lack,依次類推 if name in ['[1]','[2]','[3]','[4]','[5]']: new_name = 'lack' elif name in ['[6]','[7]','[8]','[9]','[10]']: new_name = 'black_point' elif name in ['[11]','[12]','[13]','[14]','[15]']: new_name = 'crack' else: new_name = 'Satellite_InkDrop' obj.find('name').text = new_name # 修改 dom.write(path1, xml_declaration=True) # 保存到指定文件 pass if __name__ == '__main__': test()
總結
原文鏈接:https://blog.csdn.net/Vodka_Lou/article/details/122506871
相關推薦
- 2022-11-21 Android性能優化之JVMTI與內存分配_Android
- 2022-05-29 簡單聊聊Golang中defer預計算參數_Golang
- 2022-07-11 Jenkins修改默認主目錄
- 2022-07-11 deepstream 問題
- 2022-05-12 在pycharm中設置快速創建
- 2024-04-06 linux中redis重啟,啟動,停止的sh腳本
- 2022-05-03 python單例模式之selenium?driver實現單例_python
- 2022-12-24 C++中STL容器的主要使用及含義說明_C 語言
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支