PaddleFormers 多语言文字识别实战multi_languages_ocr_db_crnn 模块解析与部署指南【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers导读multi_languages_ocr_db_crnn是 PaddleFormersPaddleHub仓库中基于 PaddleOCR 封装的多语言文字识别Multi-Language OCR模块采用 DBDifferentiable Binarization文本检测 CRNNConvolutional Recurrent Neural Network文本识别的经典技术路线内置中英文通用模型以及 80 个小语种模型。本文将以该模块的 README.md 为主体结合仓库内 module.py、test.py、utils.py 等源码系统讲解其模型原理、环境安装、命令行与 Python API 预测、服务化部署、全量语种缩写对照以及底层实现细节。读完本文你将能够独立完成多语言 OCR 模块的安装、调用、参数调优与在线服务发布。一、模型基本信息应用效果展示该模块可对输入图片中的文本进行检测、识别并输出文本框坐标与置信度。官方样例结果如下截图来自 PaddleOCR 多语言识别效果展示原文档中嵌入的效果示例图此处以文字描述其内容 左侧为原始输入图片右侧为识别结果可视化文本框绘制并标注识别出的文字内容与置信度。说明原 README 中的效果图为外部图床链接本文不再重复引用读者可在安装模块后通过visualizationTrue自行生成可视化结果验证效果。模型介绍multi_languages_ocr_db_crnnModule 用于识别图片中的文字。其基于 PaddleOCR 模块完整流程包含三步先通过检测算法得到文本框再对文本框进行方向分类可选最后识别文本框中的文字。检测算法采用DBDifferentiable Binarization可微二值化能够端到端训练并输出文本区域的概率图与阈值图从而在自然场景下获得鲁棒的文本框定位识别算法采用CRNNConvolutional Recurrent Neural Network卷积递归神经网络将 CNN 特征提取与 RNN 序列建模结合配合 CTC 解码实现不定长文本序列识别。该 Module 不仅提供了通用场景下的中英文模型也提供了 80 个语言 的小语种模型可通过lang参数自由切换。原论文参考README 中给出的两篇奠基性工作Real-time Scene Text Detection with Differentiable BinarizationDB 检测算法An end-to-end trainable neural network for image-based sequence recognition and its application to scene text recognitionCRNN 识别算法模块速览表模型名称multi_languages_ocr_db_crnn类别图像-文字识别网络Differentiable Binarization RCNN数据集icdar2015 数据集是否支持 Fine-tuning否最新更新日期2021-11-24数据指标-二、安装1、环境依赖paddlepaddle 2.0.2paddlehub 2.0.0安装方法见 PaddleHub 安装文档此外模块源码 requirements.txt 声明了以下运行依赖安装模块时会一并校验paddleocr2.3.0.2 paddle2onnx0.9.0 shapely pyclipper其中paddleocr是模型预测引擎DB 检测、方向分类、CRNN 识别均由它驱动paddle2onnx用于将 Paddle 推理模型导出为 ONNX 格式shapely与pyclipper是文本框后处理多边形裁剪与计算所依赖的几何库。注意PaddleHub 的预训练模型需要连接服务端下载请确保机器可以正常访问外网可以使用paddlehub.server_check()检测与远端 PaddleHub-Server 的连接状态详见 PaddleHub 安装文档。2、安装执行以下命令安装该模块$ hub install multi_languages_ocr_db_crnn如安装遇到问题可参考对应平台的零基础安装指南零基础 Windows 安装零基础 Linux 安装零基础 MacOS 安装安装指定版本例如移除 Fluid API 的 1.1.0 版本$ hub install multi_languages_ocr_db_crnn1.1.0模块安装成功后会默认安装到${HUB_HOME}/.paddlehub/modules目录未设置HUB_HOME时保存在主目录下可通过hub show multi_languages_ocr_db_crnn查看模块属性名称、版本、描述、作者等详见 PaddleHub 命令行工具文档。三、模型 API 预测1、命令行预测最基本的调用方式$ hub run multi_languages_ocr_db_crnn --input_path /PATH/TO/IMAGE带完整参数的调用方式$ hub run multi_languages_ocr_db_crnn --input_path /PATH/TO/IMAGE --lang ch --det True --rec True --use_angle_cls True --box_thresh 0.7 --angle_classification_thresh 0.8 --visualization True命令行方式通过hub run执行模块的预测入口更多命令用法见 PaddleHub 命令行指令。结合源码 module.py 中的arg_parser命令行支持的全部参数及默认值如下参数类型默认值说明--input_pathstr必填待识别图片路径目录或单张图片--langstrNone语种选择如ch、en不传则使用初始化默认值--detboolTrue是否开启文字检测--recboolTrue是否开启文字识别--use_angle_clsboolFalse是否开启方向分类器识别 180 度旋转文字--enable_mkldnnboolFalse是否开启 mkldnn 加速 CPU 计算--use_gpuboolFalse是否使用 GPU--box_threshfloat0.6检测文本框置信度阈值--angle_classification_threshfloat0.9文本方向分类置信度阈值--output_dirstrocr_result输出图片保存目录--visualizationboolFalse是否将识别结果保存为图片注意命令行中的布尔参数使用ast.literal_eval解析见 module.py因此需传True/False首字母大写而不是true/false。2、预测代码示例import paddlehub as hub import cv2 ocr hub.Module(namemulti_languages_ocr_db_crnn, langen, enable_mkldnnTrue) # mkldnn加速仅在CPU下有效 result ocr.recognize_text(images[cv2.imread(/PATH/TO/IMAGE)]) # or # result ocr.recognize_text(paths[/PATH/TO/IMAGE])multi_languages_ocr_db_crnn目前支持 80 个语种通过修改lang参数进行切换。对于英文模型指定langen具体支持的语种缩写见文末 语种缩写表格。源码解析recognize_text 的完整调用链从 module.py 可以看到recognize_text的底层逻辑输入校验images与paths二选一二者同时为空或同时传入会抛出TypeError两者均为空时抛出断言错误对应测试test_recognize_text4与test_recognize_text5见 test.py。图片读取传入paths时通过 utils.py 的read_images统一读取为 BGR 格式的 ndarray。执行推理调用self.engine.ocr(img, det..., rec..., cls...)PaddleOCR 预测引擎一次调用即完成检测 →可选方向分类 → 识别全流程。结果组装根据det/rec/use_angle_cls的组合将 PaddleOCR 原始输出解析为统一的 dict 结构detTrue, recTrue输出text、confidence、text_box_positiondetTrue, recFalse仅输出text_box_positionuse_angle_clsTrue, recFalse输出orientation与score其余情况仅输出text与confidence。可视化当visualizationTrue且存在结果时调用 utils.py 的save_result_image将检测框与识别文字绘制到原图上并保存。可视化字体处理细节绘制识别结果时需要对应语种的字体文件。模块在 assets/fonts/ 目录下内置了 17 个字体文件如simfang.ttf、korean.ttf、hindi.ttf、arabic.ttf等。从 utils.py 可见默认使用中文simfang.ttf对korean、fr、german、hi、ne、fa、es、ta、te、ur、ug等语种会自动切换到对应字体保证绘制的文字不会乱码仅开启检测detTrue, recFalse时使用红色线条绘制检测框且低于drop_score0.5的框会被过滤见draw_boxesutils.py仅开启方向分类或识别无检测时不支持可视化会返回空字符串utils.py。3、API 说明构造方法__init__def __init__(self, langch, detTrue, recTrue, use_angle_clsFalse, enable_mkldnnFalse, use_gpuFalse, box_thresh0.6, angle_classification_thresh0.9)构造MultiLangOCR对象对应源码 module.py。参数参数类型默认值说明langstrch多语言模型选择默认为中文模型langchdetboolTrue是否开启文字检测recboolTrue是否开启文字识别use_angle_clsboolFalse是否开启方向分类用于识别 180 度旋转文字enable_mkldnnboolFalse是否开启 mkldnn 加速 CPU 计算仅在 CPU 运行下设置有效use_gpuboolFalse是否使用 GPU若使用 GPU请先设置CUDA_VISIBLE_DEVICES环境变量box_threshfloat0.6检测文本框置信度的阈值angle_classification_threshfloat0.9文本方向分类置信度的阈值从源码看这些参数最终会透传给 PaddleOCR 引擎box_thresh映射为det_db_box_threshDB 检测的文本框置信度阈值angle_classification_thresh映射为cls_thresh方向分类置信度阈值。构造完成后模块还会读取引擎内部的检测、识别、分类模型目录分别保存在self.det_model_dir、self.rec_model_dir、self.cls_model_dir中供后续 ONNX 导出使用见 module.py。预测方法recognize_textdef recognize_text(images[], paths[], output_dirocr_result, visualizationFalse)预测 API检测输入图片中的所有文本位置并识别文本结果。参数paths(list[str])图片的路径images(list[numpy.ndarray])图片数据ndarray.shape为[H, W, C]BGR 格式output_dir(str)图片的保存路径默认设为ocr_resultvisualization(bool)是否将识别结果保存为图片文件仅在检测开启时有效默认为 False。返回res(list[dict])识别结果的列表列表中每一个元素为 dict各字段为data(list[dict])识别文本结果列表中每一个元素为 dict各字段为text(str)识别得到的文本confidence(float)识别文本结果置信度text_box_position(list)文本框在原图中的像素坐标为 4×2 的矩阵依次表示文本框左下、右下、右上、左上顶点的坐标如果无识别结果则data为[]orientation(str)分类的方向仅在只有方向分类开启时输出score(float)分类的得分仅在只有方向分类开启时输出save_path(str, optional)识别结果的保存路径如不保存图片则save_path为。输入约定与边界行为输入图片必须为 BGR 格式的numpy.ndarraycv2.imread默认即此格式传入字符串路径列表会触发AttributeError不存在的图片路径会触发AssertionErrorread_images读取失败如文件损坏的图片会被静默跳过最终无任何有效图片时会断言报错见 utils.py。以上输入约定均有对应单元测试覆盖见 test.py其中test_recognize_text1/2/3分别验证了paths输入、images输入与可视化输出三种方式并对识别结果text、confidence、text_box_position做了逐字段断言。四、服务部署PaddleHub Serving 可以一键部署一个多语言 OCR 的在线服务。第一步启动 PaddleHub Serving运行启动命令$ hub serving start -m multi_languages_ocr_db_crnn执行后即完成了一个目标检测服务化 API 的部署默认端口号为8866该默认端口在 paddlehub/commands/serving.py 与 paddlehub/commands/serving.py 中定义也支持通过-p参数自定义。NOTE:如使用 GPU 预测则需要在启动服务之前设置CUDA_VISIBLE_DEVICES环境变量否则不用设置。第二步发送预测请求配置好服务端后以下代码即可实现发送预测请求并获取预测结果import requests import json import cv2 import base64 def cv2_to_base64(image): data cv2.imencode(.jpg, image)[1] return base64.b64encode(data.tostring()).decode(utf8) # 发送HTTP请求 data {images:[cv2_to_base64(cv2.imread(/PATH/TO/IMAGE))]} headers {Content-type: application/json} url http://127.0.0.1:8866/predict/multi_languages_ocr_db_crnn r requests.post(urlurl, headersheaders, datajson.dumps(data)) # 打印预测结果 print(r.json()[results])服务端实现原理服务端实际调用的是模块中标注了serving装饰器的serving_method见 module.py。它接收 HTTP 请求中 base64 编码的图片列表通过 PaddleOCR 工具函数base64_to_cv2解码为 ndarray再转交给recognize_text完成推理最终以 JSON 形式返回结果。由于请求图片以 base64 编码传输可兼容任意格式JPG/PNG 等的图片输入。五、支持语种及缩写multi_languages_ocr_db_crnn支持 80 个语种通过lang参数指定下表对应的缩写即可切换模型。完整对照如下语种描述缩写语种描述缩写中文chinese and englishch保加利亚文Bulgarianbg英文englishen乌克兰文Ukranianuk法文frenchfr白俄罗斯文Belarusianbe德文germangerman泰卢固文Telugute日文japanjapan阿巴扎文Abazaabq韩文koreankorean泰米尔文Tamilta中文繁体chinese traditionalchinese_cht南非荷兰文Afrikaansaf意大利文Italianit阿塞拜疆文Azerbaijaniaz西班牙文Spanishes波斯尼亚文Bosnianbs葡萄牙文Portuguesept捷克文Czechcs俄罗斯文Russiaru威尔士文Welshcy阿拉伯文Arabicar丹麦文Danishda印地文Hindihi爱沙尼亚文Estonianet维吾尔Uyghurug爱尔兰文Irishga波斯文Persianfa克罗地亚文Croatianhr乌尔都文Urduur匈牙利文Hungarianhu塞尔维亚文latinSerbian(latin)rs_latin印尼文Indonesianid欧西坦文Occitanoc冰岛文Icelandicis马拉地文Marathimr库尔德文Kurdishku尼泊尔文Nepaline立陶宛文Lithuanianlt塞尔维亚文cyrillicSerbian(cyrillic)rs_cyrillic拉脱维亚文Latvianlv毛利文Maorimi达尔瓦文Dargwadar马来文Malayms因古什文Ingushinh马耳他文Maltesemt拉克文Laklbe荷兰文Dutchnl莱兹甘文Lezghianlez挪威文Norwegianno塔巴萨兰文Tabassarantab波兰文Polishpl比尔哈文Biharibh罗马尼亚文Romanianro迈蒂利文Maithilimai斯洛伐克文Slovaksk昂加文Angikaang斯洛文尼亚文Sloveniansl孟加拉文Bhojpuribho阿尔巴尼亚文Albaniansq摩揭陀文Magahimah瑞典文Swedishsv那格浦尔文Nagpursck西瓦希里文Swahilisw尼瓦尔文Newarinew塔加洛文Tagalogtl保加利亚文Goan Konkanigom土耳其文Turkishtr沙特阿拉伯文Saudi Arabiasa乌兹别克文Uzbekuz阿瓦尔文Avarava越南文Vietnamesevi阿瓦尔文Avarava蒙古文Mongolianmn阿迪赫文Adygheady补充说明上表中的german、japan、korean等缩写保留了 PaddleOCR 语种体系的原始命名非 ISO 标准缩写使用lang参数时请以本表为准。六、更新历史1.0.0初始发布。1.1.0移除 Fluid API。可通过hub install multi_languages_ocr_db_crnn1.1.0安装该版本。当前仓库源码中的模块版本声明为1.1.0见 module.py 的moduleinfo装饰器与该更新历史一致。七、进阶ONNX 模型导出除预测与服务外该模块还内置了 ONNX 导出能力。从 module.py 可以看到export_onnx_model方法def export_onnx_model(self, dirname: str, input_shape_dictNone, opset_version10):dirnameONNX 模型保存目录input_shape_dict输入形状字典如{x: [-1, 3, -1, -1]}用于指定动态维度opset_versionONNX 算子集版本要求 10前置依赖paddle2onnx 0.9.0否则抛出ImportError。该方法会依次导出三个推理模型对应 test.py 中的断言multi_languages_ocr_db_crnn_det.onnxDB 文本检测模型multi_languages_ocr_db_crnn_rec.onnxCRNN 文本识别模型multi_languages_ocr_db_crnn_cls.onnx方向分类模型导出的 ONNX 模型可脱离 Paddle 运行时部署到 ONNX Runtime、TensorRT 等推理引擎中适用于边缘设备或生产环境的跨框架推理场景。总结multi_languages_ocr_db_crnn是一个开箱即用的多语言 OCR 模块底层由 PaddleOCR 驱动集成了 DB 检测、方向分类与 CRNN 识别三条流水线上层通过 PaddleHub 统一封装为命令行、Python API 与 HTTP Serving 三种使用方式。配合 80 语种模型库与内置字体资源它能够覆盖中英文、欧洲小语种、南亚语系、阿拉伯语系等绝大多数常见文字识别场景适合快速构建文档数字化、票据识别、多语言内容审核等应用。若要深入定制可结合本仓库 module.py、test.py 与 utils.py 的源码继续探索其实现细节。【免费下载链接】PaddleFormersPaddleFormers is an easy-to-use library of pre-trained large language model zoo based on PaddlePaddle.项目地址: https://gitcode.com/gh_mirrors/pa/PaddleFormers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
