將 VOC 格式 XML 轉換為 YOLO 格式 TXT

目錄

1. 導入必要的模塊

2. 定義類別名稱

3. 設置文件路徑

完整代碼


1. 導入必要的模塊

import os
import xml.etree.ElementTree as ET

os:用于文件和目錄操作,例如創建目錄、遍歷文件等。

xml.etree.ElementTree:用于解析XML文件,從中提取信息。

2. 定義類別名稱

class_names = ['nest', 'balloon', 'kite', 'trash']

這是一個列表,定義了數據集中所有物體的類別名稱。類別名稱的順序非常重要,因為它們的索引(從0開始)將作為YOLO格式中的class_id。

3. 設置文件路徑

xmlpath = 'C:/Users/10431/Desktop/4517+VOC/Annotations/Annotations/'
txtpath = 'C:/Users/10431/Desktop/4517+VOC/Annotations/yolo/'

xmlpath:VOC格式的XML文件所在的目錄路徑。

txtpath:轉換后的YOLO格式TXT文件將保存的目錄路徑。

完整代碼

import os
import xml.etree.ElementTree as ET# 定義類別名稱
class_names = ['nest', 'balloon', 'kite', 'trash']# 設置輸入和輸出路徑
xmlpath = 'C:/Users/10431/Desktop/4517+VOC/Annotations/Annotations/'
txtpath = 'C:/Users/10431/Desktop/4517+VOC/Annotations/yolo/'# 如果輸出目錄不存在,則創建
if not os.path.exists(txtpath):os.makedirs(txtpath)# 收集所有 XML 文件
files = [os.path.join(root, file) for root, _, files in os.walk(xmlpath) for file in files if file.endswith('.xml')]
number = len(files)
print(f"找到 {number} 個 XML 文件")# 遍歷并轉換每個 XML 文件
for i, xml_file_path in enumerate(files):# 提取文件名并構建輸出路徑name = os.path.splitext(os.path.basename(xml_file_path))[0]txt_file_path = os.path.join(txtpath, name + '.txt')# 解析 XML 文件with open(xml_file_path, 'r') as xml_file:tree = ET.parse(xml_file)root = tree.getroot()w = int(root.find('size').find('width').text)  # 圖像寬度h = int(root.find('size').find('height').text)  # 圖像高度# 寫入 TXT 文件with open(txt_file_path, 'w') as f_txt:content = ""first = Truefor obj in root.iter('object'):# 獲取類別和邊界框信息class_name = obj.find('name').textclass_num = class_names.index(class_name)  # 類別的索引xmlbox = obj.find('bndbox')x1 = int(xmlbox.find('xmin').text)x2 = int(xmlbox.find('xmax').text)y1 = int(xmlbox.find('ymin').text)y2 = int(xmlbox.find('ymax').text)# 轉換為 YOLO 格式x_center = (x1 + x2) / 2 / wy_center = (y1 + y2) / 2 / hwidth = (x2 - x1) / wheight = (y2 - y1) / h# 構建 YOLO 格式的標注行line = f"{class_num} {x_center} {y_center} {width} {height}"content += line if first else f"\n{line}"first = False# 寫入內容到 TXT 文件f_txt.write(content)print(f"已將 {name}.xml 轉換為 {name}.txt")print("轉換完成!")

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/73977.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/73977.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/73977.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Visual Studio調試的技巧

1.什么是bug? bug:程序漏洞,也就是程序中存在的問題。 2.什么是調試? 當我們發現了程序中的問題后就會解決問題,前提是要找到問題,那么進行調試(debug)以此來找到問題。 3.debug…

C++ 各種map對比

