news 2026/8/24 23:56:13

源码编译PaddleOCR,4条路径搞定3个平台

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
源码编译PaddleOCR,4条路径搞定3个平台

源码编译PaddleOCR,4条路径搞定3个平台

【免费下载链接】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

/usr/bin/ld: CMakeFiles/ppocr.dir/src/ocr/system.cc.o: in function `SystemOCR::init()': undefined reference to `paddle::inference::Config::enable_gpu_memory_optimize' collect2: error: ld returned 1 exit status

一句话说明:PaddleOCR C++ 编译链接失败最经典的现场——链接器找不到 PaddlePaddle 推理库的符号。

你在做 PaddleOCR 编译时多半踩过它:x86 服务器上一切顺利,换到 ARM 目标机交叉编译,undefined reference 立刻冒出来。多数情况下,锅不在代码,而在依赖没指对地方。

PaddleOCR 源码构建的完整流程,我们按你实际动手的先后顺序走一遍:先把工具链备齐,再分别走 Python 包和 C++ 推理库两条并行编译路径,然后是 ARM、Windows 上的 PaddleOCR 交叉编译坑,最后是性能调优和 Docker、CI 自动化。走完这套,Linux、Windows、ARM 三个平台你都能独立交付。

6条命令把依赖装齐并验证到位

编译这件事,第一步永远是备料。我们全文用做菜来打比方:依赖是食材,CMakeLists 是菜谱,make 是开火,链接是装盘。食材缺一味,菜谱再全也救不了你。

一键装齐:3个系统包与2个依赖路径

Ubuntu 20.04 上,最小工具链就是下面这组:

sudo apt-get update sudo apt-get install -y build-essential cmake git \ libopencv-dev protobuf-compiler # 推理库解压后,把两个变量指对位置 export PADDLE_LIB=/opt/paddle_inference/paddle export OPENCV_DIR=/usr/local/opencv4

一句话说明:一条命令装好 GCC、CMake、Git、OpenCV 和 Protobuf 开发包,再把 PADDLE_LIB 和 OPENCV_DIR 两个路径指到位。

版本底线记住几个数:CMake 3.14 以上(deploy/cpp_infer/CMakeLists.txt开头就声明了这个下限)、GCC 7.5 以上、Python 3.8 以上。C++ 代码是 C++11 标准,编译器不用追新;OpenCV 建议上 4.x,仓库自带的官方构建脚本用的是 4.7.0。

PADDLE_LIB 指向的目录里必须有paddle/includepaddle/libthird_party三块,少一块后面都要出幺蛾子。OPENCV_DIR 在 Linux 上要指向安装根目录——菜谱里找的是${OPENCV_DIR}/lib64/cmake/opencv4。直指 lib64 的话,configure 阶段就会报找不到 OpenCV。

用4行脚本验证推理库

备料完别急着开火,先确认食材是真货:

for f in ${PADDLE_LIB}/paddle/lib/libpaddle_inference.so \ ${OPENCV_DIR}/lib/libopencv_core.so; do [ -f "$f" ] && echo "OK $f" || { echo "MISSING $f"; exit 1; } done

一句话说明:检查两个最关键的 .so 是否存在,缺一个就地报错退出,省掉后面 20 分钟的 make。

脚本通过,备料阶段结束。后面 C++ 编译卡住时,八成要回到这一步复查——头文件找不到、符号未定义,十有八九是路径问题。

两条并行编译路径,一个产wheel,一个产可执行文件

依赖就位后,两条路并行开工:Python 包装出 pip 可装的 paddleocr,C++ 路径产出一个叫 ppocr 的独立可执行文件。

Python路径:pip -e装可编辑,wheel出固定版

Python 包是标准 setuptools 构建,源码结构一眼看清:paddleocr/是推理入口,ppocr/管训练,ppstructure/管文档结构分析。

git clone https://gitcode.com/paddlepaddle/PaddleOCR cd PaddleOCR python -m pip install -e .

一句话说明:克隆仓库后以可编辑模式安装,改了源码不用重装就生效,适合开发调试。

想要"固定版"而不是开发环境,换成 wheel 构建:

python -m pip wheel . -w dist/ python -m pip install dist/paddleocr-*.whl python -m pip install -e ".[doc-parser]" # 按需加功能模块 python -m pip install -e ".[all]" # 或者全都要

一句话说明:从源码打 wheel 再安装,相当于把做好的菜密封打包;方括号 extras 决定装哪些菜。

两个细节。其一,pyproject.toml要求 setuptools 72.1.0、wheel、setuptools_scm,版本号由 setuptools_scm 从 git tag 推导——没有 tag 的分支打出来的 wheel 版本号会很奇怪,发版记得 checkout 带 tag 的提交。其二,功能模块按需安装:doc-parserietransall四组 extras,装什么用什么,别把整个厨房端上桌。

要训练的话,还要装requirements.txt里那批(shapely、pyclipper、lmdb、opencv-python、rapidfuzz 等),pip install -r requirements.txt一条搞定。

C++路径:CMake配置一次,make -j产出ppocr

C++ 路径的入口是deploy/cpp_infer/目录,菜谱就是它下面的 CMakeLists.txt。PaddleOCR CMake 配置说白了就是传两个路径、拨四个开关:

