python 将自己的数据转成PASCAL_VOC2007格式的文件

from lxml.etree import Element, SubElement, tostring
from xml.dom.minidom import parseString
import os
from PIL import Image

def make_xml(xmin_tuple, ymin_tuple, xmax_tuple, ymax_tuple, clname, image_name):

    node_root = Element('annotation')

    node_folder = SubElement(node_root, 'folder')
    node_folder.text = 'VOC'

    node_filename = SubElement(node_root, 'filename')
    node_filename.text = image_name

    node_object_num = SubElement(node_root, 'object_num')
    node_object_num.text = str(len(xmin_tuple))

    node_size = SubElement(node_root, 'size')
    node_width = SubElement(node_size, 'width')
    im = Image.open("images/" + image_name)
    width, height = im.size
    node_width.text = str(width)

    node_height = SubElement(node_size, 'height')
    node_height.text = str(height)

    node_depth = SubElement(node_size, 'depth')
    node_depth.text = '3'

    for i in xrange(len(xmin_tuple)):
        node_object = SubElement(node_root, 'object')
        node_name = SubElement(node_object, 'name')
        node_name.text = str(clname[i])
        node_difficult = SubElement(node_object, 'difficult')
        node_difficult.text = '0'

        node_bndbox = SubElement(node_object, 'bndbox')
        node_xmin = SubElement(node_bndbox, 'xmin')
        node_xmin.text = str(xmin_tuple[i])
        node_ymin = SubElement(node_bndbox, 'ymin')
        node_ymin.text = str(ymin_tuple[i])
        node_xmax = SubElement(node_bndbox, 'xmax')
        node_xmax.text = str(xmax_tuple[i])
        node_ymax = SubElement(node_bndbox, 'ymax')
        node_ymax.text = str(ymax_tuple[i])


    xml = tostring(node_root, pretty_print = True)
    dom = parseString(xml)
    return dom

save_xml_path = "Annotations/"  #生成的.xml保存路径
f = open("pascla_voc.txt")      #所有的bbox数据,将同一幅图片的bbox放在一起
result = []
n = 0
for line in f.readlines():
    result.append(line.split(' '))
    n = n + 1

img_nameinit = result[0][0]
xmin = []
ymin = []
xmax = []
ymax = []
clname = []
for i in range(0, n):
    if img_nameinit == result[i][0]:
        clname.append(result[i][1])
        xmin.append(result[i][2])
        ymin.append(result[i][3])
        xmax.append(result[i][4])
        ymax.append(result[i][5])
    else:
        dom = make_xml(xmin, ymin, xmax, ymax, clname, img_nameinit)
        por = os.path.splitext(img_nameinit)
        xml_name = os.path.join(save_xml_path, por[0] + '.xml')
        with open(xml_name, 'w') as f:
            f.write(dom.toprettyxml(indent='\t', encoding='utf-8'))
        xmin = []
        ymin = []
        xmax = []
        ymax = []
        clname = []
        img_nameinit = result[i][0]

print(img_nameinit)
dom = make_xml(xmin, ymin, xmax, ymax, clname, img_nameinit)
por = os.path.splitext(img_nameinit)
xml_name = os.path.join(save_xml_path, por[0] + '.xml')
with open(xml_name, 'w') as f:
    f.write(dom.toprettyxml(indent='\t', encoding='utf-8'))


#dom = make_xml(xmin_tuple, ymin_tuple, xmax_tuple, ymax_tuple, image_name)

#xml_name = os.path.join(save_xml_path, image_name + '.xml')
#with open(xml_name, 'w') as f:
    #f.write(dom.toprettyxml(indent='\t', encoding='utf-8'))

pascal_voc.txt文件的格式是.txt,每一行为:

<图片名.jpg><空格><类别名称><空格><bbox_topleft_x><空格><bbox_topleft_y><空格><bbox_bottomright_x><空格><bbox_bottomright_y>,我的类别用数字表示的,也可以用字符串表示


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT远征军

谢谢各位鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值