图片转文字
PaddleOCR
https://github.com/PaddlePaddle/PaddleOCR
模型下载
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.7/doc/doc_ch/models_list.md
这个是infer是模型,后面的只是数据集
windows安装
本次实验环境
python
- 3.10.6
pip
- 23.2.1
先准备虚拟环境,然后升级虚拟环境的pip,最后拉包
虚拟环境
mkdir OCR cd .\OCR\ python -m venv test-env .\test-env\Scripts\activate python.exe -m pip install --upgrade pip
方案一:gpu版
python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
方案二:cpu版
python3 -m pip install paddlepaddle -i https://mirror.baidu.com/pypi/simple
安装PaddleOCR whl包
pip install "paddleocr>=2.0.1"
模型更换
如果第一次直接运行的话,会在C盘.paddleocr目录下的模型文件,可能因为中文路径报错,
所以自己需要更换模型路径保证纯英文或下载新模型,同时在utils.py设置路径
注意缩进!!!!注意文件路径是否需要防止转义
def create_predictor(args, mode, logger): if mode == "det": model_dir = args.det_model_dir elif mode == 'cls': model_dir = args.cls_model_dir elif mode == 'rec': model_dir = args.rec_model_dir elif mode == 'table': model_dir = args.table_model_dir elif mode == 'ser': model_dir = args.ser_model_dir elif mode == 're': model_dir = args.re_model_dir elif mode == "sr": model_dir = args.sr_model_dir elif mode == 'layout': model_dir = args.layout_model_dir else: model_dir = args.e2e_model_dir
改成你的路径,注意缩进和防止转义---加个\或者全改为/
def create_predictor(args, mode, logger): if mode == "det": model_dir = 'F:\PaddleOCR\inference\det\ch_PP-OCRv4_det_infer' elif mode == 'cls': model_dir = 'F:\PaddleOCR\inference\cls\ch_ppocr_mobile_v2.0_cls_slim_infer' elif mode == 'rec': model_dir = 'F:\PaddleOCR\inference\\rec\ch_PP-OCRv4_rec_infer' elif mode == 'table': model_dir = args.table_model_dir
不使用gpu测试---成功
开始使用这个--image_dir 后面是图片路径我这里是下载的官方测试图片https://paddleocr.bj.bcebos.com/dygraph_v2.1/ppocr_img.zip
paddleocr --image_dir .\ppocr_img\imgs\1.jpg --use_angle_cls true --use_gpu false
使用gpu测试---需要CUDA
paddleocr --image_dir .\ppocr_img\imgs\1.jpg --use_angle_cls true --use_gpu true
直接使用会报错提示
第一步查看支持的CUDA版本
nvidia-smi
第二部安装CUDA
linux安装
虚拟环境
创建并进入虚拟环境
python3 -m venv test-env source test-env/bin/activate
查看python版本和pip版本
python -V pip -V
升级pip到最新
pip install --upgrade pip
(test-env) [root@iZbp1c400avts4bhhmibppZ OCR]# pip install --upgrade pip Looking in indexes: http://mirrors.cloud.aliyuncs.com/pypi/simple/ Requirement already satisfied: pip in ./test-env/lib/python3.10/site-packages (23.0.1) Collecting pip Downloading http://mirrors.cloud.aliyuncs.com/pypi/packages/50/c2/e06851e8cc28dcad7c155f4753da8833ac06a5c704c109313b8d5a62968a/pip-23.2.1-py3-none-any.whl (2.1 MB) ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.1/2.1 MB 24.8 MB/s eta 0:00:00 Installing collected packages: pip Attempting uninstall: pip Found existing installation: pip 23.0.1 Uninstalling pip-23.0.1: Successfully uninstalled pip-23.0.1 Successfully installed pip-23.2.1
这个是退出虚拟环境的命令
deactivate
安装PaddlePaddle
python3 -m pip install paddlepaddle-gpu -i https://mirror.baidu.com/pypi/simple
安装PaddleOCR whl包
pip install "paddleocr>=2.0.1"
测试运行
windows如果第一次直接运行的话,会在C盘.paddleocr目录下的模型文件,可能因为中文路径报错,
linux是可以直接运行的,看到Successfully installed就是成功了,直接运行测试
下载测试图片
wget https://paddleocr.bj.bcebos.com/dygraph_v2.1/ppocr_img.zip unzip ppocr_img.zip
(test-env) [root@iZbp1c400avts4bhhmibppZ OCR]# ls __MACOSX ppocr_img ppocr_img.zip test-env
paddleocr --image_dir ppocr_img/imgs/1.jpg --use_angle_cls true --use_gpu false
我这里经历了好多包的缺少,下面的报错总结里都有
报错总结
- utils修改路径时缩进是否正确,是否有\r需要防止转移\\r
https://github.com/PaddlePaddle/PaddleOCR/issues/1964
RuntimeError: (PreconditionNotMet) The third-party dynamic library (cudnn64_8.dll) that Paddle depends on is not configured correctly. (error code is 126)
Suggestions:
1. Check if the third-party dynamic library (e.g. CUDA, CUDNN) is installed correctly and its version is matched with paddlepaddle you installed.
2. Configure third-party dynamic library environment variables as follows:
- Linux: set LD_LIBRARY_PATH by `export LD_LIBRARY_PATH=...`
- Windows: set PATH by `set PATH=XXX; (at ..\paddle\phi\backends\dynload\dynamic_loader.cc:301)
Original error was: /lib64/libc.so.6: version `GLIBC_2.18' not found (required by /lib64/libstdc++.so.6)
查看已有版本
strings /lib64/libc.so.6 | grep ^GLIBC
安装需要的版本
mkdir /opt/gccInstall/glibc cd /opt/gccInstall/glibc wget https://mirrors.tuna.tsinghua.edu.cn/gnu/glibc/glibc-2.18.tar.gz tar -zxvf glibc-2.18.tar.gz cd glibc-2.18 mkdir build cd build/ ../configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin make -j 8 make install
GLIBCXX_3.4.20' not found
ImportError: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.20' not found (required by /opt/gitCode/OCR/test-env/lib/python3.10/site-packages/paddle/fluid/libpaddle.so
https://github.com/PaddlePaddle/Paddle/issues/48243
原因是glibc版本较低,检查动态库发现没有3.4.20(你报错的版本)
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
(test-env) [root@iZbp1c400avts4bhhmibppZ OCR]# strings /usr/lib64/libstdc++.so.6 | grep GLIBC GLIBCXX_3.4 GLIBCXX_3.4.1 GLIBCXX_3.4.2 GLIBCXX_3.4.3 GLIBCXX_3.4.4 GLIBCXX_3.4.5 GLIBCXX_3.4.6 GLIBCXX_3.4.7 GLIBCXX_3.4.8 GLIBCXX_3.4.9 GLIBCXX_3.4.10 GLIBCXX_3.4.11 GLIBCXX_3.4.12 GLIBCXX_3.4.13 GLIBCXX_3.4.14 GLIBCXX_3.4.15 GLIBCXX_3.4.16 GLIBCXX_3.4.17 GLIBCXX_3.4.18 GLIBCXX_3.4.19 GLIBC_2.3 GLIBC_2.2.5 GLIBC_2.14 GLIBC_2.4 GLIBC_2.3.2 GLIBCXX_DEBUG_MESSAGE_LENGTH
方法1成功,看你本地有没有高版本
find / -name "libstdc++.so*"
查看你的原配置
cd /usr/lib64/ ll | grep libstdc
备份旧的,根据自己版本,我这里旧的是19,新的是25
mv libstdc++.so.6.0.19 libstdc++.so.6.0.19.bak
拷贝新的到/usr/lib64/
cp /var/lib/docker/overlay2/d71ee69b3a617c5c534da56ac2c7ebda8551b1bd3b5f47cb3b3ba55d8850dbe8/diff/usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.25 /usr/lib64/
进行软路由,-s是增加符号链接,f是强制,如果存在就覆盖
ln -sf libstdc++.so.6.0.25 libstdc++.so.6
查看
strings /usr/lib64/libstdc++.so.6 | grep GLIBC
方法2
你可以看下你的gcc版本,一般很多linux系统默认的gcc版本为4.8.5
(test-env) [root@iZbp1c400avts4bhhmibppZ OCR]# gcc --version gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-44) Copyright (C) 2015 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
安装新版gcc
这是清华源的镜像https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/,官方可能有点慢
cd /opt mkdir gccInstall cd /opt/gccInstall wget https://mirrors.tuna.tsinghua.edu.cn/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gz
tar -zxvf gcc-10.1.0.tar.gz cd gcc-10.1.0
下载编译所需依赖项,这个和网络有关,可能非常慢
./contrib/download_prerequisites
注意这里可能报错
这个是因为缺少一个包(组件),这里安装一个包就可以解决了,yum自动下载并安装
yum -y install bzip2
然后重新执行命令
./contrib/download_prerequisites
成功
然后是编译安装
# 创建安装的文件夹路径 cd .. mkdir gcc101 cd gcc-10.1.0 # --prefix=你的安装路径 ./configure --prefix=/opt/gccInstall/gcc101 -enable-checking=release -enable-languages=c,c++ -disable-multilib
然后编译
make -j4
编译时也可能有交换空间不足的报错
解决办法---新增交换空间(这里是之前没有交换空间的情况)
新增2G交换空间
sudo mkdir swapfile cd /swapfile sudo dd if=/dev/zero of=swap bs=1024 count=2000000 sudo mkswap -f swap sudo swapon swap
然后清理后编译
make clean ./configure --prefix=/opt/gccInstall/gcc101 -enable-checking=release -enable-languages=c,c++ -disable-multilib make -j4
安装
make install
ImportError: libGL.so.1: cannot open shared object file: No such file or directory
yum install mesa-libGL
ValueError: (InvalidArgument) Device id must be less than GPU count, but received id is: 0. GPU count is: 0.
[Hint: Expected id < GetGPUDeviceCount(), but received id:0 >= GetGPUDeviceCount():0.] (at ../paddle/phi/backends/gpu/cuda/cuda_info.cc:250)