资讯动态

PaddleOCR 端到端评测指南:文本检测 + 文本识别 Pipeline 的指标计算与结果可视化

发布时间:2026/9/19 2:55:21 来源:尧图企业网站定制
PaddleOCR 端到端评测指南文本检测 文本识别 Pipeline 的指标计算与结果可视化【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR端到端End-to-end评测衡量的是检测 识别串联系统的整体效果与单独评测检测或识别模型不同它直接以整张图片为输入统计检测框与识别文本同时正确的比例。本文基于 PaddleOCR 仓库tools/end2end目录下的配套工具完整讲解从串联推理、标签格式转换到指标计算与可视化的一整套端到端评测流程读者学完后可以对自己的 PP-OCR 检测 识别模型组合在自建数据集上完成量化评估并读懂fmeasure、character_acc、编辑距离等关键指标的含义。一、端到端评测的定位与整体流程PaddleOCR 的检测模型与识别模型通常独立训练、独立评估但实际业务关心的是检测 识别串联后的整体表现。tools/end2end目录正是为这一目标而设它存放了文本检测 文本识别 pipeline 串联预测的指标评测代码以及可视化工具见 tools/end2end/readme.md目录下共包含四个文件文件作用tools/end2end/convert_ppocr_label.py将 GT 标注与预测结果统一转换为端到端评测所需的目标格式tools/end2end/eval_end2end.py计算端到端评测指标precision / recall / fmeasure 等tools/end2end/draw_html.py将可视化结果目录渲染为 HTML 页面便于人工核验tools/end2end/readme.md评测步骤说明整个端到端评测分为三个步骤串联推理运行 tools/infer/predict_system.py 对图片目录执行检测 识别保存预测结果格式转换用convert_ppocr_label.py分别将 GT 标注和预测结果转换为评测脚本要求的统一格式指标计算运行eval_end2end.py得到端到端指标。二、步骤一串联推理并保存预测结果2.1 运行 predict_system.py端到端评测的第一步是获得检测 识别串联的预测结果。执行python3 tools/infer/predict_system.py --det_model_dir./ch_PP-OCRv2_det_infer/ --rec_model_dir./ch_PP-OCRv2_rec_infer/ --image_dir./datasets/img_dir/ --draw_img_save_dir./ch_PP-OCRv2_results/ --is_visualizeTrue各参数说明参数定义见 tools/infer/utility.py参数说明--det_model_dir检测模型推理目录含inference.pdmodel与inference.pdiparams--rec_model_dir识别模型推理目录--image_dir待评测图片目录支持目录或单张图片路径--draw_img_save_dir可视化图片与预测结果文件的保存目录默认./inference_results--is_visualize是否保存可视化结果--use_angle_cls是否启用方向分类器默认 False若启用需同时传--cls_model_dir--drop_score识别得分低于该阈值的框将被过滤默认 0.5--rec_image_shape识别输入尺寸默认3, 48, 320从源码看predict_system.py中的TextSystem类将检测器、识别器以及可选的文本方向分类器串成一条完整的调用链见 tools/infer/predict_system.py检测模型先输出文本框随后按det_box_type默认quad将每个文本框裁剪旋转为识别输入经方向分类后送入识别模型最后通过drop_score阈值过滤低分结果见 tools/infer/predict_system.py。注意仓库提示在 PP-OCRv3 中rec_image_shape默认值为3, 48, 320若使用 PP-OCRv2 或更早版本的识别模型需显式指定--rec_image_shape3,32,320见 tools/infer/predict_system.py。2.2 输出结果格式运行结束后可视化结果图默认保存在./ch_PP-OCRv2_results/目录下预测结果默认保存在./ch_PP-OCRv2_results/system_results.txt中。system_results.txt每行是一条样本的预测结果格式为图片路径 TAB JSON 数组all-sum-510/00224225.jpg [{transcription: 超赞, points: [[8.0, 48.0], [157.0, 44.0], [159.0, 115.0], [10.0, 119.0]], score: 0.99396634}, {transcription: 中, points: [[202.0, 152.0], [230.0, 152.0], [230.0, 163.0], [202.0, 163.0]], score: 0.09310734}, {transcription: 58.0m, points: [[196.0, 192.0], [444.0, 192.0], [444.0, 240.0], [196.0, 240.0]], score: 0.44041982}, {transcription: 汽配, points: [[55.0, 263.0], [95.0, 263.0], [95.0, 281.0], [55.0, 281.0]], score: 0.9986651}, {transcription: 成总店, points: [[120.0, 262.0], [176.0, 262.0], [176.0, 283.0], [120.0, 283.0]], score: 0.9929402}, {transcription: K, points: [[237.0, 286.0], [311.0, 286.0], [311.0, 345.0], [237.0, 345.0]], score: 0.6074794}, {transcription: 88-8, points: [[203.0, 405.0], [477.0, 414.0], [475.0, 459.0], [201.0, 450.0]], score: 0.7106863}]JSON 数组中每个元素对应一个检测 识别的文本框字段含义如下字段含义transcription识别出的文本内容points文本框四个角点坐标[x, y]四角按顺序排列score识别置信度得分这一格式由predict_system.py的main函数生成每张图片的检测框坐标经np.int32取整后与识别文本一起打包为字典列表再以json.dumps(res, ensure_asciiFalse)序列化见 tools/infer/predict_system.py。当输入为 PDF 等多页文档时文件名会追加_页序号后缀以区分不同页面的结果。三、步骤二标签格式转换端到端评测脚本要求 GT 与预测结果遵循统一的文本格式每行一条文本区域以\t分隔坐标、忽略标记与文本因此需要先将步骤一的输出以及标注数据转换为目标格式。3.1 转换脚本用法修改 tools/end2end/convert_ppocr_label.py 中convert_label函数的输入参数标签路径、Mode、保存标签路径然后分别对 GT 与预测结果执行转换python3 tools/end2end/convert_ppocr_label.py --modegt --label_pathpath/to/label_txt --save_foldersave_gt_label python3 tools/end2end/convert_ppocr_label.py --modepred --label_pathpath/to/pred_txt --save_foldersave_PPOCRV2_infer命令行参数见 tools/end2end/convert_ppocr_label.py参数是否必填说明--label_path是输入标签文件路径--save_folder是转换结果的保存目录--mode是gt标注数据或pred预测结果转换完成后会得到两个目录├── ./save_gt_label/ ├── ./save_PPOCRV2_infer/3.2 转换逻辑与格式差异convert_label的核心逻辑见 tools/end2end/convert_ppocr_label.py如下逐行读取标签文件按\t切分得到[图片路径, JSON 标注]若切分失败则尝试以 4 个空格切分解析 JSON 数组将每个文本框的points展平为 8 个坐标值与文本内容拼接成目标行GT 与预测的行格式不同gt模式输出8 个坐标 \t 忽略标记 \t 文本其中忽略标记为1表示该框不计入评测对应文本内容为###的难例/ignore 区域0表示正常参与评测pred模式输出8 个坐标 \t 文本按图片名逐张生成图片名.txt文件写入该图的所有文本行。值得注意的细节若标注字典中含score字段且得分小于0.5该框会被跳过见 tools/end2end/convert_ppocr_label.py这保证了 GT 中低质量标注不会干扰评测全角空格\u3000会被替换为普通空格见 tools/end2end/convert_ppocr_label.py避免字符对齐异常源文件与保存目录不允许相同脚本中有显式断言防止覆盖输入数据。转换产物的命名约定为每张图片一个同名.txt文件这是eval_end2end.py逐图匹配 GT 与预测文件的前提。四、步骤三执行端到端指标计算4.1 运行方式GT 目录与预测目录准备就绪后运行 tools/eval_end2end.py仓库根目录下的评测入口脚本python3 tools/eval_end2end.py gt_label_dir predict_label_dir例如python3 tools/eval_end2end.py ./save_gt_label/ ./save_PPOCRV2_infer/脚本从sys.argv[1]、sys.argv[2]分别读取 GT 目录与预测目录并调用e2e_eval(gt_folder, pred_folder)完成计算见 tools/eval_end2end.py。4.2 输出指标解读评测结束后将输出如下结果hit, dt_count, gt_count 1557 2693 3283 character_acc: 61.77% avg_edit_dist_field: 3.08 avg_edit_dist_img: 51.82 precision: 57.82% recall: 47.43% fmeasure: 52.11%各指标的含义与计算方式对应 tools/eval_end2end.py指标含义计算方式hit/dt_count/gt_count命中数 / 预测文本区域数 / GT 文本区域数hit 为检测框匹配且文本完全一致的框数precision精确率预测结果中正确命中的比例hit / dt_countrecall召回率GT 中被正确命中的比例hit / gt_countfmeasure精确率与召回率的调和平均2 * P * R / (P R)character_acc字符准确率字符级别的识别准确度1 - 总编辑距离 / GT 总字符数avg_edit_dist_field每个匹配文本区域的平均编辑距离总编辑距离 / gt_countavg_edit_dist_img每张图片的平均编辑距离总编辑距离 / 图片数官方文档特别指出fmeasure 是端到端评测的主要关注指标因为它同时惩罚了检测漏检/误检与识别错误而character_acc与编辑距离类指标则更侧重反映识别质量。4.3 指标计算的源码级解析从 tools/eval_end2end.py 的源码可以还原整个评测算法① 多边形 IoU 匹配核心步骤对每张图片将 GT 框与预测框分别构造为 shapelyPolygon并求凸包polygon_from_str见 tools/eval_end2end.py再计算多边形交集/并集比值polygon_iou见 tools/eval_end2end.pyIoU 阈值固定为0.5见 tools/eval_end2end.pyiou 0.5视为候选匹配先做快速intersects判断以加速计算对 shapely 的TopologicalError异常将 IoU 置 0 兜底所有候选匹配按 IoU 从大到小排序采用贪心一对一匹配一个 GT 框只匹配一个预测框已被匹配的框不再参与后续匹配见 tools/eval_end2end.py。② 匹配后的文本比对匹配成功的 GT/预测对中文本先经过strQ2B全角转半角归一化见 tools/eval_end2end.py再计算编辑距离ed基于editdistance库。若 GT 的 ignore 标记为0则该匹配计入 hit、编辑距离与字符统计为1的 ignore 区域不参与统计见 tools/eval_end2end.py。③ 未匹配框的处理未匹配的预测框视为误检文本与空串比较编辑距离计入总和dt_count增加未匹配的 GT 框非 ignore视为漏检文本与空串比较编辑距离计入总和gt_count增加。这种处理方式使得漏检、误检都会拉低fmeasure与端到端评测的语义一致。五、可视化核验工具draw_html.pytools/end2end目录还提供了 tools/end2end/draw_html.py用于将可视化结果打包成 HTML 表格页面方便对评测样本进行人工核验python3 tools/end2end/draw_html.py --image_dirpath/to/vis_dir --save_html_path./default.html --width640参数说明见 tools/end2end/draw_html.py参数默认值说明--image_dir空字符串存放可视化图片的目录会跳过其中的.txt文件--save_html_path./default.html输出 HTML 文件路径--width640页面中图片的显示宽度像素脚本将目录中的图片按文件名排序逐张写入 HTML 表格并声明utf-8编码以保证中文文件名与中文标注正常显示见 tools/end2end/draw_html.py。该工具可与步骤一中--draw_img_save_dir输出的可视化图配合使用快速浏览整批结果的直观质量。六、常见问题与使用建议评测前务必保证 GT 与预测文件命名一一对应eval_end2end.py以 GT 目录下的文件名去预测目录中找同名文件若预测文件缺失则按空结果处理会严重拉低 recall见 tools/eval_end2end.py请确认两个save_folder中图片级.txt文件名一致。忽略区域请标注为###GT 中文本为###的框会被标记为 ignore不参与指标统计适合标注模糊、残缺等难以识别的文本区域。--drop_score会影响端到端结果predict_system.py默认过滤得分低于 0.5 的识别结果调低该阈值会增加参与评测的框数可能提升 recall、降低 precision评测时应明确记录该参数。多语言与版本兼容识别模型版本不同如 PP-OCRv2 与 PP-OCRv3需对应设置--rec_image_shape中文字典默认路径为 ppocr/utils/ppocr_keys_v1.txt多语言场景需通过--rec_char_dict_path指定对应字典。七、总结PaddleOCR 的端到端评测体系将检测 识别串联推理tools/infer/predict_system.py、标签统一tools/end2end/convert_ppocr_label.py与指标计算tools/eval_end2end.py组织为一条完整、可复现的流程。其核心价值在于用fmeasure这一个综合指标量化整条 OCR 管线的实际效果并通过多边形 IoU 贪心匹配、编辑距离与字符准确率等指标将检测与识别的错误来源分解到可诊断的粒度。配合 tools/end2end/draw_html.py 的可视化核验这套工具既适合模型调优阶段的回归测试也适合业务上线前的效果评估。【免费下载链接】PaddleOCR飞桨多语言OCR工具包实用超轻量OCR系统支持80种语言识别提供数据标注与合成工具支持服务器、移动端、嵌入式及IoT设备端的训练与部署 Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80 languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)项目地址: https://gitcode.com/paddlepaddle/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

读完文章,也想定制专属网站?

尧图设计师 24 小时内与您沟通定制方案

免费获取报价