新闻详情

新闻详情

首页 / 资讯中心 / 详情

PaddleOCR 通用 OCR 流水线 C++ 本地部署实战指南(Linux CPU/GPU)

发布时间:2026/9/12 8:32:33来源:尧图网络
PaddleOCR 通用 OCR 流水线 C++ 本地部署实战指南(Linux CPU/GPU)
PaddleOCR 通用 OCR 流水线 C 本地部署实战指南Linux CPU/GPU【免费下载链接】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本篇技术指南完整讲解如何在 Linux 环境下将 PaddleOCR 的通用 OCR 流水线以 C 形式进行本地部署与推理从 OpenCV 与 Paddle Inference 的环境编译到预测 Demo 的编译、模型准备、命令行与 C API 调用再到多语言识别与结果可视化等扩展能力。读完本文你将掌握一套可复现、可二次开发、可上生产线的 C OCR 部署全流程并理解底层deploy/cpp_infer的源码结构与参数体系。通用 OCR 流水线的模块构成PaddleOCR 的通用 OCR 流水线General OCR Pipeline由五个模块串联而成其中前三个为可选模块后两个为核心必需模块文档图像方向分类模块可选判断整页文档是 0°、90°、180° 还是 270°用于纠正扫描件、拍照件的旋转方向文本图像矫正展平模块可选对弯曲、折叠的书页或纸张进行透视展开典型模型为 UVDoc文本行方向分类模块可选判断每个文本行是否为 180° 倒置文本检测模块定位图像中所有文本区域文本框文本识别模块将检测出的文本行图像识别为文字内容。可选模块可按需开关例如对已规范化的文档可关闭矫正与方向分类以提升速度必要模块检测 识别始终参与推理。流水线内部的默认开关与模型配置可以在 OCR.yaml 中查看use_doc_preprocessor: True、use_textline_orientation: True检测默认模型为PP-OCRv6_medium_det、识别默认模型为PP-OCRv6_medium_rec本文档示例中的命令行默认模型为 PP-OCRv5 系列。说明本文对应文档为 Linux 环境教程Windows 的编译方式见 Windows 编译教程编译完成后运行 Demo 的命令与 Linux 一致。1. 环境准备用于编译与执行的源码位于仓库的 deploy/cpp_infer 目录。推荐环境要求Linux 操作系统gcc 8.2若编译 Paddle Inference GPU 版本则要求 gcc 11.2cmake 3.18。1.1 编译 OpenCV 库目前仅支持 OpenCV 4.x 系列官方示例以 OpenCV 4.7.0 为例。步骤如下下载 OpenCV 源码并解压cd deploy/cpp_infer wget https://paddle-model-ecology.bj.bcebos.com/paddlex/cpp/libs/opencv-4.7.0.tgz tar -xf opencv-4.7.0.tgz配置并编译 OpenCV在tools/build_opencv.sh脚本中将root_path设置为 opencv-4.7.0 源码的绝对路径设置install_path默认${root_path}/opencv4该路径将作为后续编译预测 Demo 时的 OpenCV 库路径执行编译脚本sh tools/build_opencv.sh仓库中 build_opencv.sh 的实际配置展示了 OpenCV 的关键编译选项CMAKE_BUILD_TYPERelease、BUILD_SHARED_LIBSOFF静态编译、WITH_JPEG/PNG/TIFF/ZLIB全部开启并内置编译BUILD_JPEG/BUILD_PNG/BUILD_TIFF/BUILD_ZLIBON同时关闭了IPP、LAPACK、EIGEN等非必需依赖以减小体积并避免链接冲突。若需要支持中文等非拉丁字符的文本可视化渲染请在编译阶段额外加入 FreeType 模块详见本文第 3.2 节。1.2 编译 Paddle Inference 预测库可以选择直接下载预编译包也可以手动源码编译。1.2.1 直接下载预编译包推荐Paddle Inference 官方提供了 Linux 预测库可在其官网的下载库页面选择适合的预编译包。下载后解压tar -xvf paddle_inference.tgz解压后当前目录下会生成paddle_inference/子文件夹。1.2.2 源码编译预测库也可以选择从源码自行编译预测库这样可以灵活配置各种特性与依赖适配不同的软硬件环境。详细步骤可参考官方《Linux 下源码编译》文档。2. 快速上手2.1 编译预测 Demo编译预测 Demo 前请先按照第 1.1、1.2 节完成 OpenCV 库与 Paddle Inference 预测库的编译。随后修改tools/build.sh中的配置执行sh tools/build.sh仓库中的 build.sh 展示了完整 cmake 参数核心配置参数如下表参数说明默认值OPENCV_DIROpenCV 编译安装路径即编译 OpenCV 时的install_path必填无LIB_DIR下载的 Paddle Inference 预编译包路径或手动编译的预测库路径如build/paddle_inference_install_dir文件夹必填无CUDA_LIB_DIRCUDA 库文件路径通常为/usr/local/cuda/lib64当 Paddle Inference 为 GPU 版本且-DWITH_GPUON时需要设置无CUDNN_LIB_DIRcuDNN 库文件路径通常为/usr/lib/x86_64-linux-gnu/当 Paddle Inference 为 GPU 版本且-DWITH_GPUON时需要设置无WITH_GPU设为 ON 时编译 GPU 版本 Demo要求 Paddle Inference 库为 GPU 版本OFF注意以上路径必须使用绝对路径。从 CMakeLists.txt 可以看到更多底层编译选项与约束WITH_MKL默认 ON启用 MKL/OpenBLAS 数学库加速同时会链接mklml与onednnMKL-DNN库WITH_STATIC_LIB默认 ON选择静态库/动态库链接方式USE_FREETYPE默认 OFF开启后启用 OpenCV 的 freetype 模块进行文字渲染编译时会检查 OpenCV 是否包含opencv_freetype模块否则直接报错GPU 模式下WITH_GPUONCMake 会强制要求CUDA_LIB与CUDNN_LIB已设置否则编译直接失败FATAL_ERROR编译过程会自动下载并解压abseil-cpp、clipper_ver6.4.2、nlohmann三个第三方依赖包见 CMakeLists.txt 中的download_and_decompress逻辑用于参数传递、多边形裁剪与 JSON 解析。2.2 准备模型可以直接下载 PaddleOCR 官方提供的推理模型。各模块可选模型如下文档图像方向分类模块可选模型下载链接Top-1 Acc (%)模型大小 (MB)简介PP-LCNet_x1_0_doc_ori推理模型99.067基于 PP-LCNet_x1_0 的文档图像分类模型四分类0 度、90 度、180 度、270 度。文本图像矫正展平模块可选模型下载链接CER模型大小 (MB)简介UVDoc推理模型0.17930.3高精度文本图像展平模型。文本行方向分类模块可选模型下载链接Top-1 Acc (%)模型大小 (MB)简介PP-LCNet_x1_0_textline_ori默认推理模型99.426.5基于 PP-LCNet_x1_0 的文本行分类模型二分类0 度和 180 度。PP-LCNet_x0_25_textline_ori推理模型98.850.96基于 PP-LCNet_x0_25 的轻量文本行分类模型二分类0 度和 180 度。文本检测模块模型下载链接检测 Hmean (%)模型大小 (MB)简介PP-OCRv5_server_det默认推理模型83.884.3PP-OCRv5 服务端文本检测模型精度更高适合部署在性能较好的服务器上。PP-OCRv5_mobile_det推理模型79.04.7PP-OCRv5 移动端文本检测模型效率更高适合部署在边缘设备上。PP-OCRv4_server_det推理模型69.2109PP-OCRv4 服务端文本检测模型精度较高适合部署在各类服务器上。PP-OCRv4_mobile_det推理模型63.84.7PP-OCRv4 移动端文本检测模型效率较高适合部署在边缘设备上。文本识别模块模型下载链接识别平均精度 (%)模型大小 (MB)简介PP-OCRv5_server_rec默认推理模型86.3881PP-OCRv5_rec 是新一代文本识别模型旨在以单模型高效准确地支持简体中文、繁体中文、英文、日文四大语言以及手写、竖排、拼音、生僻字等复杂文本场景在保证识别效果的同时兼顾推理速度与模型鲁棒性。PP-OCRv5_mobile_rec推理模型81.2916同上轻量版。PP-OCRv4_server_rec_doc推理模型86.58182基于 PP-OCRv4_server_rec在更多中文文档数据与 PP-OCR 训练数据的混合数据集上训练增强部分繁体中文、日文及特殊字符的识别能力支持 15000 字符文档相关与通用文本识别能力均得到提升。PP-OCRv4_mobile_rec推理模型78.7410.5PP-OCRv4 轻量识别模型推理效率高适合包括边缘设备在内的多种硬件部署。PP-OCRv4_server_rec推理模型85.19173PP-OCRv4 服务端识别模型推理精度高适合部署在各类服务器上。你也可以参考各模块的“模型导出”章节如 文本检测模块 - 模型导出将自行训练的模型导出为推理模型后再使用。推理模型的目录结构一般为PP-OCRv5_mobile_det |–inference.pdiparams (模型权重文件) |–inference.json (模型结构文件JSON 格式) |–inference.yml (模型配置文件YAML 格式)2.3 运行预测 Demo在本地使用通用 OCR 流水线 C 之前请先成功编译预测 Demo。编译完成后可以通过命令行体验也可以调用 API 进行二次开发后重新编译生成应用。提示运行过程中若出现程序无响应、异常退出、内存资源耗尽或推理速度极慢等问题可参照本文档调整配置例如关闭不需要的功能模块或换用更轻量的模型。Demo 同时支持系统流水线调用与单模块调用。运行以下代码前请先将示例图片下载到本地。运行方式./build/ppocr pipeline_or_module [--param1] [--param2] [...]输入输出相关参数参数说明类型默认值input待预测的本地图像必填。仅支持jpg、png、jpeg、bmp格式。str无save_path推理结果文件的保存路径JSON 结果文件与预测结果图均保存在该路径下。str./output通用参数参数说明类型默认值device推理设备支持指定具体卡号CPU如cpu表示使用 CPU 推理GPU如gpu:0表示使用第一张 GPU 推理。若未设置则使用流水线初始化时的默认值编译时添加-DWITH_GPUON则优先使用本机 GPU 设备 0否则使用 CPU。str无precision计算精度如fp32、fp16。strfp32enable_mkldnn是否开启 MKL-DNN 加速推理。若 MKL-DNN 不可用或模型不支持即使开启也不会生效。booltruemkldnn_cache_capacityMKL-DNN 缓存容量。int10cpu_threadsPaddleInference CPU 加速库线程数。int8paddlex_configPaddleX 流水线配置文件路径。str无在 args.cc 中可以看到这些命令行参数的 gflags 定义与默认值其中device默认值随编译选项动态变化WITH_GPU宏开启时默认gpu:0否则默认cpusave_path默认./output/。所有参数均以字符串形式定义在 cli.cc 的GetPipelineMoudleParams()中统一转换为目标类型std::stoi/std::stof/Utility::StringToBool后分发到各模块参数结构体。模块开关参数参数说明类型默认值use_doc_orientation_classify是否加载并使用文档方向分类模块。未设置时使用流水线初始化默认值。booltrueuse_doc_unwarping是否加载并使用文本图像矫正模块。未设置时使用流水线初始化默认值。booltrueuse_textline_orientation是否加载并使用文本行方向模块。未设置时使用流水线初始化默认值。booltrue文本检测模型相关参数参数说明类型默认值text_detection_model_name文本检测模型名称。未设置时使用流水线默认模型当传入的检测模型路径对应的模型名与流水线默认配置不一致时需要指定传入模型的名称。strPP-OCRv5_server_dettext_detection_model_dir文本检测模型目录路径必填。str无text_det_limit_side_len文本检测图像边长限制任意大于 0 的整数。未设置时使用流水线初始化默认值。int64text_det_limit_type文本检测边长限制类型。支持min与maxmin表示保证图像最短边不小于det_limit_side_lenmax表示保证图像最长边不大于limit_side_len。strmintext_det_thresh文本检测像素阈值。输出概率图中得分大于该阈值的像素才被认为是文本像素任意大于 0 的浮点数。float0.3text_det_box_thresh文本检测框阈值。检测框内所有像素平均得分大于该阈值时结果才被判定为文本区域任意大于 0 的浮点数。float0.6text_det_unclip_ratio文本检测区域扩张系数用于扩张文本区域值越大扩张面积越大任意大于 0 的浮点数。float1.5text_det_input_shape文本检测输入形状可设置 3 个值分别代表 C、H、W。str方向分类相关参数参数说明类型默认值doc_orientation_classify_model_name文档方向分类模型名称。未设置时使用流水线默认模型当传入模型与默认配置不一致时需要指定。strPP-LCNet_x1_0_doc_oridoc_orientation_classify_model_dir文档方向分类模型目录路径。设置use_doc_orientation_classify false时可省略。str无textline_orientation_model_name文本行方向分类模型名称。未设置时使用流水线默认模型。strPP-LCNet_x1_0_textline_oritextline_orientation_model_dir文本行方向分类模型目录路径。设置use_textline_orientation false时可省略。str无textline_orientation_batch_size文本行方向模型批处理大小。未设置时使用流水线默认值。int6文本识别模型相关参数参数说明类型默认值text_recognition_model_name文本识别模型名称。未设置时使用流水线默认模型当传入模型与默认配置不一致时需要指定。strPP-OCRv5_server_rectext_recognition_model_dir文本识别模型目录路径必填。str无text_recognition_batch_size文本识别模型批处理大小。未设置时使用流水线默认值。int6text_rec_score_thresh文本识别阈值得分大于该阈值的文本结果被保留任意大于 0 的浮点数。float0.0text_rec_input_shape文本识别输入形状可设置 3 个值分别代表 C、H、W。str2.3.1 系统流水线调用示例假设模型目录结构如下按第 2.1 节准备模型models |--PP-LCNet_x1_0_doc_ori_infer |--UVDoc_infer |--PP-LCNet_x1_0_textline_ori_infer |--PP-OCRv5_server_det_infer |--PP-OCRv5_server_rec_infer全流水线串行五模块全开./build/ppocr ocr --input ./general_ocr_002.png --save_path ./output/ \ --doc_orientation_classify_model_dir models/PP-LCNet_x1_0_doc_ori_infer \ --doc_unwarping_model_dir models/UVDoc_infer \ --textline_orientation_model_dir models/PP-LCNet_x1_0_textline_ori_infer \ --text_detection_model_dir models/PP-OCRv5_server_det_infer \ --text_recognition_model_dir models/PP-OCRv5_server_rec_infer \ --device cpu示例输出指定save_path后会在该路径下生成标准 JSON 预测结果文件与预测结果图{ input_path: ./general_ocr_002.png, doc_preprocessor_res: { model_settings: {use_doc_unwarping: true, use_doc_orientation_classify: true}, angle: 0 }, ..., dt_polys: [[[132, 6], [355, 6], [355, 64], [132, 64]], [[424, 9], [689, 9], [689, 59], [424, 59]], ..., [[664, 8], [867, 4], [868, 55], [665, 60]], [[31, 99], [173, 99], [173, 126], [31, 126]]], ..., rec_texts: [登机牌, BOARDING, GPASS, ..., ], ..., }文本检测 文本行方向分类 文本识别关闭文档预处理./build/ppocr ocr --input ./general_ocr_002.png --save_path ./output/ \ --doc_orientation_classify_model_dir models/PP-LCNet_x1_0_doc_ori_infer \ --doc_unwarping_model_dir models/UVDoc_infer \ --textline_orientation_model_dir models/PP-LCNet_x1_0_textline_ori_infer \ --text_detection_model_dir models/PP-OCRv5_server_det_infer \ --text_recognition_model_dir models/PP-OCRv5_server_rec_infer \ --use_doc_orientation_classify False \ --use_doc_unwarping False \ --device cpu示例输出{ input_path: ./general_ocr_002.png, ..., dt_polys: [[[0, 1], [334, 1], [334, 34], [0, 34]], [[151, 21], [357, 16], [358, 72], [152, 76]], ..., [[675, 97], [740, 97], [740, 121], [675, 121]], [[751, 97], [836, 94], [837, 115], [752, 119]], ..., rec_texts: [净小8866-, 登机牌, BOARDING, GPASS, ..., ], ..., }仅文本检测 文本识别三个可选模块全部关闭./build/ppocr ocr --input ./general_ocr_002.png --save_path ./output/ \ --doc_orientation_classify_model_dir models/PP-LCNet_x1_0_doc_ori_infer \ --doc_unwarping_model_dir models/UVDoc_infer \ --textline_orientation_model_dir models/PP-LCNet_x1_0_textline_ori_infer \ --text_detection_model_dir models/PP-OCRv5_server_det_infer \ --text_recognition_model_dir models/PP-OCRv5_server_rec_infer \ --use_doc_orientation_classify False \ --use_doc_unwarping False \ --use_textline_orientation False \ --device cpu示例输出{ input_path: ./general_ocr_002.png, ..., dt_polys: [[[0, 1], [334, 1], [334, 34], [0, 34]], [[151, 21], [357, 16], [358, 72], [152, 76]], ..., [[61, 109], [194, 106], [194, 132], [61, 135]], [[80, 138], [219, 136], [219, 162], [80, 164]], ..., rec_texts: [www.997788.com中国收藏热线,登机牌, BOARDING, GPASS, ..., ], ..., }上述示例代码会生成对应的文本检测结果图如需查看文本识别结果可视化图请参考本文第 3.2 节。从源码看命令行的三种模式实际上都路由到同一个PaddleOCR流水线类在 cli.cc 中ocr模式通过pred_map映射到PaddleOCR(std::get0(params)).Predict(input)而模块开关参数use_doc_orientation_classify、use_doc_unwarping、use_textline_orientation会被转换为PaddleOCRParams中的absl::optionalbool见 ocr.h未显式设置时保持nullopt由流水线内部采用默认值因此三个可选模块默认全部启用。2.3.2 单模块调用示例文档图像方向分类./build/ppocr doc_img_orientation_classification --input ./general_ocr_002.png --save_path ./output/ \ --doc_orientation_classify_model_dir models/PP-LCNet_x1_0_doc_ori_infer \ --device cpu示例输出指定save_path后会在该路径下生成标准 JSON 预测结果文件与预测结果图{ res: { input_path: {./general_ocr_002.png}, class_ids: {0}, scores: {0.926328}, label_names: {0}, }文档图像矫正展平./build/ppocr text_image_unwarping --input ./general_ocr_002.png --save_path ./output/ \ --doc_unwarping_model_dir models/UVDoc_infer \ --device cpu示例输出{ res: { input_path: {./general_ocr_002.png}, doctr_img: {...} }文本行方向分类./build/ppocr textline_orientation_classification --input ./general_ocr_002.png --save_path ./output/ \ --textline_orientation_model_dir models/PP-LCNet_x1_0_textline_ori_infer \ --device cpu示例输出{ res: { input_path: {./general_ocr_002.png}, class_ids: {0}, scores: {0.719926}, label_names: {0_degree}, }文本检测./build/ppocr text_detection --input ./general_ocr_002.png --save_path ./output/ \ --text_detection_model_dir models/PP-OCRv5_server_det_infer \ --device cpu示例输出{ res: { input_path: {./general_ocr_002.png }, dt_polys: [ [[98, 456], [834, 441], [834, 466], [98, 480]], [[344, 347], [662, 343], [662, 366], [344, 371]], [[66, 341], [165, 337], [167, 363], [67, 367]], ..., [[0, 1], [331, 0], [332, 32], [0, 34]], ]}, dt_scores: [ 0.812284, 0.8082, 0.848293, ..., ] } }文本识别./build/ppocr text_recognition --input ./general_ocr_rec_001.png --save_path ./output/ \ --text_recognition_model_dir models/PP-OCRv5_server_rec_infer \ --device cpu示例输出{ res: { input_path: {./general_ocr_rec_001.png }, rec_text: {绿洲仕格维花园公寓 } rec_score: {0.982409 } }从 cli.cc 的SUPPORT_MODE_PIPELINE与SUPPORT_MODE_MODEL集合可以看到当前可用的流水线模式为ocr、doc_preprocessor单模块模式为text_image_unwarping、doc_img_orientation_classification、textline_orientation_classification、text_detection、text_recognition对应的实现类分别位于 src/api/models 目录下。若传入不支持的名称程序会打印支持列表并退出。2.4 C API 集成命令行界面用于快速体验与查看结果实际项目中通常需要以代码方式集成。通用 OCR 流水线的配置参数较多实例化时使用结构体传参命名规则为流水线类名 Params通用 OCR 流水线对应的类名为PaddleOCR结构体为PaddleOCRParams。#include src/api/pipelines/ocr.h int main(){ PaddleOCRParams params; params.doc_orientation_classify_model_dir models/PP-LCNet_x1_0_doc_ori_infer; // 文档方向分类模型路径 params.doc_unwarping_model_dir models/UVDoc_infer; // 文本图像矫正模型路径 params.textline_orientation_model_dir models/PP-LCNet_x1_0_textline_ori_infer; // 文本行方向分类模型路径 params.text_detection_model_dir models/PP-OCRv5_server_det_infer; // 文本检测模型路径 params.text_recognition_model_dir models/PP-OCRv5_server_rec_infer; // 文本识别模型路径 // params.device gpu; // 使用 GPU 推理需确保编译时添加 -DWITH_GPUON否则使用 CPU // params.use_doc_orientation_classify false; // 不使用文档方向分类模型 // params.use_doc_unwarping false; // 不使用文本图像矫正模型 // params.use_textline_orientation false; // 不使用文本行方向分类模型 // params.text_recognition_model_name PP-OCRv5_server_rec // 指定识别模型 // params.vis_font_dir your_vis_font_dir; // 编译时添加 -DUSE_FREETYPEON 时必须提供对应 ttf 字体文件路径 auto infer PaddleOCR(params); auto outputs infer.Predict(./general_ocr_002.png); for (auto output : outputs) { output-Print(); output-SaveToImg(./output/); output-SaveToJson(./output/); } }上述代码对应的头文件 ocr.h 中还展示了更多可在PaddleOCRParams中设置的字段text_det_limit_side_len、text_det_limit_type、text_det_thresh、text_det_box_thresh、text_det_unclip_ratio、text_rec_score_thresh、enable_mkldnn默认 true、mkldnn_cache_capacity默认 10、precision默认fp32、cpu_threads默认 8等与命令行参数一一对应。PaddleOCR类提供单图Predict(const std::string)与多图Predict(const std::vectorstd::string)两个重载每个结果对象继承自BaseCVResult统一支持Print()打印、SaveToImg()保存可视化图、SaveToJson()保存 JSON 结果三种输出。3. 扩展功能3.1 多语言文本识别PP-OCRv5 还提供了覆盖 39 种语言的多语言文本识别能力包括韩语、西班牙语、法语、葡萄牙语、德语、意大利语、俄语、泰语、希腊语等。具体支持语言如下模型下载链接支持语言PP-OCRv5_server_rec推理模型简体中文、繁体中文、英文、日文PP-OCRv5_mobile_rec推理模型简体中文、繁体中文、英文、日文korean_PP-OCRv5_mobile_rec推理模型韩语、英文latin_PP-OCRv5_mobile_rec推理模型英语、法语、德语、南非荷兰语、意大利语、西班牙语、波斯尼亚语、葡萄牙语、捷克语、威尔士语、丹麦语、爱沙尼亚语、爱尔兰语、克罗地亚语、乌兹别克语、匈牙利语、塞尔维亚语拉丁、印度尼西亚语、奥克语、冰岛语、立陶宛语、毛利语、马来语、荷兰语、挪威语、波兰语、斯洛伐克语、斯洛文尼亚语、阿尔巴尼亚语、瑞典语、斯瓦希里语、他加禄语、土耳其语、拉丁语eslav_PP-OCRv5_mobile_rec推理模型俄语、白俄罗斯语、乌克兰语、英文th_PP-OCRv5_mobile_rec推理模型泰语、英文el_PP-OCRv5_mobile_rec推理模型希腊语、英文en_PP-OCRv5_mobile_rec推理模型英文使用流水线或模块时直接传入对应的识别模型即可。例如使用文本识别模块识别法语文本./build/ppocr text_recognition \ --input ./french.png \ --text_recognition_model_name latin_PP-OCRv5_mobile_rec \ --text_recognition_model_dir latin_PP-OCRv5_mobile_rec_infer \ --save_path ./output/注意text_recognition_model_name必须与传入模型目录中的实际模型名一致否则会触发本文第 4 节的模型名不匹配错误。更多信息可参考 PP-OCRv5 多语言文本识别介绍。3.2 可视化文本识别结果默认情况下OpenCV 内置的 putText 无法渲染中文等非拉丁字符。我们使用 opencv_contrib 4.x 中的 FreeType 模块进行字体渲染。若想可视化文本识别结果需要同时下载 OpenCV 与 opencv_contrib 源码并编译带 FreeType 模块的 OpenCV。下载源码时需确保两者版本一致以下以 opencv-4.7.0 与 opencv_contrib-4.7.0 为例wget https://paddle-model-ecology.bj.bcebos.com/paddlex/cpp/libs/opencv-4.7.0.tgz wget https://paddle-model-ecology.bj.bcebos.com/paddlex/cpp/libs/opencv_contrib-4.7.0.tgz tar -xf opencv-4.7.0.tgz tar -xf opencv_contrib-4.7.0.tgz安装 FreeType 依赖sudo apt-get update sudo apt-get install libfreetype6-dev libharfbuzz-dev按以下步骤编译带 FreeType 支持的 OpenCVa. 在tools/build_opencv.sh脚本中追加以下三个选项-DOPENCV_EXTRA_MODULES_PATHyour_opencv_contrib-4.7.0/modules/-DBUILD_opencv_freetypeON-DWITH_FREETYPEONb. 在tools/build_opencv.sh中将root_path设置为 opencv-4.7.0 源码的绝对路径c. 在tools/build_opencv.sh中设置install_path默认${root_path}/opencv4该路径将作为后续编译预测 Demo 时的 OpenCV 库路径d. 配置完成后执行sh tools/build_opencv.she. 在tools/build.sh中追加-DUSE_FREETYPEON以开启文字渲染并在运行 Demo 时通过--vis_font_dir your_ttf_path指定 ttf 字体文件路径然后重新编译预测 Demosh tools/build.sh编译并运行预测 Demo 后即可看到带文本渲染的可视化识别结果。这一机制与 CMakeLists.txt 中的USE_FREETYPE选项相对应开启后编译期会校验 OpenCV 是否包含opencv_freetype模块未包含则直接报错FATAL_ERROR同时cli.cc中--vis_font_dir会被同时写入ocr_params.vis_font_dir与rec_params.vis_font_dir。仓库 doc/fonts 目录下提供了多种语言的 ttf 字体文件可供参考。4. FAQ报错Model name mismatch, please input the correct model dir. model dir is xxx, but model name is xxx说明指定的模型名与提供的模型不匹配。例如文本识别模型期望的是PP-OCRv5_server_rec但传入的却是PP-OCRv5_mobile_rec。解决方法调整模型名或更换提供的模型例如指定--text_recognition_model_name PP-OCRv5_mobile_rec使其与传入模型匹配。从源码看模型名通过cli.cc中的text_recognition_model_name等 flag 传入PaddleOCRParams流水线在CheckParams()阶段对model_dir中的实际模型名与配置名进行一致性校验。Windows 控制台出现乱码可能是控制台默认字符编码GBK导致的将其切换为 UTF-8 编码即可。总结本文完整覆盖了 PaddleOCR 通用 OCR 流水线在 Linux 上的 C 本地部署链路环境编译OpenCV Paddle Inference→ 预测 Demo 编译 → 模型下载与组织 → 命令行/单模块调用 → C API 二次开发 → 多语言识别与 FreeType 可视化。结合 deploy/cpp_infer 目录下的构建脚本、cli.cc、args.cc 与 ocr.h 等源码读者既能按文档快速跑通 Demo也能深入理解参数传递机制与流水线模块化设计为在真实业务系统中落地 C OCR 推理打下坚实基础。【免费下载链接】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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

