为了计算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)