paddleOCR GPU版安装以及使用 最详细易懂教程版 (含详细的cuda安装教程)

paddleOCR GPU版安装以及使用 (含详细的cuda安装教程)

官网地址:PaddleOCR 文档

一,查看自己的显卡最高支持什么CUDA版本

显卡允许的CUDA版本是向下兼容的。

方法一:在cmd命令窗口中输入nvidia-smi,发现版本最高支持12.6

在这里插入图片描述

方法2:点击NVIDIA控制面板→系统信息

在这里插入图片描述

在这里插入图片描述

二,查看paddleOCR最高支持什么CUDA版本,以及安装paddleOCR

安装paddleOCR之前要安装paddlepaddle框架,而在经过多次尝试后得知CUDA版本要跟paddle支持的CUDA版本要一样。

查看地址: 开始使用_飞桨-源于产业实践的开源深度学习平台

在这里插入图片描述

我这个时候只最高支持CUDA12.0,所以安装CUDA的时候版本要记得安装最多安装12.0版本,否则是无法正常运行的。

python版本尽量往高的来。

确定了选用的CUDA版本后进行安装paddle(自己去官网找适合自己的,这只是示例):

python -m pip install paddlepaddle-gpu==2.6.1.post120 -f https://www.paddlepaddle.org.cn/whl/windows/mkl/avx/stable.html  

安装paddleocr

pip install paddleocr

三,安装CUDA

官网链接: https://developer.nvidia.com/cuda-toolkit-archive

找到自己对应的CUDA版本点进去

在这里插入图片描述

按照自己系统的方式去选择,此时以windows为例子
在这里插入图片描述

下载完成之后打开进行安装,可以自己选择安装地址

在这里插入图片描述

一直点下一步就行了,安装选项选择精简:
在这里插入图片描述

重新打开命令窗口查看是否安装成功
在命令窗口中输入nvcc -V 进行检查

(base) PS C:\Users\sumengxian> nvcc -V
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2022 NVIDIA Corporation
Built on Mon_Oct_24_19:40:05_Pacific_Daylight_Time_2022
Cuda compilation tools, release 12.0, V12.0.76
Build cuda_12.0.r12.0/compiler.31968024_0

四,安装cuDNN

这是CUDA加速工具,paddleOCR默认需要这个工具
官网地址:

往期版本地址:cuDNN Archive | NVIDIA Developer

在这里插入图片描述

在这里插入图片描述

下载zip文件,解压之后有这些文件

在这里插入图片描述

然后找到CUDA的安装目录覆盖进去,就安装成功了

在这里插入图片描述

五,paddleOCR的使用

1.快速开始

官方示例:

from paddleocr import PaddleOCR
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'TRUE'#我的电脑因为报某些错误需要加上这个
# Paddleocr目前支持的多语言语种可以通过修改lang参数进行切换
# 例如`ch`, `en`, `fr`, `german`, `korean`, `japan`
ocr = PaddleOCR(use_angle_cls=True, lang="ch",use_gpu = True)  # need to run only once to download and load model into memory   use_gpu 开启gpu(显卡)进行推理
img_path = './imgs/11.jpg'
result = ocr.ocr(img_path, cls=True)
for idx in range(len(result)):
    res = result[idx]
    for line in res:
        print(line)

结果是一个list,每个item包含了文本框,文字和识别置信度

1 2[[[28.0, 37.0], [302.0, 39.0], [302.0, 72.0], [27.0, 70.0]], ('纯臻营养护发素', 0.9658738374710083)] ......

2.PaddleOCR模型推理参数列表

推荐:

本人推荐将det_limit_side_len参数设置为1920,防止当照片过大时而有些文字没有被识别到

det_model_dir = "./models/det/ch/ch_PP-OCRv4_det_server_infer/"
rec_model_dir = "./models/rec/ch/ch_PP-OCRv4_rec_server_infer/"
cls_model_dir = "./models/cls/ch_ppocr_mobile_v2.0_cls_infer/"
s
det_limit_side_len = 1920

在使用PaddleOCR进行模型推理时,可以自定义修改参数,来修改模型、数据、预处理、后处理等内容,详细的参数解释如下所示。

  • 全局信息
参数名称类型默认值含义
image_dirstr无,必须显式指定图像或者文件夹路径
page_numint0当输入类型为pdf文件时有效,指定预测前面page_num页,默认预测所有页
vis_font_pathstr“./doc/fonts/simfang.ttf”用于可视化的字体路径
drop_scorefloat0.5识别得分小于该值的结果会被丢弃,不会作为返回结果
use_pdservingboolFalse是否使用Paddle Serving进行预测
warmupboolFalse是否开启warmup,在统计预测耗时的时候,可以使用这种方法
draw_img_save_dirstr“./inference_results”系统串联预测OCR结果的保存文件夹
save_crop_resboolFalse是否保存OCR的识别文本图像
crop_res_save_dirstr“./output”保存OCR识别出来的文本图像路径
use_mpboolFalse是否开启多进程预测
total_process_numint6开启的进程数,use_mpTrue时生效
process_idint0当前进程的id号,无需自己修改
benchmarkboolFalse是否开启benchmark,对预测速度、显存占用等进行统计
save_log_pathstr“./log_output/”开启benchmark时,日志结果的保存文件夹
show_logboolTrue是否显示预测中的日志信息
use_onnxboolFalse是否开启onnx预测
  • 预测引擎相关
