武卓博士
英特尔AI软件布道师
曾主持国家级及省部级科研项目十余项;
已授权国际国内专利十余项。
光学字符识别(OCR)技术可以将文件、图片或自然场景中的文字信息进行识别并提取;与一系列的自然语言处理技术联合使用,能够完成诸如文档票据的文字信息自动化处理、图片文字实时翻译等任务。通过机器的自动化处理,可以帮助财务人员在处理票据时,省去大量手工输入的工作,也能够方便我们在出国旅游时,随时对异域中的外国文字信息进行实时翻译、减少语言不通带来的不便。
本篇我们将简要介绍PP-OCR的原理,以及利用OpenVINOTM 实现PP-OCR推理加速的工作流程。只需利用一页Jupyter Notebook,依照简单的三个步骤,即可利用CPU实现基于PP-OCR的实时文字信息提取。
PP-OCR是基于深度学习框架PaddlePaddle的一系列产业级OCR模型,具有超轻、模型小、便于移动端及服务器端部署等特点。整个PP-OCR技术的工作流程如下图所示,主要包括文本检测、方向分类、以及文本识别三部分。
文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题。但是,文本检测也面临一些难点,比如:自然场景中的文本具有多样性,文字大小、方向、长度、形状、语言都会有不同。有的时候,文字重叠或者密度较高,这些都会影响最终文本检测的效果。目前常用的文本检测方法有基于回归以及基于分割的方法。而在PP-OCR中,我们选取的是基于分割的DBNet【3】方法。
DBNet的工作原理如下图所示。在后处理阶段,基于分割的方法依赖特定阈值的二值化处理,从而导致了较长的后处理耗时,因而DBNet提出了一种可学习阈值的方法,并巧妙地设计了一个近似于阶跃函数的二值化函数,使得分割网络在训练的时候能端到的学习文本分割的阈值。自动调节阈值不仅带来精度的提升,同时简化了后处理,提高了文本检测的性能。
在本文中,我们采用的是基于CTC的方法。由于文本识别任务的特殊性,输入数据中存在大量的上下文信息,卷积神经网络的卷积核特性使其更关注于局部信息,缺乏长依赖的建模能力,因此仅使用CNN很难挖掘到文本之间的上下文联系。为了解决这一问题,首先通过使用CRNN (Convolutional Recurrent NeuralNetwork)【4】,利用卷积网络提取图像特征,并同时引入了双向 LSTM(Long Short-Term Memory) 用来增强上下文建模。最终将输出的特征序列输入到CTC模块, 通过CTC归纳字符间的连接特性,直接解码序列结果。该结构被验证有效,并广泛应用在文本识别任务中,如下图所示。
5分钟3步骤
快速实现PP-OCR实时推理
在最新版本的OpenVINOTM 2022.1中,已经实现了对基于PaddlePaddle深度学习框架的深度学习模型的支持。而PP-OCR作为一项深受广大开发者喜爱的开源技术,其中开源的预训练模型已经可以在OpenVINOTM 2022.1版本中直接进行模型读取以及加速推理。
接下来,我们将通过代码示例介绍如何通过简单的三个步骤,实现OpenVINOTM 对PP-OCR的加速推理。整个工作流程如下图所示:
1
下载需要使用的PP-OCR预训练模型
并完成模型的读取与加载
由于PP-OCR中包含了文本检测及文本识别两个深度学习模型,因此,我们首先定义一个模型下载函数,如下图所示。
接下来,完成文本检测模型的下载。
执行推理引擎的初始化、文本检测模型的读取以及在CPU上面的加载。
再然后,完成文本识别模型的下载。
执行文本识别模型的读取以及在CPU上面的加载。
在本步骤中,需要特别说明的是针对动态输入的处理(见下方代码段中注释)。由于文本识别模型的输入是文本检测得到的一系列bounding box图像,而图像中的字体由于大小和文字长短程度不一,就造成了文本识别模型的输入是动态输入的。与以往版本需要对图像尺寸进行重调整(resize)而将模型输入尺寸固定、从而可能引起性能损失的处理方法不同的是,OpenVINOTM 2022. 1版本已经可以很好的支持模型的动态输入。在CPU上进行文本识别模型加载之前,只需要对输入的若干维度中具有动态输入的维度赋值-1或申明动态输入尺寸的上限值,比如Dimension(1,512),即可完成对模型动态输入的处理。接下来,即可按常规步骤完成在CPU上加载文本识别模型。
关于模型的更多细节,可以通过以下链接至PaddleOCR的Github官方仓库查看:
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/README_ch.md
2
为文本检测及文本识别
定义必要的前处理及后处理函数
为文本识别模型定义必要的前处理函数,如下图所示。
为文本检测模型定义后处理函数,将文本检测模型的推理结果转为bounding box形式,作为文本识别模型的输入,如下图所示。
3
利用OpenVINO™ 推理引擎(Runtime)
针对摄像头采集视频进行实时推理
运行网络摄像头,将捕捉到的视频流作为PP-OCR的输入。
准备进行文本检测和文本识别的视频帧。
针对文本检测进行推理。
根据文本检测得到的bounding box,进行文本识别推理。
将文本提取的结果可视化。
结果讨论
我们可以看到,对于网络摄像头采集的视频流中的文字提取效果还是很不错的。仅仅利用CPU进行推理,即可得到30FPS以上的性能,可以说能够达到实时的推理效果!当然,除了视频流作为输入,开发者还可以上传图片,进行文本信息提取。以下是针对上传图片中印刷体文字和手写体文字信息提取的一些测试效果。
你还在等什么,快来根据我们提供的源代码,在自己的个人电脑上尝试一下吧!
小结
英特尔OpenVINO™ 开源工具套件详细资料
关于英特尔OpenVINOTM 开源工具套件的详细资料,包括其中Intel提供的三百多个通过验证并优化的预训练模型的详细资料。小编为你送上链接:
Jupyter notebook demo
OCR全栈技术书籍 |《动手学OCR》
扫描下方二维码
参考文献
关注【飞桨PaddlePaddle】公众号
获取更多技术内容~
武卓博士
英特尔AI软件布道师
曾主持国家级及省部级科研项目十余项;
已授权国际国内专利十余项。
光学字符识别(OCR)技术可以将文件、图片或自然场景中的文字信息进行识别并提取;与一系列的自然语言处理技术联合使用,能够完成诸如文档票据的文字信息自动化处理、图片文字实时翻译等任务。通过机器的自动化处理,可以帮助财务人员在处理票据时,省去大量手工输入的工作,也能够方便我们在出国旅游时,随时对异域中的外国文字信息进行实时翻译、减少语言不通带来的不便。
本篇我们将简要介绍PP-OCR的原理,以及利用OpenVINOTM 实现PP-OCR推理加速的工作流程。只需利用一页Jupyter Notebook,依照简单的三个步骤,即可利用CPU实现基于PP-OCR的实时文字信息提取。
PP-OCR是基于深度学习框架PaddlePaddle的一系列产业级OCR模型,具有超轻、模型小、便于移动端及服务器端部署等特点。整个PP-OCR技术的工作流程如下图所示,主要包括文本检测、方向分类、以及文本识别三部分。
文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务,目标检测不仅要解决定位问题,还要解决目标分类问题。但是,文本检测也面临一些难点,比如:自然场景中的文本具有多样性,文字大小、方向、长度、形状、语言都会有不同。有的时候,文字重叠或者密度较高,这些都会影响最终文本检测的效果。目前常用的文本检测方法有基于回归以及基于分割的方法。而在PP-OCR中,我们选取的是基于分割的DBNet【3】方法。
DBNet的工作原理如下图所示。在后处理阶段,基于分割的方法依赖特定阈值的二值化处理,从而导致了较长的后处理耗时,因而DBNet提出了一种可学习阈值的方法,并巧妙地设计了一个近似于阶跃函数的二值化函数,使得分割网络在训练的时候能端到的学习文本分割的阈值。自动调节阈值不仅带来精度的提升,同时简化了后处理,提高了文本检测的性能。
在本文中,我们采用的是基于CTC的方法。由于文本识别任务的特殊性,输入数据中存在大量的上下文信息,卷积神经网络的卷积核特性使其更关注于局部信息,缺乏长依赖的建模能力,因此仅使用CNN很难挖掘到文本之间的上下文联系。为了解决这一问题,首先通过使用CRNN (Convolutional Recurrent NeuralNetwork)【4】,利用卷积网络提取图像特征,并同时引入了双向 LSTM(Long Short-Term Memory) 用来增强上下文建模。最终将输出的特征序列输入到CTC模块, 通过CTC归纳字符间的连接特性,直接解码序列结果。该结构被验证有效,并广泛应用在文本识别任务中,如下图所示。
5分钟3步骤
快速实现PP-OCR实时推理
在最新版本的OpenVINOTM 2022.1中,已经实现了对基于PaddlePaddle深度学习框架的深度学习模型的支持。而PP-OCR作为一项深受广大开发者喜爱的开源技术,其中开源的预训练模型已经可以在OpenVINOTM 2022.1版本中直接进行模型读取以及加速推理。
接下来,我们将通过代码示例介绍如何通过简单的三个步骤,实现OpenVINOTM 对PP-OCR的加速推理。整个工作流程如下图所示:
1
下载需要使用的PP-OCR预训练模型
并完成模型的读取与加载
由于PP-OCR中包含了文本检测及文本识别两个深度学习模型,因此,我们首先定义一个模型下载函数,如下图所示。
接下来,完成文本检测模型的下载。
执行推理引擎的初始化、文本检测模型的读取以及在CPU上面的加载。
再然后,完成文本识别模型的下载。
执行文本识别模型的读取以及在CPU上面的加载。
在本步骤中,需要特别说明的是针对动态输入的处理(见下方代码段中注释)。由于文本识别模型的输入是文本检测得到的一系列bounding box图像,而图像中的字体由于大小和文字长短程度不一,就造成了文本识别模型的输入是动态输入的。与以往版本需要对图像尺寸进行重调整(resize)而将模型输入尺寸固定、从而可能引起性能损失的处理方法不同的是,OpenVINOTM 2022. 1版本已经可以很好的支持模型的动态输入。在CPU上进行文本识别模型加载之前,只需要对输入的若干维度中具有动态输入的维度赋值-1或申明动态输入尺寸的上限值,比如Dimension(1,512),即可完成对模型动态输入的处理。接下来,即可按常规步骤完成在CPU上加载文本识别模型。
关于模型的更多细节,可以通过以下链接至PaddleOCR的Github官方仓库查看:
https://github.com/PaddlePaddle/PaddleOCR/blob/release/2.5/README_ch.md
2
为文本检测及文本识别
定义必要的前处理及后处理函数
为文本识别模型定义必要的前处理函数,如下图所示。
为文本检测模型定义后处理函数,将文本检测模型的推理结果转为bounding box形式,作为文本识别模型的输入,如下图所示。
3
利用OpenVINO™ 推理引擎(Runtime)
针对摄像头采集视频进行实时推理
运行网络摄像头,将捕捉到的视频流作为PP-OCR的输入。
准备进行文本检测和文本识别的视频帧。
针对文本检测进行推理。
根据文本检测得到的bounding box,进行文本识别推理。
将文本提取的结果可视化。
结果讨论
我们可以看到,对于网络摄像头采集的视频流中的文字提取效果还是很不错的。仅仅利用CPU进行推理,即可得到30FPS以上的性能,可以说能够达到实时的推理效果!当然,除了视频流作为输入,开发者还可以上传图片,进行文本信息提取。以下是针对上传图片中印刷体文字和手写体文字信息提取的一些测试效果。
你还在等什么,快来根据我们提供的源代码,在自己的个人电脑上尝试一下吧!
小结
英特尔OpenVINO™ 开源工具套件详细资料
关于英特尔OpenVINOTM 开源工具套件的详细资料,包括其中Intel提供的三百多个通过验证并优化的预训练模型的详细资料。小编为你送上链接:
Jupyter notebook demo
OCR全栈技术书籍 |《动手学OCR》
扫描下方二维码
参考文献
关注【飞桨PaddlePaddle】公众号
获取更多技术内容~