怎么将voc格式xml文件转换为txt
时间: 2025-03-24 13:04:40 浏览: 42
### Pascal VOC XML标注文件批量转换为文本(TXT)格式
要实现将Pascal VOC XML标注文件批量转换为TXT格式,可以利用Python编写脚本完成此操作。以下是具体方法:
#### 方法概述
通过解析XML文件中的目标对象信息(如类别名称、边界框坐标),将其写入对应的TXT文件中。每张图片对应一个TXT文件,其中包含该图片中标注的所有目标的信息。
---
#### Python代码示例
以下是一个完整的Python脚本,用于将Pascal VOC XML文件批量转换为TXT文件[^2]:
```python
import os
import xml.etree.ElementTree as ET
def convert_voc_to_txt(xml_folder, txt_folder):
"""
批量将Pascal VOC XML文件转换为TXT文件。
参数:
xml_folder (str): 存放XML文件的目录路径。
txt_folder (str): 输出TXT文件的目录路径。
"""
if not os.path.exists(txt_folder):
os.makedirs(txt_folder)
for xml_file in os.listdir(xml_folder):
if not xml_file.endswith('.xml'):
continue
tree = ET.parse(os.path.join(xml_folder, xml_file))
root = tree.getroot()
image_name = root.find('filename').text.split('.')[0]
objects = []
for obj in root.iter('object'):
class_name = obj.find('name').text
bbox = obj.find('bndbox')
xmin = int(bbox.find('xmin').text)
ymin = int(bbox.find('ymin').text)
xmax = int(bbox.find('xmax').text)
ymax = int(bbox.find('ymax').text)
objects.append(f"{class_name} {xmin} {ymin} {xmax} {ymax}")
with open(os.path.join(txt_folder, f'{image_name}.txt'), 'w') as f:
f.write('\n'.join(objects))
if __name__ == "__main__":
# 修改为实际路径
xml_directory = './annotations' # 输入XML文件夹路径
txt_directory = './labels' # 输出TXT文件夹路径
convert_voc_to_txt(xml_directory, txt_directory)
```
上述代码的功能如下:
- 遍历指定的XML文件夹,读取每个XML文件的内容。
- 提取`<object>`标签下的类别名和边界框坐标。
- 将提取的数据按行存储到对应的TXT文件中,每一行为 `类名 Xmin Ymin Xmax Ymax` 的格式。
---
#### 转换后的TXT文件结构
假设某张图像中有两个目标,则其对应的TXT文件可能如下所示:
```
person 100 50 200 180
car 300 70 400 200
```
---
#### 注意事项
1. **输入输出路径设置**:需确保`xml_directory`指向存放XML文件的实际路径;`txt_directory`则应为空或不存在,以便自动创建新文件夹。
2. **错误处理**:如果某些字段缺失(如缺少`<bndbox>`节点),可能会引发异常,建议加入额外的健壮性检查逻辑。
3. **兼容性问题**:不同版本的LabelImg工具生成的XML文件可能存在细微差异,因此需要验证脚本是否适用于特定场景[^3]。
---
阅读全文
相关推荐














