Example #1
0
def gtsToxml(dataset_name='VOC2019',
             file_dir='',
             img_ID=None,
             size=(512, 512, 3),
             gts=[]):
    '''
    wrtie gts to xml
    :param dataset_name:
    :param file_dir:
    :param img_ID:
    :param size:
    :param gts:
    :return:
    '''
    doc = Document()
    # root
    root = doc.createElement('annotation')
    doc.appendChild(root)
    # item 1 : folder
    creatChild(doc, root, 'annotation', dataset_name)

    # item 2 :filename
    creatChild(doc, root, 'filename', img_ID + '.jpg')

    # item 3 :source
    item3 = doc.createElement('source')
    root.appendChild(item3)
    # item 3_1 : database
    creatChild(doc, item3, 'database', 'The ' + dataset_name + ' Database')
    # item 3_2 :annotation
    creatChild(doc, item3, 'annotation', 'PASCAL ' + dataset_name)
    # item 3_3 :image
    creatChild(doc, item3, 'image', 'AI_GROUP')
    # item 3_4 :AI_GROUP_ID
    creatChild(doc, item3, 'AI_GROUP_ID', img_ID)

    # item 4 : owner
    item4 = doc.createElement('owner')
    root.appendChild(item4)
    # item 4_1 :GROUP
    creatChild(doc, item4, 'GROUP', 'AI_GROUP')
    # item 4_2 :name
    creatChild(doc, item4, 'name', 'BINGO')

    # item 5 : size
    item5 = doc.createElement('size')
    root.appendChild(item5)
    # item 5_1 : width
    creatChild(doc, item5, 'width', '{}'.format(size[0]))
    # item 5_2 : heigth
    creatChild(doc, item5, 'heigth', '{}'.format(size[1]))
    # item 5_3 : depth
    creatChild(doc, item5, 'depth', '{}'.format(size[2]))

    # item 6 : segmented
    # 0 means no segmented , 1 means segmented
    creatChild(doc, root, 'segmented', '{}'.format(1))

    # Object item
    for obeject in gts:
        obeject_item = doc.createElement('object')
        root.appendChild(obeject_item)
        # item obeject_1 : name
        creatChild(doc, obeject_item, 'name', '{}'.format(obeject[0]))
        # item obeject_2 : pose
        creatChild(doc, obeject_item, 'pose', '{}'.format(obeject[1]))
        # item obeject_3 : truncated
        creatChild(doc, obeject_item, 'truncated', '{}'.format(obeject[2]))
        # item obeject_4 : difficult
        creatChild(doc, obeject_item, 'difficult', '{}'.format(obeject[3]))

        # item obeject_5 : bndbox
        obeject_item_5 = doc.createElement('bndbox')
        obeject_item.appendChild(obeject_item_5)
        # item obeject_5_1 : xmin
        creatChild(doc, obeject_item_5, 'xmin', '{}'.format(obeject[4]))
        # item obeject_5_2 : ymin
        creatChild(doc, obeject_item_5, 'ymin', '{}'.format(obeject[5]))
        # item obeject_5_3 : xmax
        creatChild(doc, obeject_item_5, 'xmax', '{}'.format(obeject[6]))
        # item obeject_5_4 : ymax
        creatChild(doc, obeject_item_5, 'ymax', '{}'.format(obeject[7]))

    # 将DOM对象doc写入文件
    file_path = os.path.join(file_dir, img_ID + '.xml')
    f = open(file_path, 'w')
    # f.write(doc.toprettyxml(indent = '\t', newl = '\n', encoding = 'utf-8'))
    doc.writexml_1(f,
                   indent='\t',
                   newl='\n',
                   addindent='\t',
                   encoding='utf-8',
                   tagName=root.tagName)

    f.close()