QT使用PaddleOCR和百度OCR进行文字识别

近些年人工智能大热,做这个Demo也是想对其有个初步的了解。关于文字识别已经有了一些很棒的开源项目可供选择,本文最终选择了PaddleOCR,使用项目中提供的代码和模型便可获得比较不错的中英文识别效果,不需要对人工智能领域有深入的了解,应用过程中的麻烦主要来自于环境的配置,本文即是配置过程的记录。

一些开源项目可能更侧重于算法方面,比如我也试了一下opencv教程中的文字识别,感觉官方提供的模型识别效果并不好(也可能是我用法不对),如果你想获得理想的效果,可能需要找到更好的模型甚至自己去训练。

效果图

在这里插入图片描述

环境

Windows7
Qt Creator 4.5.1 (MSVC2017_64)
Qt 5.10.1
opencv 4.5.1
paddle_inference (cpu_avx_mkl版 2.0.0)
Visual Studio 2017
CMake 3.17.1

关于这篇文章

本文不会详细介绍PaddleOCR的接口该如何使用,而是尽可能简化设置来实现一个利用其在本地进行文字识别的demo程序,用户体验什么的也基本没有考虑。本来使用paddleOCR按说与使用其它三方库也没有多大区别,而且有相对丰富的文档可供查阅,然而根据文档来学习如何在Windows系统下使用C++版本的PaddleOCR的过程也没有那么丝般顺滑,因此就想用图文的形式来记录一下。

准备工作

PaddlePaddle对于操作系统和硬件的要求

关于深度学习

PaddlePaddle提供了一系列深度学习教程
零基础实践深度学习
尽管草草看下来之后自己对深度学习连一知半解都谈不上,不过能够感到文章的质量还是比较高的,看不懂的地方就先跳过。即使不打算深入学习,通过此系列文章来了解一些术语和概念也是非常不错的。

一、下载Paddle_inference Windows C++预测库

paddle inference下载地址

这里更新一下链接,图片就暂不更新了
paddle inference下载地址
在这里插入图片描述
我仅下载了红框处的压缩包,目前官网对应版本为2.1.0,而2.0版本的下载页面目前提供的压缩包版本为2.0.1,这里有一个问题是我当初下载的2.0.0的压缩包内的动态库名称是paddle_fluid.dll,而现在此预测库中包含的动态库名称为paddle_inference.dll,若你使用的是我github仓库中的代码,可能需要修改一下.pro文件中的动态库名称

//paddleOCRDemo.pro
LIBS += -L$$PADDLE_PATH/paddle/lib -lpaddle_fluid//改为-lpaddle_inference即可

上图中的前两个版本都是CPU版的预测库,区别在于使用的数学库,可能部分处理器只支持其中之一。
后面的都是使用GPU的版本,想使用这些版本你需要安装对应版本的CUDA库和cuDNN 7+,而且需要你使用的是NVIDIA的显卡。
关于计算机视觉或者是机器学习相关的计算,都是属于GPU擅长的领域。简单查了一下资料,CPU和GPU对于矩阵计算的效率相差还是挺多的,如果你希望PaddleOCR能有更快的运行速度,你需要在本文的基础上额外折腾一番以使用GPU版本的预测库。

现在,简单起见,我们直接点击上图中红框处下载已经编译好的库即可。

二、安装 OpenCV

我打包上传了当时自己编译的库文件,印象中是CMAKE+VS2017编译的64位release版,环境差不多的话应该可以直接用(审核中,过几天我再看一眼上传成功没)
编译好的opencv

PaddleOCR官方的编译指南中,目前的描述如下图

在这里插入图片描述
虽然我使用的是OpenCV 4.5.1也没出现什么问题,但是如果你还没有安装OpenCV,那还是选择文档中提到的版本比较好,大版本的更迭经常会出现一些不兼容的情况,使用不同的版本可能会带来麻烦。
至于OpenCV的安装或者编译本文就不再详述,如果遇到问题可以留言提出。

