voc转coco数据的python代码
时间: 2023-09-03 14:15:00 浏览: 112
以下是一个将VOC格式数据转换为COCO格式数据的Python代码示例:
```
import json
import xml.etree.ElementTree as ET
# VOC格式数据路径
voc_path = 'voc_data/'
# COCO格式数据路径
coco_path = 'coco_data/'
# VOC标签对应COCO标签的映射关系
label_map = {'person': 1, 'cat': 2, 'dog': 3}
# 读取VOC格式数据
tree = ET.parse(voc_path + 'annotation.xml')
root = tree.getroot()
# COCO格式数据
coco = {'images': [], 'annotations': [], 'categories': []}
# 添加类别
for label, id in label_map.items():
coco['categories'].append({'id': id, 'name': label})
# 添加图像信息和标注信息
image_id = 0
annotation_id = 0
for image in root.findall('image'):
# 添加图像信息
image_id += 1
coco['images'].append({
'id': image_id,
'file_name': image.attrib['file'],
'height': int(image.attrib['height']),
'width': int(image.attrib['width'])
})
# 添加标注信息
for obj in image.findall('object'):
annotation_id += 1
coco['annotations'].append({
'id': annotation_id,
'image_id': image_id,
'category_id': label_map[obj.find('name').text],
'bbox': [
int(obj.find('bndbox').find('xmin').text),
int(obj.find('bndbox').find('ymin').text),
int(obj.find('bndbox').find('xmax').text) - int(obj.find('bndbox').find('xmin').text),
int(obj.find('bndbox').find('ymax').text) - int(obj.find('bndbox').find('ymin').text)
],
'iscrowd': 0
})
# 保存COCO格式数据
with open(coco_path + 'annotation.json', 'w') as f:
json.dump(coco, f)
```
希望能帮助到您!