请写一段python代码,实现xml数据集格式转coco数据集格式
时间: 2023-11-28 12:04:32 浏览: 103
将labelImg标注的xml转换成coco数据集.py
5星 · 资源好评率100%
以下是一个简单的 Python 脚本,用于将 XML 数据集格式转换为 COCO 数据集格式:
```python
import xml.etree.ElementTree as ET
import json
import os
# 设置类别标签
classes = ['class1', 'class2', 'class3', ...]
# 设置 XML 数据集文件夹路径和输出 COCO 数据集文件路径
xml_folder = '/path/to/xml/folder'
json_file = '/path/to/output/json/file'
# 初始化 COCO 数据集字典
coco_dict = {
"info": {},
"licenses": [],
"categories": [],
"images": [],
"annotations": []
}
# 添加类别标签到 COCO 数据集字典
for i, cls in enumerate(classes):
coco_dict['categories'].append({
'id': i + 1,
'name': cls,
'supercategory': 'object'
})
# 遍历 XML 数据集文件夹
for xml_file in os.listdir(xml_folder):
if xml_file.endswith('.xml'):
# 解析 XML 文件
tree = ET.parse(os.path.join(xml_folder, xml_file))
root = tree.getroot()
# 获取图像信息并添加到 COCO 数据集字典
image = {
'id': int(root.find('filename').text.split('.')[0]),
'width': int(root.find('size').find('width').text),
'height': int(root.find('size').find('height').text),
'file_name': root.find('filename').text
}
coco_dict['images'].append(image)
# 遍历图像中的所有对象并添加到 COCO 数据集字典
for obj in root.findall('object'):
bbox = obj.find('bndbox')
annotation = {
'id': len(coco_dict['annotations']) + 1,
'image_id': image['id'],
'category_id': classes.index(obj.find('name').text) + 1,
'bbox': [int(bbox.find('xmin').text), int(bbox.find('ymin').text),
int(bbox.find('xmax').text) - int(bbox.find('xmin').text),
int(bbox.find('ymax').text) - int(bbox.find('ymin').text)],
'area': (int(bbox.find('xmax').text) - int(bbox.find('xmin').text)) * (int(bbox.find('ymax').text) - int(bbox.find('ymin').text)),
'iscrowd': 0
}
coco_dict['annotations'].append(annotation)
# 将 COCO 数据集字典保存为 JSON 格式文件
with open(json_file, 'w') as f:
json.dump(coco_dict, f)
```
请注意,这只是一个简单的脚本,可能无法处理所有情况。您可能需要根据您的特定需求进行修改或添加更多功能。
阅读全文