导读

本文主要介绍PaddleOCR v2.6 C++ GPU版的编译详细步骤与踩坑记录,方便大家快速上手。(公众号:OpenCV与AI深度学习)

PaddleOCR 2.6

    8月24日PaddleOCR更新了2.6版本,下面是主要更新内容:

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习

    详细介绍请查看对应github:

​    https://github.com/PaddlePaddle/PaddleOCR​

    往前相关PaddleOCR内容:

C++ GPU编译

    C++ CPU版的编译与推理详细步骤前几天已介绍过,详见下面链接:

    ​​PaddleOCR v2.6新特征与C++编译推理详细步骤演示​

    下面来介绍GPU版本的编译与使用:

【1】安装CUDA和cuDNN环境,这里以CUDA10.1和cuDnn7.6.5为例:

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_02

安装CUDA10.1并将cuDnn7.6.5解压后复制到CUDA安装目录:

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_03

【2】下载PaddleOCR-release-2.6,与前面一样创建build文件夹deploy\cpp_infer\build

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_c++_04

【3】下载paddle_inference推理库文件,这里下载avx_mkl_cuda10.1_cudnn7.6.5_avx_mkl-trt6.0.1.5这一版,包含TensorRT,没有TensorRT的版本不要下,里面的头文件不全,后续编译会报错,下载地址:

​https://paddleinference.paddlepaddle.org.cn/user_guides/download_lib.html#windows​

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_05

【4】安装上面图片对应版本下载TensorRT-6.0.1.5.Windows10.x86_64.cuda-10.1.cudnn7.6,然后解压即可。

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_06

【5】CMake编译,注意勾选相关选项、设置对应目录如下:

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_07

然后config、generate,完成后打开ppocr.sln,本文使用VS2017编译。

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_08

【6】VS2017编译,先生成ALL_BUILD,然后生成ppocr。同样会报错,内容与上篇文章一样:

(1) 无法打开包括文件: “dirent.h”: No such file or directory

(2) mkdir找不到标识符

解决方法:

PaddleOCR v2.6新特征与C++编译推理详细步骤演示

【7】下载推理库,复制对应的dll到ppocr.exe同目录,命令行运行即可。

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_09

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_10

英文识别cmd命令行指令:

ppocr.exe --det_model_dir=./model_1/en_PP-OCRv3_det_infer/ --rec_model_dir=./model_1/en_PP-OCRv3_rec_infer/ --image_dir=./imgs/

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_11

输出log信息与识别结果:

e[1me[35m--- Running analysis [ir_graph_to_program_pass]e[0m
I0829 16:05:56.560971 49564 analysis_predictor.cc:1035] ======= optimize end =======
I0829 16:05:56.560971 49564 naive_executor.cc:102] --- skip [feed], feed -> x
I0829 16:05:56.563968 49564 naive_executor.cc:102] --- skip [softmax_2.tmp_0], fetch -> fetch
predict img: ./imgs\1.JPG
W0829 16:05:56.576009 49564 gpu_resources.cc:61] Please NOTE: device: 0, GPU Compute Capability: 6.1, Driver API Version: 10.1, Runtime API Version: 10.1
W0829 16:05:56.576009 49564 gpu_resources.cc:91] device: 0, cuDNN Version: 7.6.
W0829 16:05:56.579969 49564 helper.h:107] TensorRT was linked against cuBLAS 10.2.0 but loaded cuBLAS 10.1.0
W0829 16:05:56.597970 49564 helper.h:107] TensorRT was linked against cuBLAS 10.2.0 but loaded cuBLAS 10.1.0
predict img: ./imgs\2.JPG
predict img: ./imgs\3.JPG
./imgs\1.JPG
0 det boxes: [[12,53],[636,48],[636,102],[12,107]] rec text: Improve Brand Awareness rec score: 0.961477
1 det boxes: [[95,137],[573,143],[572,197],[94,191]] rec text: The Best to Rely on rec score: 0.941693
The detection visualized image saved in ./output//1.JPG
***************************

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_12

中文识别类似,参考前面文章即可。

【8】VS2017 + RTX3060编译遇到的问题(因为另外一台电脑GPU是RTX3060)

(1) 按照下图版本下载对应文件:

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_13

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_14

(2) CMake编译按照上面步骤不会出错,在编译ppocr.sln的时候会有两个新错误:

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_15

这里需要改一下cudnn.lib的路径,因为它跟另外两个lib不在同一个文件夹下:

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_16

另一个报错如下(如果你本身用的VS2019,此问题忽略):

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_c++_17

报错原因是这里面的gflags_static.lib和glog.lib是VS2019编译的

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_深度学习_18

我们在前面avx_mkl_cuda10.1_cudnn7.6.5_avx_mkl-trt6.0.1.5里面找到对应的lib替换当前对应两个的lib,重新编译ppocr即可。

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_19

PaddleOCR 2.6 编译详细步骤 + 踩坑记录(C++ GPU版)_paddle_20



觉得有用,记得点个赞