当前位置:网站首页>几行代码轻松实现对于PaddleOCR的实时推理,快来get!
几行代码轻松实现对于PaddleOCR的实时推理,快来get!
2022-07-27 21:49:00 【英特尔边缘计算社区】
夏日炎炎,正宜学习
上期武卓老师教了我们一键填入票据小技巧
解放了双手的Nono不得不感慨
OCR技术真是太太太实用了!
那么问题来了,
我们是否可以用身边CPU随时使用这项技术呢?

武卓老师对Nono露出了肯定的微笑
仍然只需要简单的几行代码哦
不信接着往下看

01 本期课程简介
本期课程主要是以百度开源的PaddlePaddle框架的PaddleOCR技术为例,具体介绍如何利用英特尔开源的OpenVINO工具套件,仅使用我们手边的CPU,轻松实现对于PaddleOCR的实时推理。
提到PaddleOCR,就不得不提到它的技术原理了。PaddleOCR工作流程如下图所示,主要包括文本检测、方向分类、以及文本识别三部分。

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

DBNet的工作原理如上图所示。
一般而言,图像会经过特征金字塔fpn网络结构得到4个特征图,分别为原始图像的1/4、1/8、1/16和1/32的大小。然后,我们将4个特征图分别进行上采样为1/4的大小,再进行concatenation就会得到特征图f。接下来由特征图f得到我们的概率图和阈值图。最后通过概率图p和阈值图t的计算,通过可微分的二值化就能够得到近似的二值图。
这种针对基于分割的方法需要利用阈值进行二值化处理会导致后处理耗时较久,所以我们所采用的DBNet针对这种现象提出了一种可学习阈值的方法,并巧妙地设计了一个近似于阶跃函数的二值化函数,使得分割网络在训练的时候能端对端的学习文本分割的阈值。这种自动调节阈值不仅能带来精度的提升,同时可以简化后处理,会进一步提高文本检测的性能。
03 具体代码实现
纸上谈兵终觉浅,绝知此事要躬行。我们先来导入好所有需要的Python工具包,通过查看具体代码的操作实践来实现OpenVINO对于PaddleOCR里面文本检测模型的推理。
进行推理之前,首先需要进行模型的下载。为了方便下载,我们定义了一个模型下载的函数,然后指定了下载的路径。在本次课程采用的是PaddleOCR mobile这样一个体积比较小的模型。

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

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

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

推理效果验证

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


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

本期课程大家学会了吗?
反正Nono已经get啦!
边栏推荐
- Decrypt the secret of 90% reduction in oom crash~
- Legendary server: what must be modified when the GOM geem2 engine is updated?
- Prepare for the interview and stick to the third sentence of the question - Branch sentences!
- A great thinking problem cf1671d insert a progression
- Why does redis cluster use reverse proxy? Just read this one
- 这种动态规划你见过吗——状态机动态规划之股票问题(中)
- Senior how to determine the standard of software test completion
- Legendary Internet Setup tutorial with graphic explanation - GOM engine
- JS ATM机输出
- CSDN21天学习挑战赛
猜你喜欢

2022最新抖音直播监控全套监控(五)商品详情监控

C语言实现五子棋游戏

MATLAB如何将k线图设置为经典红绿配色?

require、loadfile、dofile、load、loadstring

HarmonyOS 3纯净模式可限制华为应用市场检出的风险应用获取个人数据

『百日百题 · 基础篇』备战面试,坚持刷题 第三话——分支语句!

Implement Gobang game with C language

很棒的一个思维题CF1671D Insert a Progression

30余年的元宇宙,为我们带来了什么?
![[flight control development foundation tutorial 6] crazy shell · open source formation UAV SPI (six axis sensor data acquisition)](/img/75/509db67a580dd4b9849bea08845cc7.png)
[flight control development foundation tutorial 6] crazy shell · open source formation UAV SPI (six axis sensor data acquisition)
随机推荐
窗口函数over
Annual comprehensive analysis of China's online video market in 2022
荣耀多款产品齐发,笔记本MagicBook V 14售价6199元起
Have you ever seen this kind of dynamic programming -- the stock problem of state machine dynamic programming (Part 2)
BUUCTF-RSA4
2022最新抖音直播监控全套监控(五)商品详情监控
What a beautiful rainbow
Remote solution of Internet of things system in Mechanical Engineering
Notes on Shangpin project in shangsilicon Valley (I)
Shell(3)
Application scenario Display of metauniverse
洛谷 P1009 [NOIP1998 普及组] 阶乘之和
Understand the parental delegation model
Csdn21 day learning challenge
传奇外网架设教程带图文解说——Gom引擎
元宇宙的应用场景展示
永州水质检测实验室建设:家具说明
网站被黑后处理方法及删除批量恶意代码的方法步骤
ADB path cannot contain 2 spaces remote could n't create file: is a directory
Why does redis cluster use reverse proxy? Just read this one