yolov3中将xml信息写入对应txt文件中

在计算YOLOv3的mAP时,需要XML注释文件对应的TXT文件。此过程涉及从XML中提取物体的边界框坐标并写入TXT。以下是一段Python代码,用于完成这个任务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

为了计算map值,需要提供ground truth txt和detection txt两个文件,而第一个需要将xml中的xmin xmax ymin ymax写入到txt文件中,代码如下

#  -*- coding:utf8 -*-
import os
import xml.dom.minidom
import re


def read_xml(filepath ,name):
    dom = xml.dom.minidom.parse(filepath)
    root = dom.documentElement

    faces = dom.getElementsByTagName('name')
    face_n = len(faces)

    if face_n > 0:
        #
        # # write filename
        # itemlist = root.getElementsByTagName('path')
        # item = itemlist[0]
        # filepath = item.firstChild.data
        # filename_1 = re.split('Desktop\\\\', filepath)[1]
        # filepath_1 = re.sub('\\\\', '/', filename_1)
        # line = re.sub('_full.jpg', '.xml', filepath_1) + '\n'
        # print(filepath_1)
        # list.write(line)

        # write face number
        # print(face_n)
        # line = str(face_n) + '\n'
        # list.write(line)

        # write coordinate
        xmins = root.getElementsByTagName('xmin')
        xmaxs = root.getElementsByTagName('xmax')
        ymins = root.getElementsByTagName('ymin')
        ymaxs = root.getElementsByTagName('ymax')


        for i in range(face_n):
            xmin = float(xmins[i].firstChild.data)
            xmax = float(xmaxs[i].firstChild.data)
            ymin = float(ymins[i].firstChild.data)
            ymax = float(ymaxs[i].firstChild.data)
            a = faces[i].childNodes[0].data
            with open('./gt_txt/%s.txt' % name, 'a') as file:
                file.write(
                    a  + " " + str(xmin) + " " + str(ymin) + " " + str(
                        xmax) + " " + str(ymax))
                file.write('\n')



c_dir = './test_label'
#list = open('face.txt', 'w')
for root, dirs, files in os.walk(c_dir):
    for filename in files:
        if filename.endswith('.xml'):
            index = filename.rfind('.')
            name = filename[:index]
            xml_path = os.path.join(root, filename)
            # print(xml_path)
            read_xml(xml_path ,name)

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值