欢迎光临
我们一直在努力

PaddleOCR源码运行正常,打包exe后报 The pipeline (OCR) does not exist 问题解决方案

一、问题背景

软件开发阶段:

python main.py

运行正常。

但是使用打包工具生成exe后:

main.exe

启动时报错。


二、错误现象

运行exe:

main.exe

出现异常:

File "paddlex\\inference\\pipelines\\__init__.py", line 96, in load_pipeline_config

Exception:
The pipeline (OCR) does not exist!
Please use a pipeline name or a config file path!

完整调用链:

main.exe

|
|
AlgorithmEngine

|
|
OCR_detect.py

|
|
PaddleOCR()

|
|
paddleocr._pipelines.ocr

|
|
paddlex.inference.pipelines

|
|
load_pipeline_config()

|
|
OCR pipeline不存在


三、问题表现特点

这个问题有一个明显特点:

源码运行正常

开发环境:

python main.py

可以正常:

ocr = PaddleOCR(
lang="ch"
)

OCR模型可以正常加载。


打包后失败

生成:

dist/
|
└── main.exe

运行:

main.exe

报:

The pipeline (OCR) does not exist!

说明:

Python环境中的PaddleOCR资源存在,但是exe打包后的运行环境缺少相关文件。


四、原因分析

1. PaddleOCR 3.x架构变化

PaddleOCR 3.x 不再只是:

python代码
+
模型文件

而是引入:

PaddleOCR

|
|
PaddleX Pipeline

|
|
pipeline配置

|
|
OCR模型配置

目录结构类似:

site-packages

|
|
paddleocr

|
|
paddlex

|
|
inference

|
|
pipelines

|
|
OCR配置文件


2. 打包工具无法自动识别动态资源

PyInstaller / Nuitka 在分析:

from paddleocr import PaddleOCR

时,只能发现:

.py文件
.pyd文件
.dll文件

但是不能自动发现:

.yaml
.json
.yml
模型配置
pipeline配置

这些动态加载资源。

运行时:

PaddleOCR()

内部执行:

load_pipeline_config()

|

|

寻找 OCR pipeline

|

|

文件不存在

|

|

报错


五、为什么开发环境没有问题?

因为开发环境直接使用:

Python环境

|
|
site-packages

|
|
paddlex

|
|
pipeline配置存在

而exe环境:

main.exe

|
|
打包目录

|
|
缺少paddlex资源文件

所以:

源码:

正常

exe:

失败


六、解决过程

方法一:确认资源是否被打包

查看:

dist目录

搜索:

paddlex

正常应该存在:

paddlex

|
├── inference

|
├── pipelines

|
└── configs

如果没有:

说明打包时遗漏。


七、解决方案

方案1:增加hidden-import

如果使用PyInstaller:

增加:

–hidden-import=paddleocr
–hidden-import=paddlex

例如:

pyinstaller main.py ^
–hidden-import=paddleocr ^
–hidden-import=paddlex

但是:

只解决Python模块问题。


方案2:添加数据文件(重点)

PaddleOCR依赖大量非Python文件。

需要添加:

paddleocr资源目录

paddlex资源目录

例如PyInstaller:

datas=[
(
"xxx/site-packages/paddlex",
"paddlex"
),

(
"xxx/site-packages/paddleocr",
"paddleocr"
)
]

加入:

.spec文件


八、Nuitka解决方案

如果使用Nuitka:

需要添加:

–include-package=paddleocr

–include-package=paddlex

同时加入数据文件:

–include-data-dir=

例如:

python -m nuitka main.py ^
–include-package=paddleocr ^
–include-package=paddlex ^
–include-data-dir=C:\\Users\\admin\\miniconda3\\envs\\pyside6\\Lib\\site-packages\\paddlex=paddlex


九、另一种推荐方案:固定PaddleOCR版本

如果项目用于工业部署:

建议不要直接使用:

PaddleOCR 3.x

因为:

  • 引入PaddleX
  • 依赖复杂
  • 打包困难

工业项目推荐:

paddleocr 2.7.3

paddlepaddle 2.6.1

调用方式:

ocr = PaddleOCR(
use_angle_cls=True,
lang="ch"
)

优点:

  • 依赖简单
  • 打包稳定
  • 部署方便

十、最终部署方案

项目最终环境:

Python 3.10

YOLO:

PyTorch GPU

OCR:

PaddleOCR 2.7.3

PaddlePaddle CPU

PySide6:

GUI

OpenCV:

图像处理

软件结构:

工业视觉软件

|

AlgorithmEngine

|

┌──────┴───────┐

YOLO OCR

GPU CPU


十一、总结

错误:

The pipeline (OCR) does not exist!

原因:

不是:

  • OCR模型错误
  • PaddleOCR安装错误
  • 代码错误

真正原因:

打包工具没有将PaddleOCR/PaddleX依赖的pipeline配置文件、资源文件一起打包。

解决:

  • 检查paddlex资源是否进入exe目录
  • 添加hidden-import
  • 添加data文件
  • 使用include-package/include-data-dir
  • 工业部署建议使用PaddleOCR 2.7.3降低复杂度
  • 开发环境正常:

    python main.py

    打包失败:

    main.exe

    本质区别:

    开发环境 = 完整Python环境

    exe环境 = 打包后的精简运行环境

    对于工业视觉软件:

    打包不仅需要代码,还需要所有动态加载资源。

    赞(0)
    未经允许不得转载:171主机测评 » PaddleOCR源码运行正常,打包exe后报 The pipeline (OCR) does not exist 问题解决方案
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址