三、关于PaddleOCR

本文的Demo程序中大部分代码都是来自于PaddleOCR,只做了很少的修改以获得我需要的功能。
不过PaddleOCR的大部分内容是基于Python的,而且C++部分的功能并不是以库的形式提供的,即使你把它编译成库,可能也会有不够灵活的问题,总之使用本文的Demo程序并不需要下载及编译PaddleOCR项目
PaddleORC本身是一个专注于文字识别的深度学习开发套件,但是仅就项目中C++的部分而言,它更像是一个基于paddle_inference的实际应用。

下载并编译Demo程序

github下载代码

打开Qt项目并修改paddleOCRDemo.pro文件

因为使用了三方库的关系,这里需要你将.pro文件中的库路径等修改成你自己电脑中对应库的路径。
找到文件中如下的代码行并修改

PADDLE_PATH = E:/github/paddle/paddle_inference_install_dir/paddle_inference_install_dir
INCLUDEPATH += E:/github/opencv/opencv/build/install/include 
LIBS += -LE:/github/opencv/opencv/build/install/x64/vc15/lib/ -lopencv_core451  -lopencv_imgcodecs451 -lopencv_imgproc451

其中PADDLE_PATH是前面下载的paddle_inference的路径,更具体的,此路径下需要有paddlethird_party子目录

剩下两行是openCV的头文件目录和库目录,根据你安装openCV的方式不同,目录结构可能会有变化。
INCLUDEPATH那一行是头文件目录,该路径下应直接包含opencv2子目录。
LIBS是库文件目录,该目录下应该包含诸如opencv_core451.lib等的.lib文件,如果你使用的不是4.5.1版本的openCV,那么需要把这一行中的"451"修改成版本对应的数字。

在Qt Creator中添加运行时需要的动态库路径

如果你已经把之前安装的各种库的路径都添加到系统的环境变量中了,那么可以忽略此步。
否则可以在Qt Creator中添加临时的环境变量来让其找到动态库(.dll)文件
在这里插入图片描述
在Path变量中追加添加如下的路径,路径之间使用";"隔开即可

需要使用你自己的路径,这些路径中包含的都是对应的.dll文件
XXXXXXX\x64\vc15\bin; (包含opencv_core451.dll等文件)
XXXXXXX\paddle_inference_install_dir\paddle\lib;
XXXXXXX\paddle_inference_install_dir\third_party\install\mkldnn\lib;
XXXXXXX\paddle_inference_install_dir\third_party\install\mklml\lib

编译运行

注意此程序仅支持64位Release版本,需要将构建选项设置为"Release"。
之后点击Qt Creator的运行按钮即可编译运行了。

我这里仅配置了Qt Creator中的环境变量,如果你想直接运行编译出的程序,那么你有以下两种方法可供选择:
1.将程序所依赖的各种动态库(.dll文件)复制到paddleOCRDemo.exe所在的目录下
2.将上述动态库路径添加到系统的环境变量中

使用更高精度的模型

模型下载

本文使用的是paddleOCR提供的中英文超轻量OCR模型,此模型具有体积小,速度快的特点。
同时他们还提供了拥有更高精度的模型,可以在此页面中下载
在这里插入图片描述
图中红框处即是更高精度的模型。
将下载并解压好的模型文件夹放入代码目录inference文件夹内。

修改配置文件

修改Demo程序代码目录下的config.txt文件中的模型路径:

# det config
max_side_len  960
det_db_thresh  0.3
det_db_box_thresh  0.5
det_db_unclip_ratio  2.0
det_model_dir  ./inference/ch_ppocr_mobile_v2.0_det_infer/  //修改此路径

# cls config
use_angle_cls 0
cls_model_dir  ./inference/ch_ppocr_server_v2.0_cls_infer/
cls_thresh  0.9

# rec config
rec_model_dir  ./inference/ch_ppocr_mobile_v2.0_rec_infer/ //修改此路径
char_list_file ./ppocr_keys_v1.txt