参数名称类型默认值含义
use_gpuboolTrue是否使用GPU进行预测
ir_optimboolTrue是否对计算图进行分析与优化,开启后可以加速预测过程
use_tensorrtboolFalse是否开启tensorrt
min_subgraph_sizeint15tensorrt中最小子图size,当子图的size大于该值时,才会尝试对该子图使用trt engine计算
precisionstrfp32预测的精度,支持fp32, fp16, int8 3种输入
enable_mkldnnboolTrue是否开启mkldnn
cpu_threadsint10开启mkldnn时,cpu预测的线程数
  • 文本检测模型相关
参数名称类型默认值含义
det_algorithmstr“DB”文本检测算法名称,目前支持DB, EAST, SAST, PSE, DB++, FCE
det_model_dirstrxx检测inference模型路径
det_limit_side_lenint960检测的图像边长限制
det_limit_typestr“max”检测的边长限制类型,目前支持minmaxmin表示保证图像最短边不小于det_limit_side_lenmax表示保证图像最长边不大于det_limit_side_len

其中,DB算法相关参数如下

参数名称类型默认值含义
det_db_threshfloat0.3DB输出的概率图中,得分大于该阈值的像素点才会被认为是文字像素点
det_db_box_threshfloat0.6检测结果边框内,所有像素点的平均得分大于该阈值时,该结果会被认为是文字区域
det_db_unclip_ratiofloat1.5Vatti clipping算法的扩张系数,使用该方法对文字区域进行扩张
max_batch_sizeint10预测的batch size
use_dilationboolFalse是否对分割结果进行膨胀以获取更优检测效果
det_db_score_modestr“fast”DB的检测结果得分计算方法,支持fastslowfast是根据polygon的外接矩形边框内的所有像素计算平均得分,slow是根据原始polygon内的所有像素计算平均得分,计算速度相对较慢一些,但是更加准确一些。

EAST算法相关参数如下

参数名称类型默认值含义
det_east_score_threshfloat0.8EAST后处理中score map的阈值
det_east_cover_threshfloat0.1EAST后处理中文本框的平均得分阈值
det_east_nms_threshfloat0.2EAST后处理中nms的阈值

SAST算法相关参数如下

参数名称类型默认值含义
det_sast_score_threshfloat0.5SAST后处理中的得分阈值
det_sast_nms_threshfloat0.5SAST后处理中nms的阈值
det_box_typestrquad是否多边形检测,弯曲文本场景(如Total-Text)设置为’poly’

PSE算法相关参数如下

参数名称类型默认值含义
det_pse_threshfloat0.0对输出图做二值化的阈值
det_pse_box_threshfloat0.85对box进行过滤的阈值,低于此阈值的丢弃
det_pse_min_areafloat16box的最小面积,低于此阈值的丢弃
det_box_typestr“quad”返回框的类型,quad:四点坐标,poly: 弯曲文本的所有点坐标
det_pse_scaleint1输入图像相对于进后处理的图的比例,如640*640的图像,网络输出为160*160,scale为2的情况下,进后处理的图片shape为320*320。这个值调大可以加快后处理速度,但是会带来精度的下降
  • 文本识别模型相关
参数名称类型默认值含义
rec_algorithmstr“CRNN”文本识别算法名称,目前支持CRNN, SRN, RARE, NETR, SAR, ViTSTR, ABINet, VisionLAN, SPIN, RobustScanner, SVTR, SVTR_LCNet
rec_model_dirstr无,如果使用识别模型,该项是必填项识别inference模型路径
rec_image_shapestr“3,48,320”识别时的图像尺寸
rec_batch_numint6识别的batch size
max_text_lengthint25识别结果最大长度,在SRN中有效
rec_char_dict_pathstr“./ppocr/utils/ppocr_keys_v1.txt”识别的字符字典文件
use_space_charboolTrue是否包含空格,如果为True,则会在最后字符字典中补充空格字符
  • 端到端文本检测与识别模型相关
