飞桨PaddleOCR的安装和使用
安装环境
机器环境:Mac M1芯片 ARM64架构
安装时间:2023-01-17
安装版本:PaddleOCR 2.6
安装参考的主文档:github.com/PaddlePaddl…
PaddleOCR快速开始:github.com/PaddlePaddl…
注意:由于Mac M1机器的原因,按部就班的按照文档中的命令行使用模式一直不能成功,报如下的错误:
通过如下命令,安装PaddleOCR whl包
pip install "paddleocr>=2.0.1" # 推荐使用2.0.1+版本
然后执行命令行
paddleocr --image_dir ./imgs/11.jpg --use_angle_cls true --use_gpu false
报错如下:
ERROR: flag 'flagfile' was defined more than once (in files '/Users/paddle/xly/workspace/f2bafd01-b80e-4ac8-972c-1652775b2e51/Paddle/build/third_party/gflags/src/extern_gflags/src/gflags.cc' and '/tmp/gflags-20211021-3963-1mi18ai/gflags-2.2.2/src/gflags.cc').
没办法,后来我通过直接git下载paddleOCR的源码直接本地编译才通过。
据说Mac Intel X86架构的芯片执行是没有上述问题的。可能和我的机器是MAC M1 ARM64架构芯片有关
安装步骤
1、使用Anaconda搭建Python环境
- Anaconda下载: mirrors.tuna.tsinghua.edu.cn/anaconda/ar…
我选择的版本:Anaconda3-2022.10-MacOSX-arm64.pkg
下载完毕后,双击.pkg文件按照默认设置安装即可
- 创建并设置conda环境
由于我使用的是zsh,所以直接在终端打开并编辑修改
vim ~/.zshrc
在~/.zshrc中将conda添加为环境变量
export PATH="~/opt/anaconda3/bin:$PATH"
修改完成后,直接在终端中输入以下命令,生效环境变量
source ~/.zshrc
然后在终端输入
conda info --envs
若能够显示出来当前有base环境,则conda已加入环境变量,like如下
并且终端的输入框前方,也出现了(base)相关的字段,说明现在conda已经默认创建了base环境
- 创建新的conda环境
注意:paddleOCR的版本和python的版本息息相关,如果低版本的python使用高版本的paddleOCR,有可能出现本地编译不通过的问题。
python3.6、python3.7 版本从 release/1.2 分支开始支持, python3.8 版本从 release/1.8 分支开始支持, python3.9 版本从 release/2.1 分支开始支持, python3.10 版本从 release/2.3 分支开始支持
所以当前最新的PaddleOCR版本为2.6版本,那么问题来了需要选择python3的哪个版本呢?
之前本地机器的python版本比较低,低版本的python可能会使用依赖的numpy库已经废弃的特性,导致编译不过。直接升级到3.10版本,但是升级到python 3.10版本后在后面的PPOCRLabel手动标注的时候会出现闪退的情况,具体是因为python3.10对于PyQt5的兼容性不太好。所以最终又回退到选择了python3.9的版本。
所以需要创建conda环境,并且python版本为3.9版本
# 在命令行输入以下命令,创建名为paddle_env_python_3.9 的环境
# 此处为加速下载,使用清华源
conda create --name paddle_env_python_3.9 python=3.9 --channel https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
创建新conda环境后,激活,输入命令如下:
# 激活paddle_env_python_3.9环境
conda activate paddle_env_python_3.9
# 查看当前python的位置
where python
# python版本号
python --version
2、安装paddlepaddle
安装参考文档www.paddlepaddle.org.cn/install/qui…
由于已经安装好了conda环境,则可以直接使用conda方式安装
但是我的环境在使用conda方式安装的时候总是安装不上,所以我使用了pip的安装方式。
接着上面在conda的paddle_env_python_3.9环境下,执行如下命令
python -m pip install paddlepaddle==2.4.1 -i https://pypi.tuna.tsinghua.edu.cn/simple
安装好后,验证是否将paddle安装好的方式
3、安装PaddleOCR
OK,paddle基础包安装好后,我们就可以开始安装PaddleOCR了
首先下载源码,并安装相关的依赖,依次执行如下代码:
git clone https://github.com/PaddlePaddle/PaddleOCR.git
cd PaddleOCR
pip install -r requirements.txt
如果依赖库安装没问题,则可以安装PeddleOCR了,执行如下命令:
cd PaddleOCR
python setup.py install
在终端输入Python3,进入Python解释器,输入import paddleocr 如果成功引入包,说明您已成功安装。
4、安装PPOCRLabel
安装PPOCRLabel标注工具最复杂的还是Qt的安装,Mac M1的芯片在安装标注工具的时候。会出现长时间等待的状况
在Preparing metadata (pyproject.toml)的状态下出现假死的情况
查找了网上如何在Mac M1芯片的机器上安装pyqt5的文章,最终解决。
- 需要首先通过homebrew来安装Pyqt5
brew install pyqt5
随后在zsh中追加到PATH的环境变量
/opt/homebrew/opt/qt@5/bin
/opt/homebrew/opt/pyqt@5/bin
如下:
然后查看如下目录,看到pyqt5的库文件,都是以info结尾
/opt/homebrew/opt/pyqt@5/lib/python3.9/site-packages
- 将pyqt的库文件复制到conda的python的环境中
我的Python环境是使用Anaconda搭建,可以切换到自己使用的虚拟环境目录下的site-packages目录
我使用的虚拟环境为paddle_env_python_3.9
所以其对应的site-packages目录为
/Users/shaoshuai.shao/opt/anaconda3/envs/paddle_env_python_3.10/lib/python3.10/site-packages
接着就是用cp命令将前面homebrew安装好的pyqt5文件拷贝过去即可。
copy完成后,既可以通过python3的解释器来判断pyqt5是否安装成功
如下图即安装成功。
PyQt5安装成功后,我们就可以直接执行下载PPOCRLabel对应的依赖了
cd PPOCRLabel
pip install -r requirements.txt
安装好所有依赖后,就可以启动PPOCRLabel了
python PPOCRLabel.py --lang ch
标注的界面就弹出来了!安装成功
注意:注意:在之前尝试使用Python3.10环境下,启动标注界面后,在图片上使用手动矩形标注的时候,标注界面会闪退报错,报错界面如下
仔细研究下报错信息,还是在调用PyQt5的方法时候,方法的入参格式是int,但是传进去的参数是float类型,导致报错闪退。
网上查询了一些信息,github.com/spyder-ide/…
应该是Python3.10和PyQt5存在一些不兼容的地方。
还是需要将Python3.10降版本到3.9即可!
5、使用PaddleOCR
参考文档中PDF的OCR扫描文档:github.com/PaddlePaddl…
from paddleocr import PaddleOCR, draw_ocr
# Paddleocr supports Chinese, English, French, German, Korean and Japanese.
# You can set the parameter `lang` as `ch`, `en`, `fr`, `german`, `korean`, `japan`
# to switch the language model in order.
ocr = PaddleOCR(use_angle_cls=True, lang="ch", page_num=2) # need to run only once to download and load model into memory
img_path = './xxx.pdf'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
res = result[idx]
for line in res:
print(line)
# draw result
import fitz
from PIL import Image
import cv2
import numpy as np
imgs = []
with fitz.open(img_path) as pdf:
for pg in range(0, pdf.pageCount):
page = pdf[pg]
mat = fitz.Matrix(2, 2)
pm = page.getPixmap(matrix=mat, alpha=False)
# if width or height > 2000 pixels, don't enlarge the image
if pm.width > 2000 or pm.height > 2000:
pm = page.getPixmap(matrix=fitz.Matrix(1, 1), alpha=False)
img = Image.frombytes("RGB", [pm.width, pm.height], pm.samples)
img = cv2.cvtColor(np.array(img), cv2.COLOR_RGB2BGR)
imgs.append(img)
for idx in range(len(result)):
res = result[idx]
image = imgs[idx]
boxes = [line[0] for line in res]
txts = [line[1][0] for line in res]
scores = [line[1][1] for line in res]
im_show = draw_ocr(image, boxes, txts, scores, font_path='doc/fonts/simfang.ttf')
im_show = Image.fromarray(im_show)
im_show.save('result_page_{}.jpg'.format(idx))
直接使用python3编译器编译的时候报错如下:
报错指出:File "/Users/shaoshuai.shao/opt/anaconda3/envs/paddle_env_python_3.10/lib/python3.10/site-packages/paddleocr-2.6.1.0-py3.10.egg/paddleocr/ppocr/utils/utility.py", line 96, in check_and_read pm = page.getPixmap(matrix=mat, alpha=False)
使用的getPixmap方法不对,是不是使用get_pixmap。
查看网上的原因:paddleOCR依赖的PyMuPDF库,在1.20.2版本将方法命名从驼峰方式切换成了下划线的方式。
我想到的解决方案就是修改paddleOCR的源码,然后再重新编译即可。
修改paddleocr/ppocr/utils/utility.py的代码,将所有方法的驼峰切换为下划线的调用
OK,然后再重新编译下PaddleOCR,进入PaddleOCR源码的主目录
cd PaddleOCR
python setup.py install
这样就可以执行OCR PDF了!!!
引用
How to Fix AttributeError: module 'numpy' has no attribute 'float'
MacOS安装PPOCRLabel+PaddleOCR+PaddlePddle_高卧且加餐的博客-CSDN博客
How can I run pyqt5 on my Mac with M1chip (ppc64el architecture)?
TypeError when displaying indent guides in Python 3.10 · Issue #17159 · spyder-ide/spyder