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