PaddleOCR库的简单使用
一、概述
- 接上一篇文章说到,PaddleOCRv2.0的识别效果很好,因此这里试着搭建一下,看看究竟如何。
- 本文使用v2.0.0版本进行测试,该版本对应有官方编译好的库。
- 使用的测试环境为win10,vs2017,x64,Release
- 使用的库包括PaddleOCR预测库2.0.2(官方给出的编译成功的CPU版本和GPU版本)、OpenCV(我用的是4.5.1,其他版本应该也可以,只做图像的读取使用)
- 工程的构建可以使用cmake,也可以直接使用vs2017构建工程,然后手动添加库,均可以使用。
二、编译与修改
2.1 准备工作
- 下载PaddleOCRv2.0的源代码。
- 下载官方编译成功的三方库PaddleOCR预测库2.0.2。如果电脑有支持NVIDIA的CUDA,那么可以同时下载CPU和GPU版本。下载GPU版本时,注意CUDA和cudnn的版本。同时在解压后注意库文件中的version.txt,里面包含了这个库编译时所有的环境,以及依赖库等。CPU版本不需要特别注意,但是GPU版本需要注意TensorRT的版本。
- 如果需要使用GPU版本,那么一定确保显卡支持GPU, 同时安装了对应的驱动,CUDA、cudnn,以及TensorRT库。
- 找到PaddleOCR源代码中的
“path\PaddleOCR-release-2.0\deploy\cpp_infer”
目录,其中include目录就是所有的头文件,src就是即将使用的源代码(main,cpp就是主函数),tools目录中有config.txt模板。"pathPaddleOCR-release-2.0\ppocr\utils"
文件中有字库文件ppocr_keys_v1.txt。
2.2 编译中存在的问题
- 1、用cmake或是直接构建工程这一步就不在多说了,这么简单,谁不会呀。
- 2、如果是手动构建的工程,需要手动添加对应的头文件和库文件,就是下载的PaddleOCR预测库和编译好的OpenCV。
- 3、编译过程会出现找不到dirent.h文件,没有关系,可以参考这篇博客,新建一个,然后添加到工程中既可以。文章最后也会给出编译好的工程,供大家测试使用。
- 4、glog这个库可以不需要,因为我在编译时报错,所以直接注释掉了。
- 5、VS017中config.cpp中出现字符串分配内存语法错误,可以这样修改:
char* strs = new char[str.length() + 1];
//char strs[str.length() + 1];
std::strcpy(strs, str.c_str());
char* d = new char[delim.length() + 1];
//char d[delim.length() + 1];
std::strcpy(d, delim.c_str());
- 6、VS017中utility.cpp中出现lstat未定义的标识符可以这样修改:
struct stat s;
stat(dir_name, &s);
- 7、对代码的字符识别结果输出函数进行了简单的修改,将结果保存在txt中。
三、运行与结果
对于CPU版本
- 首先需要下载对应的模型文件,轻量级或是普通级都可以。解压后放在自己随意指定的目录即可,注意每种模型可以解压出三个文件。
- 将之前的字库文件ppocr_keys_v1.txt和配置文件config.txt同样可以放在该目录,方便查找。注意修改config.txt中模型文件的路径,以及设置
use_gpu 0
。 - 在工程属性中的调试选项中设置好命令参数,如:
./cfg/config.txt ./imgs
- 在工程属性中的环境选项中设置好dll的路径,如:
path=../3rd_party/paddle_inference_install_cpu/bin;../3rd_party/opencv/bin;
分号不要忘记,不然会找不到dll文件。 - 在识别字符时,如果时使用exe运行乱码,此时可以在执行exe前在终端中输入
CHCP 65001
,将终端的编码方式由GBK编码(默认)改为UTF-8编码。 - 如果是通过VS2017控制台输出乱码,试了很多方法,但是这个我目前也没有好的解决方案,只是将结果保存在txt中进行对比。有知道怎么修改的大神可以评论区留言指导一下。
- 识别结果图片:
- txt中保存的文字,识别效果还是很好的,只是可能输出的顺序不太一致,不是按照从上到下的顺序,这个需要根据矩形框的位置进行修改。
对于GPU的程序代码测试: - 其实大体上和CPU一致,只是需要一下几点:
- 1、主要问题在这里有说明:https://github.com/PaddlePaddle/PaddleOCR/issues/2355
- 2、添加CUDA,cudnn和tensorRT库。
- 3、设置config.txt中的
use_gpu 1
,use_tensorrt 0
(开启这一快好像有问题,官方好像还不支持,但是又必须要这个库) - 4、根据自身GPU的显存大小设置
gpu_mem 1000
(我的GPU为2G,比较小,因此设置为1000) - 5、运行结果和上面一致,就不在显示了。
四、完整工程代码及三方库
- 由于整个工程较大,因此分为库文件和工程两部分都上传
- 百度下载地址:
库文件:https://pan.baidu.com/s/1_dUbugY2ymcd3WAB3pkqrQ 提取码:2q5k
工程文件:https://pan.baidu.com/s/11ZIjIn21Ms-pi1kmOIBwkg 提取码:w1tn - CSDN下载地址:
库文件:
https://download.csdn.net/download/qq_38589460/21110985?spm=1001.2014.3001.5503
工程文件:
https://download.csdn.net/download/qq_38589460/21110975?spm=1001.2014.3001.5503 - 如要识别视频,可以参考博客:https://blog.csdn.net/zaibeijixing/article/details/114498371