Shortcuts

Note

You are reading the documentation for MMOCR 0.x, which will soon be deprecated by the end of 2022. We recommend you upgrade to MMOCR 1.0 to enjoy fruitful new features and better performance brought by OpenMMLab 2.0. Check out the maintenance plan, changelog, code and documentation of MMOCR 1.0 for more details.

Source code for mmocr.core.evaluation.hmean_iou

# Copyright (c) OpenMMLab. All rights reserved.
import numpy as np

import mmocr.utils as utils
from . import utils as eval_utils


[docs]def eval_hmean_iou(pred_boxes, gt_boxes, gt_ignored_boxes, iou_thr=0.5, precision_thr=0.5): """Evaluate hmean of text detection using IOU standard. Args: pred_boxes (list[list[list[float]]]): Text boxes for an img list. Each box has 2k (>=8) values. gt_boxes (list[list[list[float]]]): Ground truth text boxes for an img list. Each box has 2k (>=8) values. gt_ignored_boxes (list[list[list[float]]]): Ignored ground truth text boxes for an img list. Each box has 2k (>=8) values. iou_thr (float): Iou threshold when one (gt_box, det_box) pair is matched. precision_thr (float): Precision threshold when one (gt_box, det_box) pair is matched. Returns: hmean (tuple[dict]): Tuple of dicts indicates the hmean for the dataset and all images. """ assert utils.is_3dlist(pred_boxes) assert utils.is_3dlist(gt_boxes) assert utils.is_3dlist(gt_ignored_boxes) assert 0 <= iou_thr <= 1 assert 0 <= precision_thr <= 1 img_num = len(pred_boxes) assert img_num == len(gt_boxes) assert img_num == len(gt_ignored_boxes) dataset_gt_num = 0 dataset_pred_num = 0 dataset_hit_num = 0 img_results = [] for i in range(img_num): gt = gt_boxes[i] gt_ignored = gt_ignored_boxes[i] pred = pred_boxes[i] gt_num = len(gt) gt_ignored_num = len(gt_ignored) pred_num = len(pred) hit_num = 0 # get gt polygons. gt_all = gt + gt_ignored gt_polys = [eval_utils.points2polygon(p) for p in gt_all] gt_ignored_index = [gt_num + i for i in range(len(gt_ignored))] gt_num = len(gt_polys) pred_polys, _, pred_ignored_index = eval_utils.ignore_pred( pred, gt_ignored_index, gt_polys, precision_thr) # match. if gt_num > 0 and pred_num > 0: sz = [gt_num, pred_num] iou_mat = np.zeros(sz) gt_hit = np.zeros(gt_num, np.int8) pred_hit = np.zeros(pred_num, np.int8) for gt_id in range(gt_num): for pred_id in range(pred_num): gt_pol = gt_polys[gt_id] det_pol = pred_polys[pred_id] iou_mat[gt_id, pred_id] = eval_utils.poly_iou(det_pol, gt_pol) for gt_id in range(gt_num): for pred_id in range(pred_num): if (gt_hit[gt_id] != 0 or pred_hit[pred_id] != 0 or gt_id in gt_ignored_index or pred_id in pred_ignored_index): continue if iou_mat[gt_id, pred_id] > iou_thr: gt_hit[gt_id] = 1 pred_hit[pred_id] = 1 hit_num += 1 gt_care_number = gt_num - gt_ignored_num pred_care_number = pred_num - len(pred_ignored_index) r, p, h = eval_utils.compute_hmean(hit_num, hit_num, gt_care_number, pred_care_number) img_results.append({'recall': r, 'precision': p, 'hmean': h}) dataset_hit_num += hit_num dataset_gt_num += gt_care_number dataset_pred_num += pred_care_number dataset_r, dataset_p, dataset_h = eval_utils.compute_hmean( dataset_hit_num, dataset_hit_num, dataset_gt_num, dataset_pred_num) dataset_results = { 'num_gts': dataset_gt_num, 'num_dets': dataset_pred_num, 'num_match': dataset_hit_num, 'recall': dataset_r, 'precision': dataset_p, 'hmean': dataset_h } return dataset_results, img_results
Read the Docs v: v0.6.3
Versions
latest
stable
v0.6.3
v0.6.2
v0.6.1
v0.6.0
v0.5.0
v0.4.1
v0.4.0
v0.3.0
v0.2.1
v0.2.0
v0.1.0
dev-1.x
Downloads
On Read the Docs
Project Home
Builds

Free document hosting provided by Read the Docs.