百度飞桨PaddleOCR的安装与使用

百度飞桨PaddleOCR的安装与使用

工作环境:win10
PaddlePaddle 2.0.0
Anaconda下python3.7
CUDA-10.2
cudnn-10.2-v7.6.5
参考:

PaddleOCR快速安装:

https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.2/doc/doc_ch/installation.md

安装具体细节

1、安装CUDA-10.2和cudnn-10.2-v7.6.5
默认C盘安装可以避免莫名问题,安装cuda时候推荐不选NVIDA GeForce Experience,因为比较大且暂时用不到,节约内存资源
出问题 ImportError: Could not find ‘cudnn64_7.dll’:CUDA-10.2下没有cudnn64_7.dll动态库,将cudnn-10.2-v7.6.5内的cudnn64_7.dll复制一份过去就可。
注意:cudnn-9.0下也有cudnn64_7.dll,复制过去后可能导致飞桨验证gpu成功,但实际paddleOCR无法调用gpu
2、安装PaddlePaddle 2.0
使用GPU(paddlepaddle-gpu版本也可以选择调用cpu),当前CUDA10,请运行以下命令安装

python -m pip install paddlepaddle-gpu==2.0.0 -i https://mirror.baidu.com/pypi/simple

3、克隆PaddleOCR repo代码
推荐github:

git clone https://github.com/PaddlePaddle/PaddleOCR

实在网络差,也可选择使用码云上的托管(因为选择的是成熟稳定2.0版本,github和gitee上应该一样)

git clone https://gitee.com/paddlepaddle/PaddleOCR

4、安装第三方库(特容易出错地方)
cd PaddleOCR
注意事项:
安装出错主要是两个包,python_Levenshtein包和shapely包,Shapely安装版本不合适导致问题–>OSError: [WinError 126] 找不到指定的模块—geos_c.dll;出错没有cv2包,可能是没安装requirements.txt里指定的包
建议:修改requirements.txt,先将shapely和python_Levenshtein注释
提前下载两个包:
Shapely-1.7.1-cp37-cp37m-win_amd64.whl
python_Levenshtein-0.12.2-cp37-cp37m-win_amd64.whl

pip install -r requirements.txt  -i https://mirror.baidu.com/pypi/simple

5、其他
可能还需要安装paddle包,paddleocr包
验证测试

import paddle
paddle.utils.run_check()
# 运行成功
Running verify PaddlePaddle program ... 
W0909 14:22:58.062589 15456 device_context.cc:362] Please NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.4, Runtime API Version: 10.2
W0909 14:22:58.071564 15456 device_context.cc:372] device: 0, cuDNN Version: 7.6.
PaddlePaddle works well on 1 GPU.
W0909 14:23:01.684285 15456 build_strategy.cc:171] fusion_group is not enabled for Windows/MacOS now, and only effective when running with CUDA GPU.
PaddlePaddle works well on 1 GPUs.
PaddlePaddle is installed successfully! Let's start deep learning with PaddlePaddle now.

若显示检测到gpu且在gpu上运行良好,不一定代表实际ocr识别可用,可能gpu还是调不起来,最后发现还是cudnn版本一定要和cuda匹配,参考前述

使用教程

飞桨框架2.0使用教程:

https://www.paddlepaddle.org.cn/documentation/docs/zh/2.0/guides/index_cn.html

paddleocr package使用说明(包括参数说明):

https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.2/doc/doc_ch/whl.md

中文OCR模型快速使用:

https://gitee.com/paddlepaddle/PaddleOCR/blob/release/2.2/doc/doc_ch/quickstart.md

实践

import time
import os, sys
import matplotlib.pyplot as plt
from PIL import Image
from paddleocr import PaddleOCR, draw_ocr

# 系统路径加入PaddleOCR文件夹, 解决找不到模块问题
sys.path.append(os.path.dirname(os.path.dirname(os.path.realpath(__file__))))   # 根据所在文件相对PaddleOCR文件夹层次添加
folder_dir = os.path.dirname(os.path.realpath(__file__)) # 当前文件所在文件夹目录

start = time.time() # 时间戳, 秒
print("-------------- 识别开始 ---------------")
paddleOCR_dir = os.path.join(os.getcwd(), "PaddleOCR")
os.chdir(paddleOCR_dir) # 切换路径,保证设置参数文件的相对路径正确
# print(os.getcwd())

# --cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/"     # 分类模型所在文件夹
cls_model_dir="./inference/ch_ppocr_mobile_v2.0_cls_infer/" 
# --det_model_dir="./inference/ch_ppocr_mobile_v2.0_det_infer/"     # 检测模型所在文件夹
det_model_dir = "./inference/ch_ppocr_mobile_v2.0_det_infer/"
# --rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/"     # 识别模型所在文件夹
rec_model_dir="./inference/ch_ppocr_mobile_v2.0_rec_infer/" 

# --use_angle_cls=True --use_space_char=True --use_gpu=False
use_angle_cls = False    # 是否加载分类模型
use_space_char = True   # 是否识别空格
use_gpu = True  # 是否使用GPU,若想利用gpu,设置为True
cls = False #   前向时是否启动分类

# 实例化PaddleOCR识别类
ocr = PaddleOCR(cls_model_dir=cls_model_dir, det_model_dir=det_model_dir, rec_model_dir=rec_model_dir, 
                    use_angle_cls=use_angle_cls, use_gpu=use_gpu )  # need to run only once to download and load model into memory
# img_path = '/11.jpg'  # 图片直接放在同级目录
local_path = os.path.join(folder_dir, 'tmp_in') # 若没有tmp_in文件夹,自己建个
img_path = local_path + '\card.png' # 图片名

result = ocr.ocr(img_path, cls=False)   # 最终结果,识别方框4个点坐标,识别文本,置信度组成的列表
# print(result)
txts = [result[i][1][0] for i in range(len(result))] # 识别的文本列表
scores = [result[i][1][1] for i in range(len(result))]   # 识别的参数
print(txts)
print(scores)

# 保存识别对比图
image = Image.open(img_path).convert('RGB')
boxes = [line[0] for line in result]
txts = [line[1][0] for line in result]
scores = [line[1][1] for line in result]
im_show = draw_ocr(image, boxes, txts, scores)  # font_path不是必须, font_path='./doc/fonts/simfang.ttf'
im_show = Image.fromarray(im_show)

save_path = os.path.join(folder_dir, 'tmp_out',img_path.split("\\")[-1])  # 保存, 若没有tmp_out文件夹,自己建个
print(save_path)
im_show.save(save_path)

end = time.time()
cost_time = round(end - start, 2)
print("-------------- 识别结束,耗时 "+ str(cost_time) +"秒 ---------------")
  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值