百度飞桨PaddleOCR的安装与使⽤
百度飞桨PaddleOCR的安装与使⽤
百度飞桨PaddleOCR的安装与使⽤
⼯作环境:win10差不多英文
PaddlePaddle 2.0.0
Anaconda下python3.7
CUDA-10.2
cudnn-10.2-v7.6.5
参考:
PaddleOCR快速安装:
安装具体细节
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 /pypi/simple
3、克隆PaddleOCR repo代码
推荐github:
git /PaddlePaddle/PaddleOCR
实在⽹络差,也可选择使⽤码云上的托管(因为选择的是成熟稳定2.0版本,github和gitee上应该⼀样)
git /paddlepaddle/PaddleOCR
4、安装第三⽅库(特容易出错地⽅)
元器件英文>uestccd PaddleOCR
注意事项:
安装出错主要是两个包,python_Levenshtein包和shapely包,Shapely安装版本不合适导致问题–>OSError: [WinError 126] 找不到指定的模块—geos_c.dll;出错没有cv2包,可能是没安装⾥指定的包
建议:修改,先将shapely和python_Levenshtein注释
提前下载两个包:
Shapely-1.7.1-cp37-cp37m-win_amd64.whl
python_Levenshtein-0.12.2-cp37-cp37m-win_amd64.whl
pip install - -i /pypi/simple
5、其他
可能还需要安装paddle包,paddleocr包
验证测试
paddle.utils.run_check()
# 运⾏成功
Running verify PaddlePaddle program ...
W0909 14:22:58.062589 15456 device_context:362] Plea NOTE: device: 0, GPU Compute Capability: 7.5, Driver API Version: 11.4, Runtime API Vers ion: 10.2
W0909 14:22:58.071564 15456 device_context:372] device: 0, cuDNN Version: 7.6.
PaddlePaddle works well on 1 GPU.
W0909 14:23:01.684285 15456 build_strategy: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使⽤教程:
paddleocr package使⽤说明(包括参数说明):
中⽂OCR模型快速使⽤:
实践
英语四六级开始报名官网import os, sys
big starimport matplotlib.pyplot as plt
from PIL import Image
from paddleocr import PaddleOCR, draw_ocr
martin luther king day# 系统路径加⼊PaddleOCR⽂件夹, 解决找不到模块问题
sys.path.append(os.path.dirname(os.path.dirname(alpath(__file__))))# 根据所在⽂件相对PaddleOCR⽂件夹层次添加folder_dir = os.path.dirname(alpath(__file__))# 当前⽂件所在⽂件夹⽬录
start = time.time()# 时间戳, 秒
print("-------------- 识别开始 ---------------")
paddleOCR_dir = os.path.wd(), "PaddleOCR")
os.chdir(paddleOCR_dir)# 切换路径,保证设置参数⽂件的相对路径正确
# wd())
# --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/"
# --u_angle_cls=True --u_space_char=True --u_gpu=Fal
u_angle_cls = Fal # 是否加载分类模型
initu_space_char = True # 是否识别空格
u_gpu = True # 是否使⽤GPU,若想利⽤gpu,设置为True
cls = Fal # 前向时是否启动分类
# 实例化PaddleOCR识别类
ocr = PaddleOCR(cls_model_dir=cls_model_dir, det_model_dir=det_model_dir, rec_model_dir=rec_model_dir, u_angle_cls=u_angle_cls, u_gpu=u_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 = (img_path, cls=Fal)# 最终结果,识别⽅框4个点坐标,识别⽂本,置信度组成的列表avg是什么意思
# 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/f'
bais
im_show = Image.fromarray(im_show)
save_path = os.path.join(folder_dir, 'tmp_out',img_path.split("\\")[-1])# 保存, 若没有tmp_out⽂件夹,⾃⼰建个
print(save_path)
featim_show.save(save_path)
end = time.time()
cost_time = round(end - start, 2)
print("-------------- 识别结束,耗时 "+ str(cost_time) +"秒 ---------------")