注意由于.pro文件中的设置,需要"重新生成"之后设置才能生效。
(不过这里其实并不是真的需要重新编译,重新生成的目的在于将新加入和修改的文件复制到编译出的可执行文件目录下,你也可以选择在paddleOCRDemo.exe的目录下直接进行上述的修改)

就CPU版本的预测库来说,两个模型的执行时间差别还是比较大的,可能如果使用GPU版本并且有比较好的GPU的话,这种差距就容易接受了,根据实际情况进行选用吧。

使用百度OCR

如果你对文字识别有更高精度或者特定场景的需求(比如识别身份证或者表格),使用付费的文字识别服务也是一个可行的选择。部分接口每天会提供一定的免费次数。
本文使用的是C++ SDK,有的文章使用的是网页请求的方法,准备工作不尽相同。

注册并登录百度ai平台
控制台页面创建应用
在这里插入图片描述
创建成功后即可在“管理应用”页面看到属于你自己应用的
AppID
API Key
Secret Key

测试程序代码已上传至上文的同一git仓库中
关于测试程序的编译与paddleOCR大同小异,需要你正确的添加对应库的路径。同时不要忘了将代码中上述变量的值替换成你自己的。

下载SDK

下载页面
在这里插入图片描述
按照说明文档部署环境即可

安装libcurl

下载地址

安装openssl

源码地址
从源码编译openssl比较麻烦,不清楚哪里有容易使用且容易下载的安装包,这里有一个不太好下载的安装包地址
安装包

这里摘录一段官方文档

### Perl

We recommend Strawberry Perl, available from <http://strawberryperl.com/>
Please read NOTES.PERL for more information, including the use of CPAN.
An alternative is ActiveState Perl, <https://www.activestate.com/ActivePerl>
for which you may need to explicitly build the Perl module Win32/Console.pm
via <https://platform.activestate.com/ActiveState> and then download it.

### Microsoft Visual C compiler.

Since these are proprietary and ever-changing we cannot test them all.
Older versions may not work. Use a recent version wherever possible.

### Netwide Assembler (NASM)

NASM is the only supported assembler. It is available from <https://www.nasm.us>.

Quick start
-----------

 1. Install Perl

 2. Install NASM

 3. Make sure both Perl and NASM are on your %PATH%

 4. Use Visual Studio Developer Command Prompt with administrative privileges,
    choosing one of its variants depending on the intended architecture.
    Or run "cmd" and execute "vcvarsall.bat" with one of the options x86,
    x86_amd64, x86_arm, x86_arm64, amd64, amd64_x86, amd64_arm, or amd64_arm64.
    This sets up the environment variables needed for nmake.exe, cl.exe, etc.
    See also
    <https://docs.microsoft.com/cpp/build/building-on-the-command-line>

 5. From the root of the OpenSSL source directory enter
    perl Configure VC-WIN32    if you want 32-bit OpenSSL or
    perl Configure VC-WIN64A   if you want 64-bit OpenSSL or
    perl Configure             to let Configure figure out the platform

 6. nmake

 7. nmake test

 8. nmake install

For the full installation instructions, or if anything goes wrong at any stage,
check the INSTALL.md file.

关于Perl,文档中的建议是使用Strawberry Perl。但很多阅读量较高的安装教程中使用的都是ActiveState Perl,上方文档中也提到了如果使用ActiveState Perl你可能需要手动安装其他的模块,否则会出现错误。但是Strawberry Perl官方下载非常慢也是个不小的问题,最终我在CSDN使用积分下载了别人的资源。
Strawberry官方下载地址

安装jsoncpp

源码地址

关于百度OCR的使用并没有说的很详细,不过C++SDK的使用方法和接口说明在官方文档中也都说的比较详细了。
主要的麻烦也是在于安装上面提到的那几个库。

  • 12
    点赞
  • 63
    收藏
    觉得还不错? 一键收藏
  • 17
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值