import os import numpy as np import cv2 as cv import xml.dom.minidom as minidom from tqdm import tqdm class ICDAR: def __init__(self, root): self.root = root self.acc = -1 self.inputSize = [100, 32] self.val_label_file = os.path.join(root, "word.xml") self.val_label = self.load_label(self.val_label_file) @property def name(self): return self.__class__.__name__ def load_label(self, label_file): label = list() dom = minidom.getDOMImplementation().createDocument(None, 'Root', None) root = dom.documentElement dom = minidom.parse(self.val_label_file) root = dom.documentElement names = root.getElementsByTagName('image') for name in names: key = os.path.join(self.root, name.getAttribute('file')) value = name.getAttribute('tag').lower() label.append([key, value]) return label def eval(self, model): right_num = 0 pbar = tqdm(self.val_label) pbar.set_description("Evaluating {} with {} val set".format(model.name, self.name)) for fn, label in pbar: img = cv.imread(fn) rbbox = np.array([0, img.shape[0], 0, 0, img.shape[1], 0, img.shape[1], img.shape[0]]) pred = model.infer(img, rbbox) if label.lower() == pred.lower(): right_num += 1 self.acc = right_num/(len(self.val_label) * 1.0) def get_result(self): return self.acc def print_result(self): print("Accuracy: {:.2f}%".format(self.acc*100))