paddleLabe标注文件转labelImg

代码:

import os
import xml.etree.ElementTree as ET


# 增加换行符
def __indent(elem, level=0):
    i = "\n" + level * "\t"
    if len(elem):
        if not elem.text or not elem.text.strip():
            elem.text = i + "\t"
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
        for elem in elem:
            __indent(elem, level + 1)
        if not elem.tail or not elem.tail.strip():
            elem.tail = i
    else:
        if level and (not elem.tail or not elem.tail.strip()):
            elem.tail = i


# paddle标注文件转成labelImg标注
def paddle_data_labelImg(paddle_path, labelImg_path):
    Label_path = os.path.join(paddle_path, 'Label.txt')
    with open(Label_path, 'r', encoding='utf-8') as f:
        while True:
            line = f.readline()
            if line:
                list_line = line.split('	')
                image_name = os.path.basename(list_line[0])
                image_path = os.path.join(paddle_path, image_name)
                global false
                false = ''
                texts = eval(list_line[1])
                # 开始写入xml文件
                root = ET.Element('annotation')  # 创建节点
                # root.set('verified', 'yes')
                tree = ET.ElementTree(root)  # 创建文档

                folder = ET.Element('folder')
                folder.text = 'images'
                root.append(folder)

                filename = ET.Element('filename')
                filename.text = image_name
                root.append(filename)

                path = ET.Element('path')
                path.text = image_path
                root.append(path)

                source = ET.Element('source')
                database = ET.Element('database')
                database.text = 'Unknown'
                source.append(database)
                root.append(source)

                size = ET.Element('size')
                width = ET.Element('width')
                width.text = '1124'
                size.append(width)
                height = ET.Element('height')
                height.text = '796'
                size.append(height)
                depth = ET.Element('depth')
                depth.text = '1'
                size.append(depth)
                root.append(size)

                segmented = ET.Element('segmented')
                segmented.text = '0'
                root.append(segmented)

                for text in texts:
                    object = ET.Element('object')
                    transcription = text['transcription']
                    name = ET.Element('name')
                    name.text = transcription
                    object.append(name)

                    pose = ET.Element('pose')
                    pose.text = 'Unspecified'
                    object.append(pose)

                    truncated = ET.Element('truncated')
                    truncated.text = '0'
                    object.append(truncated)

                    difficult = ET.Element('difficult')
                    difficult.text = '0'
                    object.append(difficult)
                    # 坐标
                    bndbox = ET.Element('bndbox')
                    points = text['points']
                    if points[0][0] < points[3][0]:
                        xmin_p = points[0][0]
                    else:
                        xmin_p = points[3][0]
                    xmin = ET.Element('xmin')
                    xmin.text = str(xmin_p)
                    bndbox.append(xmin)
                    if points[0][1] < points[1][1]:
                        ymin_p = points[0][1]
                    else:
                        ymin_p = points[1][1]
                    ymin = ET.Element('ymin')
                    ymin.text = str(ymin_p)
                    bndbox.append(ymin)
                    if points[1][0] > points[2][0]:
                        xmax_p = points[1][0]
                    else:
                        xmax_p = points[2][0]
                    xmax = ET.Element('xmax')
                    xmax.text = str(xmax_p)
                    bndbox.append(xmax)
                    if points[2][1] > points[3][1]:
                        ymax_p = points[2][1]
                    else:
                        ymax_p = points[3][1]
                    ymax = ET.Element('ymax')
                    ymax.text = str(ymax_p)
                    bndbox.append(ymax)

                    object.append(bndbox)
                    root.append(object)
                __indent(root)
                xml_path = os.path.join(labelImg_path, image_name.replace('.png', '.xml'))
                print(xml_path)
                tree.write(xml_path, encoding='utf-8', xml_declaration=True)
            else:
                break


# labelImg标注文件转成paddle标注
def labelImg_data_paddle(paddle_path, labelImg_path):
    list_paddle = []
    list_paddle_zhang = []
    filenames = os.listdir(labelImg_path)
    f_dir = os.path.basename(paddle_path)
    for filename in filenames:
        if '.txt' in filename:
            continue
        print(filename)
        labelImg_xml_path = os.path.join(labelImg_path, filename)
        tree = ET.ElementTree(file=labelImg_xml_path)
        root = tree.getroot()
        list_point, list_point_zhang = [], []
        file_url = ''
        for child in root:
            if child.tag == 'filename':
                file_url = os.path.join(f_dir, child.text)
            if child.text.isspace() and child.tag == 'object':
                dict = {}
                for child2 in child:
                    if child2.tag == 'name':
                        dict['transcription'] = child2.text
                    xmin, ymin, xmax, ymax = 0, 0, 0, 0
                    if child2.text.isspace():
                        for child3 in child2:
                            if child3.tag == 'xmin':
                                xmin = int(child3.text)
                            if child3.tag == 'ymin':
                                ymin = int(child3.text)
                            if child3.tag == 'xmax':
                                xmax = int(child3.text)
                            if child3.tag == 'ymax':
                                ymax = int(child3.text)
                        point = [[xmin, ymin], [xmax, ymin], [xmax, ymax], [xmin, ymax]]
                        dict['points'] = point
                dict['difficult'] = 'false'
                if dict['transcription'] == 'zhang':
                    list_point_zhang.append(dict)
                else:
                    list_point.append(dict)
        result_point = file_url + '	' + str(list_point)
        result_point_zhang = file_url + '	' + str(list_point_zhang)
        result_point = result_point.replace('\'false\'', 'false').replace('\\', '/')
        result_point_zhang = result_point_zhang.replace('\'false\'', 'false').replace('\\', '/')
        list_paddle.append(result_point)
        list_paddle_zhang.append(result_point_zhang)
    print(len(list_paddle))
    with open(os.path.join(paddle_path, 'Label.txt'), 'w', encoding='utf-8')as f:
        for one_paddle in list_paddle:
            f.writelines(one_paddle + '\n')
    with open(os.path.join(paddle_path, 'Label_zhang.txt'), 'w', encoding='utf-8')as f:
        for one_paddle in list_paddle_zhang:
            if '[]' not in one_paddle:
                f.writelines(one_paddle + '\n')
    with open(os.path.join(paddle_path, 'fileState.txt'), 'w', encoding='utf-8')as f:
        for one_paddle in list_paddle:
            file_url = one_paddle.split('	')[0]
            filename = os.path.basename(file_url)
            image_url = os.path.join(paddle_path, filename)
            paddle_image = image_url + '	' + str(1)
            f.writelines(paddle_image + '\n')


