前言:該技術(shù)能讓PaddleOCR的開發(fā)者在筆記本電腦上即可獲得超越40FPS的速度,極大降低了PaddleOCR的部署成本。
簡介
在上篇文章中我們介紹過,光學(xué)字符識(shí)別(OCR)技術(shù)可以將文件、圖片或自然場景中的文字信息進(jìn)行識(shí)別并提取,與一系列的自然語言處理技術(shù)聯(lián)合使用,能夠完成諸如文檔票據(jù)的文字信息自動(dòng)化處理、實(shí)時(shí)圖片文字翻譯等任務(wù)。通過機(jī)器的自動(dòng)化處理,可以幫助財(cái)務(wù)人員在處理票據(jù)時(shí)省卻大量手工輸入的工作量,也能夠方便我們?cè)诔鰢糜螘r(shí)隨時(shí)對(duì)異域中的外國文字信息進(jìn)行實(shí)時(shí)翻譯、減少語言不通帶來的不便。
既然OCR技術(shù)如此實(shí)用,有沒有什么方法能讓我們利用自己手邊的設(shè)備,隨時(shí)使用到這項(xiàng)技術(shù)呢?答案當(dāng)然是肯定的。接下來,我們將以百度開源的PaddleOCR1-2 技術(shù)為例,具體介紹如何利用英特爾開源的OpenVINO™ 工具套件,僅使用我們手邊都有的CPU就能輕松實(shí)現(xiàn)對(duì)PaddleOCR的實(shí)時(shí)推理。
本篇是用OpenVINO™ 工具套件實(shí)現(xiàn)基于OCR及NLP輕松實(shí)現(xiàn)信息自動(dòng)化提取的系列博客中的第二篇。我們將簡要介紹PaddleOCR的原理,以及利用OpenVINO™ 工具套件實(shí)現(xiàn)PaddleOCR推理加速的工作流程。同樣只需利用一頁Jupyter notebook,依照簡單的三個(gè)步驟,即可利用CPU實(shí)現(xiàn)基于PaddleOCR的實(shí)時(shí)文字信息提取。
PaddleOCR原理簡介
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è)不僅要解決定位問題,還要解決目標(biāo)分類問題。但是,文本檢測(cè)也面臨一些難點(diǎn),比如:自然場景中的文本具有多樣性,文字大小、方向、長度、形狀、語言都會(huì)有不同。有的時(shí)候,文字重疊或者密度較高,這些都會(huì)影響最終文本檢測(cè)的效果。目前常用的文本檢測(cè)方法有基于回歸以及基于分割的方法。而在PaddleOCR中,我們選取的是基于分割的DBNet3方法。
DBNet的工作原理如下圖所示。針對(duì)基于分割的方法需要使用閾值進(jìn)行二值化處理而導(dǎo)致后處理耗時(shí)的問題,DBNet提出了一種可學(xué)習(xí)閾值的方法,并巧妙地設(shè)計(jì)了一個(gè)近似于階躍函數(shù)的二值化函數(shù),使得分割網(wǎng)絡(luò)在訓(xùn)練的時(shí)候能端對(duì)端的學(xué)習(xí)文本分割的閾值。自動(dòng)調(diào)節(jié)閾值不僅帶來精度的提升,同時(shí)簡化了后處理,提高了文本檢測(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í)別出來。文本識(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)注于局部信息,缺乏長依賴的建模能力,因此僅使用CNN很難挖掘到文本之間的上下文聯(lián)系。
為了解決這一問題,首先通過使用CRNN (Convolutional Recurrent Neural Network)4 ,利用卷積網(wǎng)絡(luò)提取圖像特征,并同時(shí)引入了雙向 LSTM(Long Short-Term Memory) 用來增強(qiáng)上下文建模。最終將輸出的特征序列輸入到CTC模塊, 通過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)深受廣大開發(fā)者喜愛的開源技術(shù),其中開源的預(yù)訓(xùn)練模型已經(jīng)可以在OpenVINO™ 2022.1版本中直接進(jì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)然,開發(fā)者也可以上傳圖片,利用OpenVINO™ 工具套件對(duì)PaddleOCR的推理實(shí)現(xiàn)對(duì)圖片中的文字信息進(jìn)行提取。
步驟一:下載需要使用的PaddleOCR預(yù)訓(xùn)練模型,并完成模型的讀取與加載
在導(dǎo)入需要使用到的相應(yīng)Python包后,首先需要對(duì)將要使用的PaddleOCR開源預(yù)訓(xùn)練模型進(jìn)行下載。本次demo中使用到的是輕量化的"Chinese and English ultra-lightweight PP-OCR model (9.4M)"模型。由于PaddleOCR中包含了文本檢測(cè)及文本識(shí)別兩個(gè)深度學(xué)習(xí)模型,因此,我們首先定義一個(gè)模型下載函數(shù),如下圖所示。
接下來,完成文本檢測(cè)模型的下載,
以及推理引擎的初始化、文本檢測(cè)模型的讀取以及在 CPU上面的加載。
再然后,完成文本識(shí)別模型的下載,
以及文本識(shí)別模型的讀取以及在CPU上面的加載。其中,有一步需要特別說明的是,動(dòng)態(tài)輸入的處理。
由于文本識(shí)別模型的輸入是文本檢測(cè)得到的一系列bounding box圖像,而圖像中的字體由于大小和文字長短程度不一,就造成了文本識(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)輸入的處理。接下來,即可按常規(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é)果可視化
整個(gè)demo實(shí)現(xiàn)的完整代碼請(qǐng)您點(diǎn)擊閱讀原文獲取。
結(jié)果討論
下面我們來看看運(yùn)行結(jié)果吧:
我們可以看到,對(duì)于網(wǎng)絡(luò)攝像頭采集的視頻流中的文字提取效果還是很不錯(cuò)的。僅僅利用CPU進(jìn)行推理,也可以得到30FPS以上的性能,可以說能夠達(dá)到實(shí)時(shí)的推理效果!當(dāng)然,除了視頻流作為輸入,開發(fā)者還可以上傳圖片,進(jìn)行文本信息提取。以下是針對(duì)上傳圖片中印刷體文字和手寫體文字信息提取的一些測(cè)試效果。
[('2021年', 0.9998825),
('上海市初中英語', 0.99546415),
('考綱詞匯用法手冊(cè)', 0.9261546),
('配套綜合練習(xí)', 0.9912483),
('本書編寫組', 0.98184997),
('上海譯文出版社', 0.99167067)]
[('結(jié)廬在人境品無車馬喧', 0.7947353),
('問君何能爾心遠(yuǎn)地自偏采前', 0.78279585),
('東鶴下您然見南山山氣日夕', 0.88027453),
('佳飛鳥相與還此中有真意欲', 0.86756784),
('辯已意言', 0.3859764)]
你還在等什么,快來根據(jù)我們提供的源代碼,在自己的個(gè)人電腦上嘗試一下吧!
小結(jié)
OCR具有將圖片、掃描文檔或自然場景中的文字信息識(shí)別轉(zhuǎn)化為數(shù)字化、機(jī)器編碼方式存儲(chǔ)的優(yōu)勢(shì)。將OCR進(jìn)行文字識(shí)別的結(jié)果與自然語言處理中的NLP技術(shù)相結(jié)合,能夠?qū)崿F(xiàn)自動(dòng)化的信息提取,為我們免去手動(dòng)輸入信息填寫的麻煩,并有助于信息的結(jié)構(gòu)化存儲(chǔ)與查找。在本次系列博客的第二篇中,我們簡要介紹了PaddleOCR的工作原理,并提供了一個(gè)基于OpenVINO™ 工具套件實(shí)現(xiàn)PaddleOCR的Jupyter notebook demo??梢苑奖阕x者在閱讀的同時(shí),下載源碼并在自己的電腦端利用CPU來輕松實(shí)現(xiàn)PaddleOCR的加速推理。
除此之外,為了方便大家了解并快速掌握OpenVINO™ 工具套件的使用,我們還提供了一系列開源的Jupyter notebook demo。運(yùn)行這些notebook,就能快速了解在不同場景下如何利用OpenVINO™ 工具套件實(shí)現(xiàn)一系列、包括OCR在內(nèi)的、計(jì)算機(jī)視覺及自然語言處理任務(wù)。OpenVINO™ notebook的資源可以在Github這里下載安裝:https://github.com/openvinotoolkit/openvino_notebooks
武卓博士
曾主持國家級(jí)及省部級(jí)科研項(xiàng)目十余項(xiàng),已授權(quán)國際國內(nèi)專利十余項(xiàng)。
參考文獻(xiàn):
[1] Du Yuning, Chenxia Li, Guo Ruoyu, Xiaoting Yin, Weiwei Liu, Jun Zhou, Yifan Bai, Yu Zilin, Yehua Yang, Qingqing Dang and Haoshuang Wang. PP-OCR: A Practical Ultra Lightweight OCR System. In arXiv: Computer Vision and Pattern Recognition (2020): n. pag.
[2] Yuning Du, Chenxia Li, Ruoyu Guo, Cheng Cui, Weiwei Liu, Jun Zhou, Bin Lu, Yehua Yang, Qiwen Liu, Xiaoguang Hu, Dianhai Yu and Yanjun Ma. PP-OCRv2: Bag of Tricks for Ultra Lightweight OCR System. In arXiv: Computer Vision and Pattern Recognition (2021): n. pag.
[3] Minghui Liao, Zhaoyi Wan, Cong Yao, Kai Chen and Xiang Bai. Real-Time Scene Text Detection with Differentiable Binarization. In National Conference on Artificial Intelligence (2020).
[4] Baoguang Shi, Xiang Bai and Cong Yao. An End-to-End Trainable Neural Network for Image-Based Sequence Recognition and Its Application to Scene Text Recognition. In IEEE Transactions on Pattern Analysis and Machine Intelligence 39 (2017): 2298-2304.
* 本文內(nèi)容及配圖均為“英特爾物聯(lián)網(wǎng)”的原創(chuàng)內(nèi)容。該公眾號(hào)的運(yùn)營主體擁有上述內(nèi)容的著作權(quán)或相應(yīng)許可。除在微信朋友圈分享之外,如未經(jīng)該運(yùn)營主體書面同意,請(qǐng)勿轉(zhuǎn)載、轉(zhuǎn)帖或以其他任何方式復(fù)制、發(fā)表或發(fā)布上述內(nèi)容。如需轉(zhuǎn)載上述內(nèi)容或其中任何部分,請(qǐng)留言聯(lián)系。