一篇读懂python文件读写 2026/9/12 9:20:40

一篇读懂python文件读写

首先获取到需要读取文件的根目录def get_project_dir():"""获取当前项目的根路径:return: 返回根路径的绝对路径"""project_dir os.path.abspath(os.path.join(os.path.dirname(__file__), "../.."))return project_dirYaml文件操作c…

阅读更多 →
CEO必备:ROI决策能力与实战方法论 2026/9/12 9:20:40

CEO必备:ROI决策能力与实战方法论

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
Lithe-IDEA:专为Spring Boot开发的轻量开源Java IDE 2026/9/12 9:20:40

Lithe-IDEA:专为Spring Boot开发的轻量开源Java IDE

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

阅读更多 →
阿里Agent开源组合拳详解:从框架到多智能体实战 2026/9/12 9:20:40

阿里Agent开源组合拳详解:从框架到多智能体实战

上周五下午,小群里有个兄弟甩了一条链接过来,标题就是"阿里开源了一个神级Agent项目",后面跟着一长串"这玩意儿能不能直接接到我们私域知识库里""需要怎么配置模型""跟LangChain比到底强在哪"。这几…

阅读更多 →
使用Python分析Spotify听歌数据:从API获取到可视化 2026/9/12 9:20:40

使用Python分析Spotify听歌数据:从API获取到可视化

1. 项目概述 Spotify作为全球最大的音乐流媒体平台之一,每天产生海量的用户听歌数据。这些数据不仅记录了我们的音乐偏好,还隐藏着许多有趣的个人习惯和趋势。通过Python分析这些数据,我们可以: 可视化自己的音乐品味演变 发现…

阅读更多 →
如何看懂 RD-Agent:它如何接走模型迭代的体力活 2026/9/12 9:17:39

如何看懂 RD-Agent:它如何接走模型迭代的体力活

如何看懂 RD-Agent:它如何接走模型迭代的体力活 【免费下载链接】RD-Agent Research and development (R&D) is crucial for the enhancement of industrial productivity, especially in the AI era, where the core aspects of R&D are mainly focused on…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