参数名称类型默认值含义
e2e_algorithmstr“PGNet”端到端算法名称,目前支持PGNet
e2e_model_dirstr无,如果使用端到端模型,该项是必填项端到端模型inference模型路径
e2e_limit_side_lenint768端到端的输入图像边长限制
e2e_limit_typestr“max”端到端的边长限制类型,目前支持min, maxmin表示保证图像最短边不小于e2e_limit_side_lenmax表示保证图像最长边不大于e2e_limit_side_len
e2e_pgnet_score_threshfloat0.5端到端得分阈值,小于该阈值的结果会被丢弃
e2e_char_dict_pathstr“./ppocr/utils/ic15_dict.txt”识别的字典文件路径
e2e_pgnet_valid_setstr“totaltext”验证集名称,目前支持totaltext, partvgg,不同数据集对应的后处理方式不同,与训练过程保持一致即可
e2e_pgnet_modestr“fast”PGNet的检测结果得分计算方法,支持fastslowfast是根据polygon的外接矩形边框内的所有像素计算平均得分,slow是根据原始polygon内的所有像素计算平均得分,计算速度相对较慢一些,但是更加准确一些。
  • 方向分类器模型相关
参数名称类型默认值含义
use_angle_clsboolFalse是否使用方向分类器
cls_model_dirstr无,如果需要使用,则必须显式指定路径方向分类器inference模型路径
cls_image_shapestr“3,48,192”预测尺度
label_listlist[‘0’, ‘180’]class id对应的角度值
cls_batch_numint6方向分类器预测的batch size
cls_threshfloat0.9预测阈值,模型预测结果为180度,且得分大于该阈值时,认为最终预测结果为180度,需要翻转

3.修改模型

模型库 - PaddleOCR 文档

这里提供了各种的OCR模型可以进行替换
最简单的替换方式是改源码中的url:
在这里插入图片描述

调用的时候就加上字段lang="ch"就可以了

4.对齐文字

将输出文字对齐,这是大佬开源的一个项目:xhw205/PaddleOCR_AlignText: PaddleOCR 输出结果的行对齐,表格制式图像OCR行对齐
效果:
在这里插入图片描述

代码:

from paddleocr import PaddleOCR
import numpy as np
from interval import Interval
from PIL import Image

det_model_dir = "./inference/ch_PP-OCRv4_det_infer/"
rec_model_dir = "./inference/ch_PP-OCRv4_rec_infer/"
cls_model_dir = "./inference/ch_ppocr_mobile_v2.0_cls_infer/"

class OCR(PaddleOCR):
    def __init__(self, **kwargs):
        super(OCR, self).__init__(**kwargs)

    def ocr_new(self, img, det=True, rec=True, cls=True):
        res = self.ocr(img, det=det, rec=rec, cls=cls)
        if res!=None:
            return res
        else:
            img_v = Image.open(img).convert("RGB")
            img_v = np.asanyarray(img_v)[:,:,[2,1,0]]
            dt_boxes, rec_res = self.__call__(img_v)
            return [[box.tolist(), res] for box, res in zip(dt_boxes, rec_res)]

def align_text(res, threshold=0):
    res.sort(key=lambda i: (i[0][0][0]))  # 按照x排
    already_IN, line_list = [], []
    for i in range(len(res)):  # i当前
        # print(res[i][1][0])
        if res[i][0][0] in already_IN:
            continue
        line_txt = " " + "".join(res[i][1][0].split()) + " "
        already_IN.append(res[i][0][0])
        y_i_points = [res[i][0][0][1], res[i][0][1][1], res[i][0][3][1], res[i][0][2][1]]
        min_I_y, max_I_y = min(y_i_points), max(y_i_points)
        curr = Interval(min_I_y + (max_I_y - min_I_y) // 3, max_I_y)
        curr_mid = min_I_y + (max_I_y - min_I_y) // 2

        for j in range(i + 1, len(res)):  # j下一个
            if res[j][0][0] in already_IN:
                continue
            y_j_points = [res[j][0][0][1], res[j][0][1][1], res[j][0][3][1], res[j][0][2][1]]
            min_J_y, max_J_y = min(y_j_points), max(y_j_points)
            next_j = Interval(min_J_y, max_J_y - (max_J_y - min_J_y) // 3)

            if next_j.overlaps(curr) and curr_mid in Interval(min_J_y, max_J_y):
                line_txt += (res[j][1][0] + "  ")
                already_IN.append(res[j][0][0])
                curr = Interval(min_J_y + (max_J_y - min_J_y) // 3, max_J_y)
                curr_mid = min_J_y + (max_J_y - min_J_y) // 2
        line_list.append((res[i][0][0][1], line_txt))
    line_list.sort(key=lambda x: x[0])
    txt = '\n'.join([i[1] for i in line_list])
    return txt,line_list

paddle_ocr_engin = OCR(det_model_dir= det_model_dir,rec_model_dir= rec_model_dir,cls_model_dir= cls_model_dir,use_angle_cls=True)
res = paddle_ocr_engin.ocr_new('./test.jpg')
print(res[0])
print(align_text(res[0]))

参考文章:

全网最详细的安装pytorch GPU方法,一次安装成功!!包括安装失败后的处理方法!-CSDN博客

【Python】paddleocr快速使用及参数详解_paddleocr python-CSDN博客

快速开始 - PaddleOCR 文档

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值