几行代码轻松实现对于PaddleOCR的实时推理,快来get!

夏日炎炎,正宜学习

上期武卓老师教了我们一键填入票据小技巧

解放了双手的Nono不得不感慨

OCR技术真是太太太实用了!

那么问题来了,

我们是否可以用身边CPU随时使用这项技术呢?

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第1张图片

武卓老师对Nono露出了肯定的微笑

仍然只需要简单的几行代码哦

不信接着往下看

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第2张图片

0本期课程简介

本期课程主要是以百度开源的PaddlePaddle框架的PaddleOCR技术为例,具体介绍如何利用英特尔开源的OpenVINO工具套件,仅使用我们手边的CPU,轻松实现对于PaddleOCR的实时推理。

提到PaddleOCR,就不得不提到它的技术原理了。PaddleOCR工作流程如下图所示,主要包括文本检测、方向分类、以及文本识别三部分。

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第3张图片

0推理过程

文本检测任务,是指找出图像或视频中的文字位置,不需要像目标检测任务那样,不仅要解决定位问题,还要解决目标分类问题。然而,文本检测也面临一些难点,比如:自然场景中的文本具有多样性,文字大小、方向、长度、形状、语言都会有不同,文字重叠或者密度较高,这些都会影响最终文本检测的效果。目前常用的文本检测方法有基于回归以及基于分割的方法。而在PaddleOCR中,我们选取的是基于分割的DBNet方法。

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第4张图片

DBNet的工作原理如上图所示。

一般而言,图像会经过特征金字塔fpn网络结构得到4个特征图,分别为原始图像的1/4、1/8、1/16和1/32的大小。然后,我们将4个特征图分别进行上采样为1/4的大小,再进行concatenation就会得到特征图f。接下来由特征图f得到我们的概率图和阈值图。最后通过概率图p和阈值图t的计算,通过可微分的二值化就能够得到近似的二值图。

这种针对基于分割的方法需要利用阈值进行二值化处理会导致后处理耗时较久,所以我们所采用的DBNet针对这种现象提出了一种可学习阈值的方法,并巧妙地设计了一个近似于阶跃函数的二值化函数,使得分割网络在训练的时候能端对端的学习文本分割的阈值。这种自动调节阈值不仅能带来精度的提升,同时可以简化后处理,会进一步提高文本检测的性能。

0具体代码实现

纸上谈兵终觉浅,绝知此事要躬行。我们先来导入好所有需要的Python工具包,通过查看具体代码的操作实践来实现OpenVINO对于PaddleOCR里面文本检测模型的推理。

进行推理之前,首先需要进行模型的下载。为了方便下载,我们定义了一个模型下载的函数,然后指定了下载的路径。在本次课程采用的是PaddleOCR mobile这样一个体积比较小的模型。

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第5张图片

然后进行模型读取,并加载到设备CPU上面去。仅仅使用下图这样两行很简单的代码,就可以完成模型的读取和加载。

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第6张图片

接下来,需要去定义变量名以及前处理、后处理函数。我们在进行文本检测任务的时候所需要的输入和输出的这样的一个变量名。在我们正式进行文本检测的推理任务之前,我们还需要再去定义一些必要的前处理和后处理函数,方便最后我们能够在一张图片上可视化的看到检测到目标文字以及完成转换过程。

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第7张图片

最后,我们仅仅只需要使用了这样的一行代码,就可以利用OpenVINO去进行文本检测模型的推理,那么推理的效果到底怎么样呢?

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第8张图片

推理效果验证

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第9张图片

上图呈现了本次课程文本检测的推理结果,可以看到这种印刷体的文本检测定位的文字清晰准确,定位精准。那如果是手写体又会怎样呢?我们可以换一张图片来看一下。

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第10张图片

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第11张图片

手写体的文本检测结果,依然清晰准确。

几行代码轻松实现对于PaddleOCR的实时推理,快来get!_第12张图片

本期课程大家学会了吗?

反正Nono已经get啦!

你可能感兴趣的:(OpenVINO,深度学习,机器学习,计算机视觉)