文章目錄 特點比較1. std::map2. std::unordered_map3. std::multimap4. std::unordered_multimap5. hash_map(SGI STL 擴展) C 示例代碼代碼解釋 特點比較 1. std::map 底層實現:基于紅黑樹(一種自平衡的二叉搜索樹&#xff09…

fontTools工具的使用介紹

前言 python工具庫fontTools,我是用來壓縮前端字體的,優化前端請求速度的;使用的過程中,遇到了不少的坑,把這個過程記錄下來,防止再犯。 安裝 # fontTools 4.56.0 pip install fontTools提取子字體集 方…

利用大語言模型生成的合成數據訓練YOLOv12:提升商業果園蘋果檢測的精度與效率

之前小編分享過關于《YOLO11-CBAM集成:提升商業蘋果園樹干與樹枝分割的精準度》,改進YOLO11算法后,進行蘋果樹的實例分割。本期文章我們將分享關于最新的YOLO12算法改進的蘋果目標檢測。 論文題目:Improved YOLOv12 with LLM-Gen…

設計模式 二、創建型設計模式

GoF是 “Gang of Four”(四人幫)的簡稱,它們是指4位著名的計算機科學家:Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides。他們合作編寫了一本非常著名的關于設計模式的書籍《Design Patterns: Elements of Reusable…

redis,tar.gz安裝后,接入systemctl報錯解決

1. WARNING Memory overcommit must be enabled! 這種報錯,有兩種解決方法 1.1 修改系統參數 編輯 /etc/sysctl.conf 文件,設置 overcommit_memory 為 1 vm.overcommit_memory 11.2 修改redis的最大使用內存 修改配置文件 redis.conf maxmemory 1g…

Python繪圖技巧,主流繪圖庫

一、主流繪圖庫概覽 1. 核心工具對比 庫名稱特點適用場景Matplotlib基礎繪圖庫,高度可定制科學繪圖、論文圖表Seaborn基于Matplotlib,統計圖表優化數據分布、關系可視化Plotly交互式可視化,支持網頁輸出儀表盤、動態數據展示Pandas內置簡易…

網絡安全之前端學習(HTML篇)

前言:網絡安全中有一個漏洞叫xss漏洞,就是利用網頁引發彈窗,這就要求我們看得懂源碼,所以我會持續更新前端學習,可以不精通,但是一定要會,主要掌握HTML,css,js這三項技術…

Qt 多線程設計:死循環與信號槽的權衡

在開發音視頻播放器時,多線程設計是不可避免的挑戰。音頻和視頻的解碼、播放需要高效運行,同時還要與主線程或其他線程同步,例如通過信號通知播放進度。本文基于一個實際案例,分析了兩種線程設計在死循環和信號槽使用中的表現&…

knowledge-微前端(多個前端應用聚合的一個應用架構體系,每個小的應用可獨立運行,獨立開發,獨立部署上線)

1.前言 微前端,將一個大的前端應用拆分為多個小型的,獨立開發的前端應用,每一個小型的應用都可以單獨的開發,部署和運行。這種結構允許不同的團隊使用不同的技術棧來開發應用的不同部分,提高開發的效率與靈活性。 2.實…

工廠函數詳解:概念、目的與作用

一、什么是工廠函數? 工廠函數(Factory Function)是一種設計模式,其核心是通過一個函數來 創建并返回對象,而不是直接使用 new 或構造函數實例化對象。它封裝了對象的創建過程,使代碼更靈活、可維護。 二、…

旋轉位置編碼(Rotary Positional Encoding, RoPE):中文公式詳解與代碼實現

旋轉位置編碼(Rotary Positional Encoding, RoPE):中文公式詳解與代碼實現 在序列模型中,位置信息對于任務的理解至關重要。傳統的絕對和相對位置編碼各有優缺點,而RoPE作為一種創新的位置編碼方法,展現了…

C語言-指針變量和變量指針

指針 預備知識 內存地址 字節:字節是內存的容量單位,英文名Byte,1Byte8bits 地址:系統為了便于區分每一個字節面對它們的逐一進行編號(編號是唯一的),稱為內存地址,簡稱地址。int…

unityAB包(1/2)

unityAB包學習 1.AB包的導出擴展BuildAssetBundleOptions無特殊選項壓縮相關選項 2.AB包資源管理3.Resource和AssetBundle加載方式的區別4.預設體5.Unity Asset Bundle Browser 工具5為什么要勾選拷貝到StreamingAsset里面。6.AB包的加載 1.AB包的導出 首先在Project窗口&…

算法——廣度優先搜索——跨步迷宮

原題鏈接 思路:找出最短路徑,然后判斷是否存在連續三個點是橫縱坐標相等的,如果有就步數減1 但是有兩個樣例過不了 錯誤原因:在錯誤的測試案例中,最短路徑可能有多條,而我剛好選了一條比較曲折的&#x…

某酒企數字化轉型及電商規劃項目啟動會暨培訓會v(60頁PPT)(文末有下載方式)

詳細資料請看本解讀文章的最后內容。 在當今數字化浪潮席卷之下,企業的發展面臨著前所未有的機遇與挑戰。對于某酒企而言,數字化轉型和電商規劃已成為其實現 “二次騰飛”、邁向世界級酒企的關鍵戰略舉措。本次啟動會暨培訓會,為該酒企的轉型…

NET6 WebApi第5講:中間件(源碼理解,俄羅斯套娃怎么來的?);Web 服務器 (Nginx / IIS / Kestrel)、WSL、SSL/TSL

一、NET6的啟動流程 區別: .NET6 WebApi第1講:VSCode開發.NET項目、區別.NET5框架【兩個框架啟動流程詳解】_vscode webapi-CSDN博客 2、WebApplicationBuilder:是NET6引入的一個類,是建造者模式的典型應用 1>建造者模式的…

vue中根據html動態渲染內容

需求&#xff1a;根據數據中的html&#xff0c;因為我是在做填空&#xff0c;所以是需要將html中的_____替換成input&#xff0c;由于具體需求我使用的是元素contenteditable代替的可編輯的input html部分 <div class"wrap"><component :is"rendered…

【AI】AI編程助手:Cursor、Codeium、GitHub Copilot、Roo Cline、Tabnine

文章目錄 一、基本特性對比二、收費標準三、私有部署能力1、Tabnine2、Roo Code 三、代碼補全與自然語言生成代碼四、安裝獨立的IDE安裝插件安裝 五、基本使用&#xff08;一&#xff09;Cursor&#xff08;二&#xff09;GitHub Copilot1、獲取代碼建議2.聊天1&#xff09;上下…

三軸云臺之角速度信號篇

三軸云臺的角速度信號主要通過其內置的傳感器&#xff08;如陀螺儀&#xff09;來感知和測量。 一、角速度信號的感知與測量 在三軸云臺中&#xff0c;陀螺儀是測量角速度的關鍵組件。它通常安裝在三個互相垂直的軸上&#xff08;通常為X、Y、Z軸&#xff09;&#xff0c;能夠…