Windows系统下使用pyinstaller打包PaddleOCR中表格识别PP-Structure

Windows系统下使用pyinstaller打包PaddleOCR中表格识别PP-Structure

  • 一、系统环境及PP-Structure简述
  • 二、安装Python环境与PP-Structure
  • 三、使用pyinstaller打包为exe文件
  • 四、打包好的文件分享
  • 参考文档

一、系统环境及PP-Structure简述

本文使用操作系统为Windows10 专业版,使用Miniconda3搭建环境,安装PaddleOCR中的PP-Structure。
对PP-Structure进行一个简要的介绍,该工具包为百度飞浆团队开发出的一款开源工具,用于表格OCR识别。PP-Structure首先使用神经网络对图片中内容进行表面分析,识别出表格区域,然后对表格内容进行OCR文字识别,最后将表格导出为Excel文件。以下内容摘自GitHub主页介绍
6.1 版面分析+表格识别
在这里插入图片描述
在PP-Structure中,图片会先经由Layout-Parser进行版面分析,在版面分析中,会对图片里的区域进行分类,包括文字、标题、图片、列表和表格5类。对于前4类区域,直接使用PP-OCR完成对应区域文字检测与识别。对于表格类区域,经过表格结构化处理后,表格图片转换为相同表格样式的Excel文件。
6.1.1 版面分析
版面分析对文档数据进行区域分类,其中包括版面分析工具的Python脚本使用、提取指定类别检测框、性能指标以及自定义训练版面分析模型,详细内容可以参考文档。
6.1.2 表格识别
表格识别将表格图片转换为excel文档,其中包含对于表格文本的检测和识别以及对于表格结构和单元格坐标的预测,详细说明参考文档。
下面进行安装打包过程介绍。

二、安装Python环境与PP-Structure

首先以管理员身份打开Conda,创建一个单独环境,选择Python版本为3.7.10,命令如下:

conda create -n paddleocr python=3.7.10

    
      
      
      
      
  • 1

环境安装完成后,激活该环境,然后安装paddlepaddle,命令如下:

python -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
#本文选择的paddle版本为cpu版本,如果配有独显最好选择gpu版本,具体需要看应用环境是否有独显

    
      
      
      
      
  • 1
  • 2

然后安装PaddleOCR,PP-Structure集成在PaddleOCR中,所以不需要单独安装:

pip install "paddleocr>=2.3.0.2"
pip3 install -U https://paddleocr.bj.bcebos.com/whl/layoutparser-0.0.0-py3-none-any.whl

    
      
      
      
      
  • 1
  • 2

安装完成后,使用如下命令进行测试,看是否安装成功:

paddleocr --image_dir=./00018069.jpg --type=structure

    
      
      
      
      
  • 1

“./00018069.jpg”需替换为你要测试的图片路径,如果运行成功,会在图片同文件夹下生成一个output文件夹,里面有一个图片名命名的文件夹,里面就是识别生成的Excel文件,下面四张图为测试结果:
在这里插入图片描述
测试图片
在这里插入图片描述
终端输出
在这里插入图片描述
输出文件

在这里插入图片描述
识别Excel内容

三、使用pyinstaller打包为exe文件

打包为exe文件的主要目的是将表格OCR识别功能移植到其他没有安装python的Windows系统下,移植Windows系统下方法除打包外还有C++编译方法。
官网介绍的C++编译方法是针对PaddleOCR,具体编译过程见本博客之前发布的Windows下使用PaddleOCR识别。官网对PP-Structure的编译方法并未给出,是否可以直接使用PaddleOCR的编译方法,本文并未做过测试。
以下为打包过程。
首先安装pyinstaller,命令如下:

pip install pyinstaller
#如下载速度太慢,可以手动添加清华源,即命令变为pip install pyinstaller -i https://pypi.tuna.tsinghua.edu.cn/simple

    
      
      
      
      
  • 1
  • 2

然后创建一个python脚本文件,将图片路径及导出路径以命令行参数的形式传入,脚本文件如下:

import os
import cv2
import sys
from paddleocr import PPStructure,draw_structure_result,save_structure_res
table_engine = PPStructure(show_log=False)
save_folder = sys.argv[1]
img_path = sys.argv[2]
img = cv2.imread(img_path)
result = table_engine(img)
save_structure_res(result, save_folder,os.path.basename(img_path).split('.')[0])

    
      
      
      
      
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

在Conda中进入脚本文件路径下,然后下载一个图标文件作为exe文件图标,打包命令如下:

pyinstaller predict.py -D -w -i=favicon.ico

    
      
      
      
      
  • 1

-D参数为打包为一个文件夹,而不是单个执行文件,运行速度会更快。这里选择-D参数不仅是为了提高运行速度,而是为了后续添加文件。-w参数为运行时不显示黑色终端窗口,-i参数指定图标文件,predict.py为脚本文件名,favicon.ico为图标文件名。
在这里插入图片描述

正常情况下会顺利完成打包,在当前文件夹下生成build、dist两个文件夹和一个.spec文件,打开dist文件夹,找到与脚本文件同名的exe可执行文件,在终端下运行如下命令:

predict.exe ./output/table 00018069.png

    
      
      
      
      
  • 1

正常情况下会报出一些错误,大部分都是缺少文件导致的,所以解决方法都是同一种,就是去到环境安装根目录,例如本文环境名为paddleocr,安装目录为C:\ProgramData\Miniconda3\envs\paddleocr,从中复制文件到exe文件夹下,进行报错解除。
首先为遇到的第一个错误,DLL load failed:
在这里插入图片描述
在这里插入图片描述
解决方法:找到C:\ProgramData\Miniconda3\envs\paddleocr\Lib\site-packages\paddle\libs文件夹下所有dll文件复制到exe文件夹下,然后再进行测试。
运行后报出第二个错误,No module named framework_pb2:
在这里插入图片描述
根据错误信息可看出,paddle\fuild\proto文件夹存在问题,所以找到C:\ProgramData\Miniconda3\envs\paddleocr\Lib\site-packages\paddle\fluid文件夹,将该文件夹中内容整个复制到exe文件夹下\paddle\fluid,然后运行测试。
然后会依次报出一系列错误,都是缺乏文件导致:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上述错误一一解决后,将dist文件夹复制到另一台计算机,经测试运行正常。需要注意的是首次运行,程序会自动下载模型文件,如果计算机不能够联网,需要将模型文件夹复制到主目录,即C盘用户名目录下,模型文件夹有两个,分别为.paddledet与.paddleocr。

四、打包好的文件分享

最后给出打包好的dist压缩包网盘链接:
链接: https://pan.baidu.com/s/10Add_aPdqNwHHs0f0JhXHg
提取码:akaa

参考文档

PP-Structure简介
PP-Structure 快速开始
Python PyInstaller安装和使用教程(详解版)
pyinstaller paddleOCR 打包成功
paddleocr打包exe,10大报错的解决。。。。成功打包运行
pyinstaller 打包exe后执行报错 #2885
paddleocr infer_rec打包失败framework_pb2
Pyinstaller在Ubuntu中打包项目,运行可执行文件时ModuleNotFoundError: No module named ‘framework_pb2’
python subprocess 路径错误解决
paddleocr打包exe,10大报错的解决。。。。成功打包运行
python打包含有参数传递的exe程序
AttributeError: module layoutparser has no attribute PaddleDetectionLayoutModel #107
Pyinstaller打包过程生成的.spec文件
AssertionError inside of ensure_local_distutils when building a PyInstaller exe using setuptools/distutils
解决 OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.
关于OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.错误解决方法

你可能感兴趣的:(Paddle,windows,python,开发语言)