if __name__ == '__main__':
    # paddle标注文件转成labelImg标注
    # paddle_path = r'C:\Users\lpj\Desktop\OCR\error'
    # labelImg_path = r'C:\Users\lpj\Desktop\OCR\liuxml'
    # paddle_data_labelImg(paddle_path, labelImg_path)

    # labelImg标注文件转成paddle标注
    labelImg_path = r'C:\Users\lpj\Desktop\OCR\xml'
    paddle_path = r'C:\Users\lpj\Desktop\OCR\images'
    labelImg_data_paddle(paddle_path, labelImg_path)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: labelimg是一款非常方便的图像标注工具,可以用来标注各种类型的物体,并且生成不同格式的标注文件。其中包括txt格式和xml格式。 首先需要将labelimg标注文件从txt格式换成xml格式。这个过程可以通过使用Python程序实现。具体步骤如下: 1. 导入相关的库,比如os、re、xml.etree.ElementTree等。 2. 读取txt格式的标注文件。 3. 解析txt文件,获取需要的信息,比如图片大小、目标类别、目标坐标等。 4. 利用xml.etree.ElementTree库创建一个xml文件,并且添加根节点和子节点。 5. 将解析出来的信息添加到xml文件的对应节点中。 6. 保存xml文件。 需要注意的是,这个过程需要先了解xml文件的格式和结构,以及如何使用xml.etree.ElementTree库创建和修改xml文件。 通过这个过程换后,就可以使用其它支持xml格式标注文件的机器学习算法或应用程序进行物体检测等任务,比如使用YOLO、Faster R-CNN等算法进行目标检测等。 ### 回答2: LabelImg是一款非常方便易用的图像标注工具,可以用它来标注图片中的目标物体,并生成相应的标注文件。但是,LabelImg生成的标注文件是txt格式的,不太方便进行后续的处理,因此有时需要将txt格式的标注文件换成xml格式的标注文件。以下是标注文件txt换成xml的步骤: 1. 首先需要安装一个叫做"LabelImgConvert"的工具,可以在Github上找到它的相关资料。下载安装好之后,打开终端或命令行窗口,输入命令:labelImgConverter -i input_dir -o output_dir,其中input_dir是原始标注文件目录,output_dir是要输出的xml格式文件目录。执行该命令后,程序会自动将txt格式的标注文件换成xml格式的标注文件,并存储到指定的output_dir目录下。 2. 如果你没有安装LabelImgConvert工具,也可以手动将txt标注文件换成xml格式。方法是,先创建一个xml格式的模板文件,内容与标注文件中的注释信息一致,然后手动将txt标注文件中的注释信息复制到xml模板文件中,并保存。需要注意的是,xml格式的标注文件中需要按照预定义的格式来命名和组织标注信息,否则会无法通过后续的处理流程。 总之,无论是使用LabelImgConvert工具还是手动换,都需要对标注文件的格式要求有一定的了解,同时要保证输出的xml格式标注文件与原始图片和txt格式标注文件一致,这样才能保证后续的机器学习或其他应用正常进行。 ### 回答3: labelimg是一种常用的图像标注工具,它可以帮助我们方便地对图像进行标注,并生成对应的标注文件。其中,常用的文件格式之一是.txt文件,它记录了标注的对象的位置和类别等信息。如果需要将这些txt文件换成其他格式,比如XML格式,可以使用一些工具进行换。 在进行换前,我们需要先了解XML文件的结构。XML是可扩展标记语言,它允许我们自定义标签以及标签的属性和值。在图像标注中,XML文件通常包括图片的宽、高、深度信息,以及每个标注对象的位置、类别等信息,这些信息通过特定的标签记录在XML文件中。 为了将txt文件换成XML格式,我们可以使用Python编程语言中的相关程序库,比如XML ElementTree库。这个库可以帮助我们创建XML文档,并将txt文件中的信息导入到文档中。 具体步骤如下: 1. 读取txt文件,将每个标注对象的位置,类别等信息提取出来。 2. 创建空的XML文档,并定义根节点。 3. 遍历所有的标注对象信息,为每个对象创建子节点,并将属性和值添加到节点中。 4. 将创建好的XML文档保存为XML文件。 总之,将labelimg标注文件.txt换成XML格式需要了解XML文件的结构和使用相关的程序库,通过相关的操作将txt文件中的信息换到XML文件中,然后就可以方便地使用XML文件进行图像标注和处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值