python批量处理数据脚本——目标检测数据标签的labelme格式转VOC格式
2023-12-13 13:08:29
import os
import json
from xml.etree.ElementTree import Element, SubElement, tostring, ElementTree
def labelme_to_voc(json_path, output_dir):
with open(json_path, 'r') as f:
labelme_data = json.load(f)
img_filename = labelme_data['imagePath']
img_width = labelme_data['imageWidth']
img_height = labelme_data['imageHeight']
shapes = labelme_data['shapes']
# Create VOC XML structure
root = Element('annotation')
folder = SubElement(root, 'folder')
folder.text = 'VOC' # Customize folder name as needed
filename = SubElement(root, 'filename')
filename.text = os.path.basename(img_filename)
size = SubElement(root, 'size')
width = SubElement(size, 'width')
width.text = str(img_width)
height = SubElement(size, 'height')
height.text = str(img_height)
depth = SubElement(size, 'depth')
depth.text = '3' # Assuming RGB images
for shape in shapes:
label = shape['label']
points = shape['points']
object_elem = SubElement(root, 'object')
name = SubElement(object_elem, 'name')
name.text = label
pose = SubElement(object_elem, 'pose')
pose.text = 'Unspecified'
truncated = SubElement(object_elem, 'truncated')
truncated.text = '0'
difficult = SubElement(object_elem, 'difficult')
difficult.text = '0'
bndbox = SubElement(object_elem, 'bndbox')
xmin = SubElement(bndbox, 'xmin')
xmin.text = str(min(points[0][0], points[1][0]))
ymin = SubElement(bndbox, 'ymin')
ymin.text = str(min(points[0][1], points[1][1]))
xmax = SubElement(bndbox, 'xmax')
xmax.text = str(max(points[0][0], points[1][0]))
ymax = SubElement(bndbox, 'ymax')
ymax.text = str(max(points[0][1], points[1][1]))
# Save the VOC XML file
xml_path = os.path.join(output_dir, os.path.splitext(os.path.basename(img_filename))[0] + '.xml')
tree = ElementTree(root)
tree.write(xml_path)
# Example usage
labelme_json_path = 'path/to/labelme.json'
output_directory = 'path/to/output'
labelme_to_voc(labelme_json_path, output_directory)
这只是一张图片的标签转换,要是一个数据集,则进行listdir遍历目录下的每个json标签即可。
文章来源:https://blog.csdn.net/weixin_45354497/article/details/134967888
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!