【问题标题】:I have pascal voc dataset with .xml annotation. I want to convert it to dakrnet .txt format. How can i do it?我有带有 .xml 注释的 pascal voc 数据集。我想将其转换为 dakrnet .txt 格式。我该怎么做?
【发布时间】:2020-02-11 17:16:07
【问题描述】:

我正在从事一个视频分析项目。我编写了一个使用 xml.etree.ElementTree 解析 .xml 文档的代码,但它以某种方式无法给出准确的结果。

我在 python 中使用 xml.etree.ElementTree 编写了一个代码,用于解析 .xml 文档,提取图像的 xmin、xmax、ymin、ymax、宽度和高度的值。标准化后,将其以所需格式附加到与图像同名的文本文件中。我用于归一化的公式是:

enter code here
            x = (xmin + xmax)/2. * 1./width
            y = (ymin + ymax)/2. * 1./height
            w = (xmax - xmin) * 1./width
            h = (ymax - ymin) * 1./height

我希望结果是暗网注释格式。

【问题讨论】:

    标签: python-3.x yolo


    【解决方案1】:

    你可以试试我的代码,看看能不能满足你的需求。

    import os
    import glob
    import csv
    import xml.etree.ElementTree as ET
    
    os.chdir(r'C:\Users\Administrator\Desktop\test')
    path = r'C:\Users\Administrator\Desktop\test'
    
    def xml_to_txt(path):
        txt_list = []
        for xml_file in glob.glob(path + '/*.xml'):
            everyrow_xml_list = []
            tree = ET.parse(xml_file)
            root = tree.getroot()
            everyrow_xml_list.append(path + '/' + root.find('filename').text)
            for member in root.findall('object'):
                xmin = str(int(member[4][0].text))
                ymin = str(int(member[4][1].text))
                xmax = str(int(member[4][2].text))
                ymax = str(int(member[4][3].text))
                if xmin=="0":
                    xmin="1"
                if ymin=="0":
                    ymin="1"
                if xmax=="0":
                    xmax="1"
                if ymax=="0":
                    ymax="1"
                value = xmin+','+ymin+','+xmax+','+ymax+','+member[0].text
                everyrow_xml_list.append(value)
            txt_list.append(everyrow_xml_list)#image_path x_min,y_min,x_max,y_max,class_id  x_min,y_min,x_max,y_max,class_id ……
        return txt_list
    
    
    
    def main():
        image_path = path
        xml2txt_list = xml_to_txt(image_path)
        with open(r'D:/aaa.txt', 'w', newline='', encoding='utf-8') as f:
            writer = csv.writer(f,delimiter=' ')
            writer.writerows(xml2txt_list)
        print('Successfully converted xml to txt.')
    
    if __name__ == '__main__':
        main()
    

    【讨论】:

      猜你喜欢
      • 2021-09-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-25
      相关资源
      最近更新 更多