
PaddleOCR HubServing Docker 部署指南把 OCR 服务快速打包成可调用的 Restful API【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR本篇技术指南围绕 PaddleOCR 仓库中 Docker 化部署文档 展开讲解如何利用 Docker 将 PaddleOCR 的ocr_system模块打包为镜像并在 CPU/GPU 环境下以 HubServing 模式启动、测试一个标准的 OCR Restful API 服务。读完本文你可以独立完成镜像制作、容器启动、端口验证以及通过 curl 发送 Base64 图片请求并解析结构化识别结果同时理解服务背后的模块代码与关键可调参数。一、部署方案总览HubServing 模式是如何工作的该方案的目标是通过 Docker 技术把 PaddleOCR 服务打包成镜像以便在 Docker 或 K8s 环境中快速发布上线。文档中说明当前实现的是基于 HubServing 模式的部署作者同时计划后续增加 PaddleServing 模式的部署。从源码结构看整个服务由三部分组成PaddleHub 服务模块deploy/hubserving/ocr_system/module.py 定义了名为ocr_system的 PaddleHub 模块moduleinfo(nameocr_system, version1.0.0)。其核心逻辑是serving_method是对外暴露的 serving 入口serving装饰器先把请求中的 Base64 字符串通过base64_to_cv2解码为图像数组再调用predictpredict逐张调用TextSystem来自 tools/infer/predict_system.py即完整的检测 方向分类 识别OCR 流水线输出text、confidence、text_region四点多边形坐标三类字段_initialize在启用 GPU 时会强制检查环境变量CUDA_VISIBLE_DEVICES未正确设置会抛出RuntimeError并把显存上限cfg.gpu_mem设为 8000 MB。运行参数配置deploy/hubserving/ocr_system/params.py 中的read_params()定义了全部推理参数详见第六节merge_configs会在启动时用这些值覆盖默认配置。服务清单deploy/hubserving/ocr_system/config.json 指定服务端口port: 8868、工作进程数workers: 2并在init_args中声明use_gpu: trueGPU 镜像中生效CPU 场景需要容器内无可用 GPU 或相应调整。Dockerfile 的CMD正是把这三者串起来的一条命令hub install deploy/hubserving/ocr_system/ hub serving start -m ocr_system二、实施前提准备按照文档要求开始之前需要先安装以下基本组件组件说明Docker 环境必需用于构建与运行镜像显卡驱动 CUDA 10.0仅 GPU 版本需要NVIDIA Container ToolkitGPU 版本需要Docker 19.03 以上版本可跳过此步cuDNN 7.6仅 GPU 版本需要从 GPU 版 Dockerfile 的基础镜像registry.baidubce.com/paddlepaddle/paddle:2.0.0-gpu-cuda10.1-cudnn7也可以印证官方 GPU 镜像按 CUDA 10.1 cuDNN 7 环境制作与上述前提一致。三、制作镜像仓库为 CPU 和 GPU 分别提供了 Dockerfile位于 deploy/docker/hubserving/cpu/Dockerfile 与 deploy/docker/hubserving/gpu/Dockerfile两者结构相同区别仅在基础镜像CPUFROM registry.baidubce.com/paddlepaddle/paddle:2.0.0GPUFROM registry.baidubce.com/paddlepaddle/paddle:2.0.0-gpu-cuda10.1-cudnn7Dockerfile 的构建步骤可以拆分为四段安装依赖基于 Python 3.7升级 pip、安装paddlehub拉取代码git clone https://github.com/PaddlePaddle/PaddleOCR.git /PaddleOCR然后安装仓库requirements.txt中的依赖下载推理模型为文本检测、方向分类、文本识别三个模型分别执行ADD {link}tar xf解压到/PaddleOCR/inference/。注意 Dockerfile 中的{link}与{file}是模板占位符构建前需要替换为实际的模型下载地址与文件名。Dockerfile 中的注释明确说明默认使用轻量版mobile模型如需换成高精度server版本例如把检测模型从ch_ppocr_mobile_v2.0_det_infer改为ch_ppocr_server_v2.0_det_infer同时记得同步修改 params.py 中对应的det_model_dir字段否则会出现模型目录不一致的问题暴露端口与启动命令EXPOSE 8868并以hub install ... hub serving start -m ocr_system作为容器启动命令。制作镜像的具体操作文档以 CPU 为例GPU 版本替换关键字即可# a. 切换至 Dockerfile 目录需区分 cpu 或 gpu 版本 cd deploy/docker/hubserving/cpu # b. 生成镜像 docker build -t paddleocr:cpu .四、启动 Docker 容器启动方式按 CPU/GPU 与 Docker 版本区分共三种命令CPU 版本sudo docker run -dp 8868:8868 --name paddle_ocr paddleocr:cpuGPU 版本基于 NVIDIA Container Toolkitsudo nvidia-docker run -dp 8868:8868 --name paddle_ocr paddleocr:gpuGPU 版本Docker 19.03 及以上可直接使用--gpus参数sudo docker run -dp 8868:8868 --gpus all --name paddle_ocr paddleocr:gpu说明中文文档中该条命令写为-dp 8868:8869与英文版 README.md 的8868:8868不一致属于文档笔误。容器内服务监听的是 8868 端口见 config.json 的port: 8868与 Dockerfile 的EXPOSE 8868宿主机端口映射应保持两端一致。检查服务运行情况执行docker logs -f paddle_ocr当日志中出现Successfully installed ocr_system和Running on http://0.0.0.0:8868等信息时表示服务启动成功。五、测试服务从 Base64 编码到返回结果解析服务就绪后测试分为三步a. 计算待识别图片的 Base64 编码。可借助任意 Base64 图片编码工具在线工具或本地脚本均可。b. 发送服务请求。仓库提供了完整的示例请求文件 deploy/docker/hubserving/sample_request.txt其中包含一张真实图片的 Base64 编码与可直接执行的 curl 命令。请求的基本格式为curl -H Content-Type:application/json -X POST --data {\images\: [\填入图片Base64编码(需要删除data:image/jpg;base64,前缀)\]} http://localhost:8868/predict/ocr_system两个要点请求体是 JSON字段名为images值为 Base64 字符串数组支持一次传多张图如果 Base64 带有data:image/jpg;base64,前缀需要先删除因为模块侧的base64_to_cv2tools/infer/utility.py只做纯 Base64 解码接口路径为/predict/ocr_system即 HubServing 的predict路由加上模块名。注意sample_request.txt末尾示例写的是localhost:8866实际服务端口应以 8868 为准同样以 config.json 与启动日志为准。c. 解析返回结果。调用成功时返回如下结构{msg:,results:[[{confidence:0.8403433561325073,text:约定,text_region:[[345,377],[641,390],[634,540],[339,528]]},{confidence:0.8131805658340454,text:最终相遇,text_region:[[356,532],[624,530],[624,596],[356,598]]}]],status:0}字段含义与 module.py 中predict的组装逻辑一一对应字段含义来源msg错误信息正常时为空字符串HubServing 框架status状态码0表示成功HubServing 框架results二维数组外层对应请求中的每张图片内层对应该图识别出的每条文本predict按图片循环追加results[i][j].text识别出的文本rec_resresults[i][j].confidence该条文本的置信度浮点数float(score)results[i][j].text_region文本区域的四个顶点坐标[[x1,y1],[x2,y2],[x3,y3],[x4,y4]]即旋转矩形多边形dt_boxes[dno].astype(np.int32).tolist()六、参数深度解析params.py 决定了服务识别能力hub serving start启动时module.py 的merge_configs会用 params.py 中read_params()的返回值逐项覆盖parse_args的默认配置。这些参数直接决定了服务的模型选择与识别行为文本检测DB 算法cfg.det_algorithm DB cfg.det_model_dir ./inference/PP-OCRv3_mobile_det_infer/ cfg.det_limit_side_len 960 # 缩放后最长边限制 cfg.det_limit_type max # 按最长边缩放 cfg.det_db_thresh 0.3 # 概率图二值化阈值 cfg.det_db_box_thresh 0.5 # 多边形框得分阈值低于此值的框被丢弃 cfg.det_db_unclip_ratio 1.6 # 多边形外扩比例 cfg.use_dilation False cfg.det_db_score_mode fast文本识别CRNNcfg.rec_algorithm CRNN cfg.rec_model_dir ./inference/ch_PP-OCRv3_rec_infer/ cfg.rec_image_shape 3, 48, 320 # 识别输入形状 cfg.rec_batch_num 6 # 识别批大小 cfg.max_text_length 25 cfg.rec_char_dict_path ./ppocr/utils/ppocr_keys_v1.txt # 字符字典 cfg.use_space_char True方向分类器cfg.use_angle_cls True # 启用 180° 方向分类 cfg.cls_model_dir ./inference/ch_ppocr_mobile_v2.0_cls_infer/ cfg.cls_image_shape 3, 48, 192 cfg.label_list [0, 180] cfg.cls_batch_num 30 cfg.cls_thresh 0.9其他开关cfg.use_pdserving False # 是否使用 PaddleServing 推理后端 cfg.use_tensorrt False # 是否启用 TensorRT 加速 cfg.drop_score 0.5 # 结果过滤阈值置信度低于该值的文本框将被丢弃调优要点均可直接修改 params.py 后重新构建镜像模型精度与速度取舍det_model_dir/rec_model_dir/cls_model_dir决定使用哪个推理模型。Dockerfile 注释给出了 mobile 与 server 版本互换的操作方法并强调必须同步修改 params.py 中的目录字段检测召回det_db_box_thresh降低可增加召回但可能引入误检det_db_thresh、det_db_unclip_ratio影响多边形连通区域与外扩范围结果噪声控制drop_score是最终结果的置信度过滤线模型下载 URLparams.py 末尾还保留了det_model_url/rec_model_url/cls_model_url三个 HTTPS 模型地址可配合 Dockerfile 的ADD {link}占位符完成模型下载。七、注意事项与适用前提版本前提Dockerfile 标注Version: 2.0.0基础镜像为 PaddlePaddle 2.0.0 系列环境基于 Python 3.7服务模块绑定的是 v2.x 推理链路TextSystem、PP-OCRv3/v2.0 推理模型。该部署方案适用于 v2.x 系列的模型与推理格式不能直接等同于仓库当前 3.x 新 API 的运行环境使用前提以文档和 Dockerfile 实际内容为准GPU 环境要求若镜像以use_gpu: true初始化见 config.json_initialize会检查CUDA_VISIBLE_DEVICES环境变量未设置或格式不正确将直接报RuntimeError。GPU 容器需通过nvidia-docker或 Docker 19.03 的--gpus all方式启动使该环境变量正确注入端口一致性镜像内固定监听 8868EXPOSE 8868port: 8868。docker run的端口映射、curl 请求地址三者需保持一致中文文档8868:8869与示例请求文件中的8866均应按 8868 修正理解模型占位符Dockerfile 中的ADD {link}与tar xf ... {file}为模板形式执行docker build前必须替换为真实可下载的模型链接与文件名否则构建会失败部署模式范围当前 Docker 方案仅覆盖 HubServing 模式PaddleServing 模式部署在文档中属于后续计划。综合来看这套文档 Dockerfile 服务模块的组合为 PaddleOCR v2.x 提供了一条从源码到 Restful API 的标准路径改params.py控制行为、换 Dockerfile 占位符控制模型、docker build/run/logs三步完成发布与验证。【免费下载链接】PaddleOCRTurn any PDF or image document into structured data for your AI. A powerful, lightweight OCR toolkit that bridges the gap between images/PDFs and LLMs. Supports 100 languages.项目地址: https://gitcode.com/GitHub_Trending/pa/PaddleOCR创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考