该库用于计算Exact Match
和Char Match
两个指标,用来快速评测文本识别算法效果,与text_rec_test_dataset配套使用。
指标计算代码参考:PaddleOCR
flowchart LR
A([Text Recognition Algorithm]) --get_pred_txt.py--> B([pred_txt])
B --compute_metric.py--> C([TextRecMetric]) --> D([ExactMatch])
C --> E([CharMatch])
如果想要评测其他文本识别算法,需要将预测结果写入pred.txt
中,格式为预测文本\t真实文本\t耗时
,详细可参考link。示例如下:
动漫 动漫 0.665647029876709
上网 上网 0.6647390524546305
华茂 华茂 0.6621260245641073
- 安装运行环境
pip install rapidocr_onnxruntime==1.3.16 pip install datasets pip install text_rec_metric
- 获得
pred.txt
文本文件from pathlib import Path import cv2 import numpy as np from datasets import load_dataset from rapidocr_onnxruntime import RapidOCR from tqdm import tqdm engine = RapidOCR() dataset = load_dataset("SWHL/text_rec_test_dataset") test_data = dataset["test"] content = [] for i, one_data in enumerate(tqdm(test_data)): img = np.array(one_data.get("image")) img = cv2.cvtColor(img, cv2.COLOR_RGB2BGR) result, elapse = engine(img, use_det=False, use_cls=False, use_rec=True) if result is None: rec_res = "" elapse = 0 else: rec_res, elapse = result[0] gt = one_data.get("label", None) content.append(f"{rec_res}\t{gt}\t{elapse}") with open("pred.txt", "w", encoding="utf-8") as f: for v in content: f.write(f"{v}\n")
- 计算指标
from text_rec_metric import TextRecMetric metric = TextRecMetric() pred_path = "pred.txt" metric = metric(pred_path) print(metric)
- 得到结果
{'ExactMatch': 0.8323, 'CharMatch': 0.9355, 'avg_elapse': 0.6836}
-
$N$ : 总的文本行个数 -
$p_{i}$ : 第$i$ 条文本行识别结果 -
$g_{i}$ : 第$i$ 条文本行对应的真实标签
-
$N$ : 总的文本行个数 -
$p_{i}$ : 第$i$ 条文本行识别结果 -
$g_{i}$ : 第$i$ 条文本行对应的真实标签 -
$Levenshtein(x, y)$ : 求字符串$x$ 和字符串$y$ 的编辑距离 -
$max(x, y)$ : 求$x$ 和$y$ 的最大值 -
$len(x)$ : 求所给字符串$x$ 的长度