PaddleOCR+OpenCV实现中英文识别

一、概述

  • 上一篇文章说到,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 1use_tensorrt 0(开启这一快好像有问题,官方好像还不支持,但是又必须要这个库)
  • 4、根据自身GPU的显存大小设置gpu_mem 1000(我的GPU为2G,比较小,因此设置为1000)
  • 5、运行结果和上面一致,就不在显示了。

四、完整工程代码及三方库

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值