cd deploy/cpp_infer mkdir -p build && cd build cmake .. \ -DPADDLE_LIB=${PADDLE_LIB} \ -DOPENCV_DIR=${OPENCV_DIR} \ -DWITH_GPU=OFF -DWITH_MKL=ON \ -DCMAKE_BUILD_TYPE=Release make -j$(nproc) ./ppocr --help

一句话说明:把两个依赖路径传给 CMake,选 CPU 版加 MKL,然后并行编译,产物是 build 目录下的 ppocr。

PADDLE_LIB 或 OPENCV_DIR 少传一个,CMake 直接 FATAL_ERROR 停下。这是好事,菜谱明确告诉你缺什么,而不是编译到一半才炸。

还有一个容易忽略的点:configure 阶段会自动从官方镜像下载 abseil-cpp、clipper、nlohmann 三个第三方包并解压到 third_party 下。所以跑 cmake 的机器必须能上网;内网环境要提前把这三个 tgz 手动放进对应目录。

4个CMake开关,分别怎么拨

菜谱前十几行就是全部开关:WITH_MKL、WITH_GPU、WITH_STATIC_LIB、USE_FREETYPE,没有第 5 个。

  • WITH_MKL,默认 ON。走 MKL;拨 OFF 后菜谱自动改链 OpenBLAS 静态库。ARM 上通常拨 OFF。
  • WITH_GPU,默认 OFF。拨 ON 需要额外给 CUDA_LIB,Linux 上还要 CUDNN_LIB,然后链接 cudart 和 cudnn。
  • WITH_STATIC_LIB,默认 ON。静态链推理库,产物胖但部署省心;拨 OFF 用动态库,产物小、运行时要带齐 .so。
  • USE_FREETYPE,默认 OFF。拨 ON 要求你的 OpenCV 带 freetype 模块,否则直接 FATAL_ERROR 拦下你。

Windows 分支还藏了个自动动作:构建后把 mklml.dll、libiomp5md.dll、mkldnn.dll 拷到 build 目录。部署时连它们一起打包带走,别漏。

跨ARM和Windows平台,你会踩的3个坑

同一份菜谱,换个灶台味道就不一样。非 x86-Linux 平台的坑,基本集中在"工具链指哪"和"运行库带哪"两件事上。

ARM交叉编译的sysroot怎么指

PaddleOCR ARM 编译没有现成的工具链文件,得自己写。关键是让 CMake 知道"编译器给 ARM 干活,头文件和库都在 sysroot 里找":

set(CMAKE_SYSTEM_NAME Linux) set(CMAKE_SYSTEM_PROCESSOR arm) set(CMAKE_SYSROOT /opt/aarch64/sysroot) set(CMAKE_C_COMPILER aarch64-linux-gnu-gcc) set(CMAKE

【免费下载链接】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),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/24 23:54:25

微软技术面试模拟:从LRU缓存到系统设计的深度剖析

1. 面试模拟的价值与微软面试的独特之处最近在准备技术面试的朋友,尤其是目标瞄准微软这类顶级科技公司的,估计没少刷LeetCode,也没少看各种“八股文”。但说实话,光刷题和背知识点,离真正通过微软的面试还有一段距离。…

作者头像 李华
网站建设 2026/8/24 23:53:53

MMPose 姿态估计工具箱指南:如何 15 分钟跑通首次推理

MMPose 姿态估计工具箱指南:如何 15 分钟跑通首次推理 【免费下载链接】mmpose OpenMMLab Pose Estimation Toolbox and Benchmark. 项目地址: https://gitcode.com/GitHub_Trending/mm/mmpose 假设任务是这样:一段跟练视频,需要逐帧输…

作者头像 李华
网站建设 2026/8/24 23:51:13

SolidWorks_仿真分析1_仿真分析全景概览

仿真分析全景概览从“画图工”到“分析工程师”,SolidWorks仿真体系如何重塑产品研发流程?摘要 在现代制造业数字化转型的浪潮中,仿真分析已不再是高高在上的“阳春白雪”,而是成为每一位机械工程师手中不可或缺的利器。本文将带你…

作者头像 李华
网站建设 2026/8/24 23:50:00

2026年度10款降AI率软件红黑榜!优缺点无死角剖析,达标率对标顶级水准

2026 年,AI 写稿、AI 生成内容已经成了学生党、打工人和内容创作者的日常,但随之而来的「AI 率过高」问题也成了新的麻烦:论文查重 AI 率超标、职场报告被判定 AI 生成、自媒体内容过不了平台原创审核… 为了帮大家解决这个痛点,我…

作者头像 李华
网站建设 2026/8/24 23:48:53

LLM智能体开发:从贪婪策略到迭代优化器的演进之路

1. 项目概述:贪婪为何成为智能体的默认强策略最近在折腾各种LLM智能体框架时,我反复遇到一个现象:无论项目需求多复杂,团队在初期方案选型时,总会不自觉地先尝试一种“贪婪”的策略。这并非偷懒,而是一种经…

作者头像 李华
网站建设 2026/8/24 23:47:16

IP-Adapter 轻量图像生成:5 步从零到出图,效果糊了调什么

IP-Adapter 轻量图像生成:5 步从零到出图,效果糊了调什么 【免费下载链接】ip-adapter 项目地址: https://ai.gitcode.com/hf_mirrors/MindSpore-Lab/ip-adapter 手里有一张角色设定图,想换个场景、换个姿态,但不想重画整…

作者头像 李华