让PaddleOCR和PaddlePaddle在Windows、Ubuntu和macOS中工作

介绍

OCR是我们都熟悉的基于人工智能视觉的标准功能之一。OCR现在无处不在,以至于它内置于手机操作系统中,我们几乎没有注意到。显然,我们需要将其添加到服务器CodeProject.AI 但这样做有点冒险。

有大量的OCR项目和软件包,在Mike Lud的带领下,我们选择了 PaddleOCRPaddleOCR基于出色的 PaddlePaddlePArallel分布式深LEarning)包。不幸的是,PaddleOCRPaddlePaddle对于工作来说可能是一个挑战,所以以下是我们所做的快速概述:

Python中获取PaddlePaddlePaddleOCR设置

  1. 我们忽略了文档。PaddleOCR显然支持CUDA 10.6,但PaddlePaddle(PaddleOCR需要)显然只支持CUDA 10.1。除非它声明它支持10.6。我们让它在CUDA 11.7上运行。对于试图针对英伟达的不断发展的项目来说,这种混乱是非常标准的。任何针对Nvidia的人都是勇敢的,或者他们知道如何将他们的系统锁定到一组特定的驱动程序、工具包和库。一团糟。
  2. 我们在谷歌翻译住了3天。PaddlePaddle由中国科技巨头百度开发并开源于2016年。由于它位于中国,因此论坛通常不是英语。
  3. 我们进行了实验、阅读、测试和调整,最终得到了以下用于安装Python包的设置矩阵:

OS

CPU

GPU

Windows

paddlepaddle==2.3.2
paddleocr>=2.0.1

--find-links https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html
paddlepaddle-gpu==2.3.2.post116

paddleocr>=2.0.1

Ubuntu

paddlepaddle==2.4.0rc0
paddleocr>=2.6.0.1

No success

macOS (Intel)

paddlepaddle==2.3.2
paddleocr>=2.0.1

Not supported

macOS (Arm64)

paddlepaddle==2.3.2
paddleocr>=2.0.1

Not supported

  1. 修补了PaddlePaddle代码中的一个丑陋的黑客,以使事情正常工作。

    在Python安装(或虚拟环境)的站点包文件夹下的paddle包中,你将找到一个文件夹数据集,并在该文件中 image.py。第#37行有一个FIXME,用于丑陋的黑客修复导入OpenCV时numpy的问题。他们通过启动一个新的Python解释器来导入OpenCV,并直接导入OpenCV:

 43      interpreter = sys.executable
 44      # Note(zhouwei): if use Python/C 'PyRun_SimpleString', 'sys.executable'
 45      # will be the C++ execubable on Windows
 46      if sys.platform == 'win32' and 'python.exe' not in interpreter:
 47          interpreter = sys.exec_prefix + os.sep + 'python.exe'
 48      import_cv2_proc = subprocess.Popen(
 49          [interpreter, "-c", "import cv2"],
 50          stdout=subprocess.PIPE,
 51          stderr=subprocess.PIPE,
 52          shell=True)
 53      out, err = import_cv2_proc.communicate()
 54      retcode = import_cv2_proc.poll()
 55      if retcode != 0:
 56          cv2 = None
 57      else:
 58          import cv2
 59  else:
 60      try:
 61          import cv2
 62      except ImportEr:...

这是一些创造性的问题解决。

问题是进程是使用Shell=FalsePopen旋转起来的(具体来说,他们只是让Shell采用默认值,这是False)。在上面的代码示例中,在第52行,您可以看到修复。对于WindowsUbuntu,您需要具有Shell=True,否则导入将失败。对于macOS Shell=False很好(英特尔和Arm64)。

显然,这个黑客只适用于Ubuntu,但它在所有操作系统的Paddle代码中,所以它需要为WindowsUbuntu修复。 

有了这个,我们就有了PaddleOCR运行。它在CPU上不是很快。半页文本需要10-15秒,但打开GPU200毫秒左右。完全可用且非常准确。

CodeProject.AI服务器的下一个版本将包括使用PaddleOCR安装OCR的选项。我们的项目是在12月的第一周。

后记:在WSLUbuntu中对PaddlePaddleGPU支持

到目前为止,这个已经打败了我们。在WSL上的Ubunut 22.04中的PaddleOCR(仅限CPU)工作正常。启用GPU不会正常工作。WSL的一个主要问题是你需要在WSL中安装CUDA,而不是依赖Windows CUDA驱动程序来做他们的事情。可以在这里找到一篇文章。安装CUDA后,通过打开Python终端并输入

import paddle
paddle.utils.run_check()

如果这一切都很好,那么您可以查看安装Paddle软件包,到目前为止,我们尽最大努力使用

-f https://paddlepaddle.org.cn/whl/stable/noavx.html
paddlepaddle-gpu==2.4.0rc0
paddleocr==2.6.0.1

这安装成功并且至少会启动(其他组合以六种不同的方式崩溃),但您最终会遇到黑客(上面)旨在解决的问题:即,由于导入OPenCV引起的numpy错误,您在尝试运行PaddleOCR时会出现段错误。该黑客旨在通过在生成的Python进程中导入OpenCV来解决此问题。这个过程在ubuntu 22.04中并不成功(至少对我们来说是这样),所以它回退到经典的“import cv2”,然后导致段错误。

https://www.codeproject.com/Tips/5347636/Getting-PaddleOCR-and-PaddlePaddle-to-work-in-Wind

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值