作者
武卓博士
曾主持國(guó)家級(jí)及省部級(jí)科研項(xiàng)目十余項(xiàng),已授權(quán)國(guó)際國(guó)內(nèi)專利十余項(xiàng)。
前言:該技術(shù)能讓PaddleOCR的開(kāi)發(fā)者在筆記本電腦上即可獲得超越40FPS的速度,極大降低了PaddleOCR的部署成本。
簡(jiǎn)介
在上篇文章中我們介紹過(guò),光學(xué)字符識(shí)別(OCR)技術(shù)可以將文件、圖片或自然場(chǎng)景中的文字信息進(jìn)行識(shí)別并提取,與一系列的自然語(yǔ)言處理技術(shù)聯(lián)合使用,能夠完成諸如文檔票據(jù)的文字信息自動(dòng)化處理、實(shí)時(shí)圖片文字翻譯等任務(wù)。通過(guò)機(jī)器的自動(dòng)化處理,可以幫助財(cái)務(wù)人員在處理票據(jù)時(shí)省卻大量手工輸入的工作量,也能夠方便我們?cè)诔鰢?guó)旅游時(shí)隨時(shí)對(duì)異域中的外國(guó)文字信息進(jìn)行實(shí)時(shí)翻譯、減少語(yǔ)言不通帶來(lái)的不便。
既然OCR技術(shù)如此實(shí)用,有沒(méi)有什么方法能讓我們利用自己手邊的設(shè)備,隨時(shí)使用到這項(xiàng)技術(shù)呢?答案當(dāng)然是肯定的。接下來(lái),我們將以百度開(kāi)源的PaddleOCR1-2 技術(shù)為例,具體介紹如何利用英特爾開(kāi)源的OpenVINO 工具套件,僅使用我們手邊都有的CPU就能輕松實(shí)現(xiàn)對(duì)PaddleOCR的實(shí)時(shí)推理。
本篇是用OpenVINO 工具套件實(shí)現(xiàn)基于OCR及NLP輕松實(shí)現(xiàn)信息自動(dòng)化提取的系列博客中的第二篇。我們將簡(jiǎn)要介紹PaddleOCR的原理,以及利用OpenVINO 工具套件實(shí)現(xiàn)PaddleOCR推理加速的工作流程。同樣只需利用一頁(yè)Jupyter notebook,依照簡(jiǎn)單的三個(gè)步驟,即可利用CPU實(shí)現(xiàn)基于PaddleOCR的實(shí)時(shí)文字信息提取。
PaddleOCR原理簡(jiǎn)介
PaddleOCR是基于深度學(xué)習(xí)框架PaddlePaddle的一項(xiàng)OCR技術(shù),具有超輕、模型小、便于移動(dòng)端及服務(wù)器端部署等特點(diǎn)。整個(gè)PaddleOCR技術(shù)的工作流程如下圖所示,主要包括文本檢測(cè)、方向分類、以及文本識(shí)別三部分。
文本檢測(cè)任務(wù)是找出圖像或視頻中的文字位置。不同于目標(biāo)檢測(cè)任務(wù),目標(biāo)檢測(cè)不僅要解決定位問(wèn)題,還要解決目標(biāo)分類問(wèn)題。但是,文本檢測(cè)也面臨一些難點(diǎn),比如:自然場(chǎng)景中的文本具有多樣性,文字大小、方向、長(zhǎng)度、形狀、語(yǔ)言都會(huì)有不同。有的時(shí)候,文字重疊或者密度較高,這些都會(huì)影響最終文本檢測(cè)的效果。目前常用的文本檢測(cè)方法有基于回歸以及基于分割的方法。而在PaddleOCR中,我們選取的是基于分割的DBNet3方法。
DBNet的工作原理如下圖所示。針對(duì)基于分割的方法需要使用閾值進(jìn)行二值化處理而導(dǎo)致后處理耗時(shí)的問(wèn)題,DBNet提出了一種可學(xué)習(xí)閾值的方法,并巧妙地設(shè)計(jì)了一個(gè)近似于階躍函數(shù)的二值化函數(shù),使得分割網(wǎng)絡(luò)在訓(xùn)練的時(shí)候能端對(duì)端的學(xué)習(xí)文本分割的閾值。自動(dòng)調(diào)節(jié)閾值不僅帶來(lái)精度的提升,同時(shí)簡(jiǎn)化了后處理,提高了文本檢測(cè)的性能。
方向分類指的是針對(duì)圖片中某些經(jīng)文本檢測(cè)得到的bounding box中的文字方向?yàn)榉撬脚帕械那闆r,對(duì)bounding box的方向進(jìn)行檢測(cè)。如果發(fā)現(xiàn)bounding box中的文字方向?yàn)榉撬脚帕?,則對(duì)該bounding box的方向進(jìn)行糾正,使其旋轉(zhuǎn)為文字水平排列的方向,方便下一步的文本識(shí)別。
文本識(shí)別的任務(wù)是將文本檢測(cè)得到的bounding box中的具體的文字內(nèi)容識(shí)別出來(lái)。文本識(shí)別的算法有針對(duì)規(guī)則文本以及不規(guī)則文本識(shí)別的算法。對(duì)于規(guī)則文本,主流的算法CTC(Conectionist Temporal Classification)和基于Sequence2Sequence 的方法。
在本文demo中,我們采用的是基于CTC的方法。由于文本識(shí)別任務(wù)的特殊性,輸入數(shù)據(jù)中存在大量的上下文信息,卷積神經(jīng)網(wǎng)絡(luò)的卷積核特性使其更關(guān)注于局部信息,缺乏長(zhǎng)依賴的建模能力,因此僅使用CNN很難挖掘到文本之間的上下文聯(lián)系。
為了解決這一問(wèn)題,首先通過(guò)使用CRNN (Convolutional Recurrent Neural Network)4 ,利用卷積網(wǎng)絡(luò)提取圖像特征,并同時(shí)引入了雙向 LSTM(Long Short-Term Memory) 用來(lái)增強(qiáng)上下文建模。最終將輸出的特征序列輸入到CTC模塊, 通過(guò)ctc歸納字符間的連接特性,直接解碼序列結(jié)果。該結(jié)構(gòu)被驗(yàn)證有效,并廣泛應(yīng)用在文本識(shí)別任務(wù)中, 如下圖所示。
5分鐘 3步驟
快速實(shí)現(xiàn)PaddleOCR實(shí)時(shí)推理
在最新版本的OpenVINO 2022.1中,已經(jīng)實(shí)現(xiàn)了對(duì)基于PaddlePaddle深度學(xué)習(xí)框架的深度學(xué)習(xí)模型的支持。而PaddleOCR作為一項(xiàng)深受廣大開(kāi)發(fā)者喜愛(ài)的開(kāi)源技術(shù),其中開(kāi)源的預(yù)訓(xùn)練模型已經(jīng)可以在OpenVINO 2022.1版本中直接進(jìn)行模型讀取以及加速推理。
接下來(lái),我們將通過(guò)代碼示例,介紹如何按照簡(jiǎn)單的三個(gè)步驟,實(shí)現(xiàn)OpenVINO 工具套件對(duì)PaddleOCR的加速推理。整個(gè)工作流程如下圖所示:
其中OpenVINO 工具套件會(huì)對(duì)PaddleOCR中的文本檢測(cè)以及文本識(shí)別模型進(jìn)行讀取以及推理加速。本次demo中我們展示的是利用自己的網(wǎng)絡(luò)攝像頭,將實(shí)時(shí)獲取的視頻流中的文字信息利用PaddleOCR進(jìn)行提取。當(dāng)然,開(kāi)發(fā)者也可以上傳圖片,利用OpenVINO 工具套件對(duì)PaddleOCR的推理實(shí)現(xiàn)對(duì)圖片中的文字信息進(jìn)行提取。
步驟一:下載需要使用的PaddleOCR預(yù)訓(xùn)練模型,并完成模型的讀取與加載
在導(dǎo)入需要使用到的相應(yīng)Python包后,首先需要對(duì)將要使用的PaddleOCR開(kāi)源預(yù)訓(xùn)練模型進(jìn)行下載。本次demo中使用到的是輕量化的"Chinese and English ultra-lightweight PP-OCR model (9.4M)"模型。由于PaddleOCR中包含了文本檢測(cè)及文本識(shí)別兩個(gè)深度學(xué)習(xí)模型,因此,我們首先定義一個(gè)模型下載函數(shù),如下圖所示。
接下來(lái),完成文本檢測(cè)模型的下載,
以及推理引擎的初始化、文本檢測(cè)模型的讀取以及在 CPU上面的加載。
再然后,完成文本識(shí)別模型的下載,
以及文本識(shí)別模型的讀取以及在CPU上面的加載。其中,有一步需要特別說(shuō)明的是,動(dòng)態(tài)輸入的處理。
由于文本識(shí)別模型的輸入是文本檢測(cè)得到的一系列bounding box圖像,而圖像中的字體由于大小和文字長(zhǎng)短程度不一,就造成了文本識(shí)別模型的輸入是動(dòng)態(tài)輸入的。與以往版本需要對(duì)圖像尺寸進(jìn)行重調(diào)整(resize)而將模型輸入尺寸固定、從而可能引起性能損失的處理方法不同的是,OpenVINO 2022. 1版本已經(jīng)可以很好的支持模型的動(dòng)態(tài)輸入。
在CPU上進(jìn)行文本識(shí)別模型加載之前,只需要對(duì)于輸入的若干維度中具有動(dòng)態(tài)輸入的維度賦值-1或申明動(dòng)態(tài)輸入尺寸的上限值,比如Dimension(1,512),即可完成對(duì)模型動(dòng)態(tài)輸入的處理。接下來(lái),即可按常規(guī)步驟完成在CPU上加載文本識(shí)別模型。
步驟二:為文本檢測(cè)及文本識(shí)別定義必要的前處理及后處理函數(shù)。
為文本檢測(cè)模型定義必要的前處理函數(shù),如下圖所示
為文本識(shí)別模型定義必要的前處理函數(shù),如下圖所示
為文本檢測(cè)模型定義后處理函數(shù),將文本檢測(cè)模型的推理結(jié)果轉(zhuǎn)為bounding box形式,作為文本識(shí)別模型的輸入,如下圖所示。
步驟三:利用OpenVINO 工具套件推理引擎(Runtime)針對(duì)攝像頭采集視頻進(jìn)行實(shí)時(shí)推理
定義運(yùn)行PaddleOCR模型推理的主函數(shù),主要包括以下四個(gè)部分:
01運(yùn)行網(wǎng)絡(luò)攝像頭,將捕捉到的視頻流作為paddleOCR的輸入
02準(zhǔn)備進(jìn)行文本檢測(cè)和文本識(shí)別的視頻幀
03針對(duì)文本檢測(cè)進(jìn)行推理
根據(jù)文本檢測(cè)得到的bounding box,進(jìn)行文本識(shí)別推理
04將文本提取的結(jié)果可視化
結(jié)果討論
下面我們來(lái)看看運(yùn)行結(jié)果吧:
我們可以看到,對(duì)于網(wǎng)絡(luò)攝像頭采集的視頻流中的文字提取效果還是很不錯(cuò)的。僅僅利用CPU進(jìn)行推理,也可以得到30FPS以上的性能,可以說(shuō)能夠達(dá)到實(shí)時(shí)的推理效果!當(dāng)然,除了視頻流作為輸入,開(kāi)發(fā)者還可以上傳圖片,進(jìn)行文本信息提取。以下是針對(duì)上傳圖片中印刷體文字和手寫體文字信息提取的一些測(cè)試效果。
你還在等什么,快來(lái)根據(jù)我們提供的源代碼,在自己的個(gè)人電腦上嘗試一下吧!
小結(jié)
OCR具有將圖片、掃描文檔或自然場(chǎng)景中的文字信息識(shí)別轉(zhuǎn)化為數(shù)字化、機(jī)器編碼方式存儲(chǔ)的優(yōu)勢(shì)。將OCR進(jìn)行文字識(shí)別的結(jié)果與自然語(yǔ)言處理中的NLP技術(shù)相結(jié)合,能夠?qū)崿F(xiàn)自動(dòng)化的信息提取,為我們免去手動(dòng)輸入信息填寫的麻煩,并有助于信息的結(jié)構(gòu)化存儲(chǔ)與查找。在本次系列博客的第二篇中,我們簡(jiǎn)要介紹了PaddleOCR的工作原理,并提供了一個(gè)基于OpenVINO 工具套件實(shí)現(xiàn)PaddleOCR的Jupyter notebook demo??梢苑奖阕x者在閱讀的同時(shí),下載源碼并在自己的電腦端利用CPU來(lái)輕松實(shí)現(xiàn)PaddleOCR的加速推理。
原文標(biāo)題:用OpenVINO? 輕松實(shí)現(xiàn)PaddleOCR實(shí)時(shí)推理 | 開(kāi)發(fā)者實(shí)戰(zhàn)
文章出處:【微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
-
英特爾
+關(guān)注
關(guān)注
61文章
10007瀏覽量
172204 -
OCR
+關(guān)注
關(guān)注
0文章
146瀏覽量
16413 -
深度學(xué)習(xí)
+關(guān)注
關(guān)注
73文章
5512瀏覽量
121443
原文標(biāo)題:用OpenVINO? 輕松實(shí)現(xiàn)PaddleOCR實(shí)時(shí)推理 | 開(kāi)發(fā)者實(shí)戰(zhàn)
文章出處:【微信號(hào):英特爾物聯(lián)網(wǎng),微信公眾號(hào):英特爾物聯(lián)網(wǎng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論