如何用python将xml文件转为voc类的xml文件
时间: 2024-05-14 19:16:13 浏览: 102
python脚本,将labelImg标注完的txt文件转换为voc格式的xml文件(跟yolov3格式完全一样)
VOC格式的XML文件包括对象的标注信息,可以使用以下代码将普通的XML文件转换为VOC格式的XML文件:
```python
import os
import xml.etree.ElementTree as ET
def convert_voc(xml_path, save_path):
# 打开xml文件
tree = ET.parse(xml_path)
root = tree.getroot()
# 创建XML文件
new_root = ET.Element('annotation')
# 添加文件名
filename = ET.SubElement(new_root, 'filename')
filename.text = os.path.basename(xml_path).split('.')[0] + '.jpg'
# 添加标注信息
for obj in root.findall('object'):
# 获取对象的名称
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)
# 创建新的对象
new_obj = ET.SubElement(new_root, 'object')
new_name = ET.SubElement(new_obj, 'name')
new_name.text = name
new_bbox = ET.SubElement(new_obj, 'bndbox')
new_xmin = ET.SubElement(new_bbox, 'xmin')
new_xmin.text = str(xmin)
new_ymin = ET.SubElement(new_bbox, 'ymin')
new_ymin.text = str(ymin)
new_xmax = ET.SubElement(new_bbox, 'xmax')
new_xmax.text = str(xmax)
new_ymax = ET.SubElement(new_bbox, 'ymax')
new_ymax.text = str(ymax)
# 保存XML文件
new_tree = ET.ElementTree(new_root)
new_tree.write(save_path)
xml_path = 'example.xml'
save_path = 'example_voc.xml'
convert_voc(xml_path, save_path)
```
在上面的代码中,`xml_path` 参数是需要转换的普通XML文件的路径,`save_path` 参数是转换后的VOC格式XML文件的保存路径。代码中,我们首先打开原始XML文件,然后创建一个新的XML文件,并将文件名添加到新的XML文件中。接下来,我们遍历原始XML文件中的每个对象,并获取对象的名称和位置信息。然后,我们将这些信息添加到新的XML文件中,并将其保存。注意,我们假设原始XML文件中的图像文件名与其对应的JPEG文件名相同,只是扩展名不同。因此,在保存VOC格式的XML文件时,我们将文件名更改为原始XML文件名的基础上加上'.jpg' 扩展名。
阅读全文