由于一张图片中所标注信息太多,单用肉眼检查有点麻烦,所以将标注结果可视化并将标注错误图片以及xml文件挑出来
代码如下
import glob
import os.path
import shutil
import xml.etree.ElementTree as ET
import cv2
# xml以及img存放路径
xml_path = r'/home/txt_excel/'
# 错误数据存放路径
img_save_path = r'/home/txt_excel/2'
list1 = glob.glob(os.path.join(xml_path, "*.xml"))
objects = []
for i in list1:
imgname = i.split(".")[0] + ".jpg"
img = cv2.imread(imgname)
tree = ET.parse(i)
for obj in tree.findall('object'):
obj_dict = dict()
obj_dict['name'] = obj.find('name').text
bbox = obj.find('bndbox')
obj_dict['bbox'] = [int(float(bbox.find('xmin').text)), int(float(bbox.find('ymin').text)),
int(float(bbox.find('xmax').text)), int(float(bbox.find('ymax').text))]
objects.append(obj_dict)
for j in range(len(objects)):
# print(i)
first_point = (objects[j]["bbox"][0], objects[j]["bbox"][1])
last_point = (objects[j]["bbox"][2], objects[j]["bbox"][3])
cv2.rectangle(img, first_point, last_point, (0, 255, 0), 1)
cv2.putText(img, "{}".format(obj_dict['name']), first_point, cv2.FONT_HERSHEY_COMPLEX, fontScale=1, color=(255, 255, 255),
thickness=1)
save_name = xml_path + "/" + imgname.split("/")[-1]
objects.clear()
# cv2.imwrite(img_save_path + "/" + save_name, img)
cv2.imshow("img", img)
key = cv2.waitKey(0)
if key == ord('q'):
break
elif key == ord('e'):
shutil.move(i, img_save_path)
shutil.move(save_name, img_save_path)
结果显示如下