OCR入门教程系列(一):OCR基础导论
👨?💻作者簡介: 大數據專業碩士在讀,CSDN人工智能領域博客專家,阿里云專家博主,專注大數據與人工智能知識分享。公眾號: GoAI的學習小屋,免費分享書籍、簡歷、導圖等資料,更有交流群分享AI和大數據,加群方式公眾號回復“加群”或??點擊鏈接。
🎉專欄推薦: 目前在寫一個CV方向專欄,后期會更新不限于深度學習、OCR、目標檢測、圖像分類、圖像分割等方向,目前活動僅19.9,雖然付費但會長期更新且價格便宜,感興趣的小伙伴可以關注下,有擅長CV的大佬可以聯系我合作一起寫。??專欄地址
🎉學習者福利: 強烈推薦一個優秀AI學習網站,包括機器學習、深度學習等理論與實戰教程,非常適合AI學習者。??網站鏈接。
🎉技術控福利: 程序員兼職社區招募!技術范圍廣,CV、NLP方向均可,要求有一定基礎,最好是研究生及以上或有工作經驗,歡迎大佬加入!群內Python、c++、Matlab等各類編程語言單應有盡有, 資源靠譜、費用自談,有意向者直接??訪問。
📝OCR專欄導讀:
本專欄為付費專欄,主要介紹計算機視覺領域OCR文字識別領域技術發展方向,將分章節從OCR技術發展、概念、算法、論文、數據集、現有平臺及未來發展方向等各種角度展開詳細介紹,綜合基礎與實戰知識。
以下是本系列目錄,分為前置篇、基礎篇與進階篇,進階篇在基礎篇基礎上進行全面總結,會針對最經典論文及最新算法展開講解,內容目前包括不限于文字檢測、識別、表格分析等方向。 未來看情況更新NLP方向知識,本專欄目前主要面向深度學習及CV的同學學習,希望能夠大家訂閱交流,如有錯誤請大家在評論區指正,如有侵權聯系刪除。
🍀歡迎大家加入文章最上方交流群,群內將分享更多大數據與人工智能方向知識資料,會有一些學習及其他福利!
?前置:深度學習基礎系列
1??深入淺出OCR前置篇 【機器學習概念總結】
2??深入淺出OCR前置篇 【深度學習概念總結】
3??深入淺出OCR前置篇 【卷積神經網絡總結】
4??深入淺出OCR前置篇 【循環神經網絡總結】
5??深入淺出OCR前置篇 【注意力機制系列總結】
6??深入淺出OCR前置篇 【OpenCV系列總結】
📝基礎:OCR入門教程系列目錄
1??OCR系列第一章 【OCR技術導論】:OCR文字識別技術總結(一) [試讀]
2??OCR系列第二章 【OCR基礎介紹】:OCR文字識別技術總結(二)
3??OCR系列第三章 【文字檢測技術】:OCR文字識別技術總結(三)
4??OCR系列第四章 【文字識別技術】:OCR文字識別技術總結(四)
5??OCR系列第五章 【實戰代碼解析】:OCR文字識別技術總結(五)
📝進階:深入淺出OCR系列目錄
🍀目錄導圖版本:
注:以上系列將繼續更新及完善,非最終版本!后續更新內容包括不限于文字檢測、文件識別、表格識別、版面分析、糾錯及結構化、部署及實戰等方面內容,歡迎大家訂閱該專欄! [ 歡迎入群交流,群內將分享更多大數據與人工智能方向知識。]
📝OCR領域經典論文匯總:
1??OCR文字識別經典論文詳解 [試讀]
2??OCR文字識別方法綜述
3??場景識別文字識別綜述(待更新)
4??文字檢測方法綜述(待更新)
📝OCR領域論文詳解系列:
1??CRNN:CRNN文字識別 [試讀]
2??ASTER:ASTER文本識別詳解
🆙目前在整理階段,后續會更新其他文字檢測與識別方向論文解讀。
📝OCR項目實戰系列:
🍀參考《深入淺出OCR》目錄
注:更多實戰項目敬請期待,詳細介紹可以參考本系列其他文章,每個系列對應部分會陸續更新,歡迎大家交流訂閱!!
一、OCR概念及發展
OCR (Optical Character Recognition,光學字符識別)是指電子設備(例如掃描儀或數碼相機)檢查紙上打印的字符,經過檢測暗、亮的模式肯定其形狀,而后用字符識別方法將形狀翻譯成計算機文字的過程;即,針對印刷體字符,采用光學的方式將紙質文檔中的文字轉換成為黑白點陣的圖像文件,并經過識別軟件將圖像中的文字轉換成文本格式,供文字處理軟件進一步編輯加工的技術。如何除錯或利用輔助信息提升識別正確率,是OCR最重要的課題,ICR(Intelligent Character Recognition)的名詞也隨之產生。
簡單來說,OCR識別就是光學文字識別,是指通過圖像處理和模式識別技術對光學的字符進行識別。**它是計算機視覺研究領域的分支之一,是計算機科學的重要組成部分。衡量一個OCR系統性能好壞的主要指標有:拒識率、誤識率、識別速度、用戶界面的友好性,產品的穩定性,易用性及可行性等。
二、OCR發展
OCR的概念是在1929年由德國科學家Tausheck最早提出來的,后來美國科學家Handel也提出了利用技術對文字進行識別的想法。而最先對印刷體漢字識別進行研究的是IBM公司的Casey和Nagy,1966年他們發表了第一篇關于漢字識別的文章,采用了模板匹配法識別了1000個印刷體漢字。
早在60、70年代,世界各國就開始有OCR的研究,而研究的初期,多以文字的識別方法研究為主,且識別的文字僅為0至9的數字。以一樣擁有方塊文字的日本為例,1960年左右開始研究OCR的基本識別理論,初期以數字為對象,直至1965至1970年之間開始有一些簡單的產品,如印刷文字的郵政編碼識別系統,識別郵件上的郵政編碼,幫助郵局做區域分信的做業;也所以至今郵政編碼一直是各國所倡導的地址書寫方式。
20世紀70年代初,日本的學者開始研究漢字識別,并作了大量的工做。中國在OCR技術方面的研究工做起步較晚,在70年代才開始對數字、英文字母及符號的識別進行研究,70年代末開始進行漢字識別的研究,到1986年,我國提出“863”高新科技研究計劃,漢字識別的研究進入一個實質性的階段,清華大學的丁曉青教授和中科院分別開發研究,相繼推出了中文OCR產品,現為中國最領先漢字OCR技術。早期的OCR軟件,因為識別率及產品化等多方面的因素,未能達到實際要求。同時,因為硬件設備成本高,運行速度慢,也沒有達到實用的程度。只有個別部門,如信息部門、新聞出版單位等使用OCR軟件。進入20世紀90年代之后,隨著平臺式掃描儀的普遍應用,以及我國信息自動化和辦公自動化的普及,大大推進了OCR技術的進一步發展,使OCR的識別正確率、識別速度知足了廣大用戶的要求。
三、OCR的應用場景
根據OCR的應用場景而言,我們可以大致分成識別特定場景下的專用OCR以及識別多種場景下的通用OCR。就前者而言,證件識別以及車牌識別就是專用OCR的典型案例。針對特定場景進行設計、優化以達到最好的特定場景下的效果展示。那通用的OCR就是使用在更多、更復雜的場景下,擁有比較好的泛性。在這個過程中由于場景的不確定性,比如:圖片背景極其豐富、亮度不均衡、光照不均衡、殘缺遮擋、文字扭曲、字體多樣等等問題,會帶來極大的挑戰。
文檔文字識別:可以將圖書館、報社、博物館、檔案館等的紙質版圖書、報紙、雜志、歷史文獻檔案資料等進行電子化管理,實現精準地保存文獻資料。
自然場景文字識別:識別自然場景圖像中的文字信息如車牌、廣告干詞、路牌等信息。對車輛進行識別可以實現停車場收費管理、交通流量控制指標測量、車輛定位、防盜、高速公路超速自動化監管等功能。
票據文字識別:可以對增值稅發票、報銷單、車票等不同格式的票據進行文字識別,可以避免財務人員手動輸入大量票據信息,如今已廣泛應用于財務管理、銀行、金融等眾多領域。。
證件識別:可以快速識別身份證、銀行卡、駕駛證等卡證類信息,將證件文字信息直接轉換為可編輯文本,可以大大提高工作效率、減少人工成本、還可以實時進行相關人員的身份核驗,以便安全管理。
OCR生態:
四、OCR的技術路線
典型的OCR技術路線如下圖所示:
其中OCR識別的關鍵路徑在于文字檢測和文本識別部分,這也是深度學習技術可以充分發揮功效的地方。
1.傳統OCR技術流程:
1、水平投影垂直投影
2、模板匹配
3、查找輪廓findcontours
傳統的光學字符識別過程為:圖像預處理(彩色圖像灰度化、二值化處理、圖像變化角度檢測、矯正處理等)、版面劃分(直線檢測、傾斜檢測)、字符定位切分、字符識別、版面恢復、后處理、校對等。
2.深度學習OCR技術流程:
深度學習圖像文字識別流程包括:輸入圖像、深度學習文字區域檢測、預處理、特征提取、深度學習識別器、深度學習后處理等。
現有多數深度學習識別算法具體流程包括圖像校正、特征提取、序列預測等模塊,流程如圖所示:
五、場景文字檢測與識別方法
注:此篇僅做概括介紹,后續文章會對重點方法進行詳細展開介紹!
1.場景文字檢測方法:
2.場景文字識別方法:
3.端到端自然場景檢測和識別方法:
六、常用文字檢測框架介紹:
1、DBNet
官方論文:Real-time Scene Text Detection with Differentiable Binarization
參考代碼:DBNet
首先,DB是一種基于分割的文本檢測算法。在各種文本檢測算法中,基于分割的檢測算法可以更好地處理彎曲等不規則形狀文本,因此往往能取得更好的檢測效果。但分割法后處理步驟中將分割結果轉化為檢測框的流程復雜,耗時嚴重。因此作者提出一個可微的二值化模塊(Differentiable Binarization,簡稱DB),將二值化閾值加入訓練中學習,可以獲得更準確的檢測邊界,從而簡化后處理流程。DB算法最終在5個數據集上達到了state-of-art的效果和性能。
- 主要思想:先獲取圖像中的文本區域,再利用opencv、polygon等后處理得到文本區域的最小包圍曲線;
- DB提出可微分閾值,通過一個近似于階躍函數的二值化函數使得分割網絡在訓練時學習文本分割的動態閾值,使模型提升精度,簡化后處理;
- DB的backbone時典型的FCN結構,由多層上采樣和下采樣的特征圖concat完成。
2、CTPN
官方論文: Detecting Text in Natural Image with Connectionist Text Proposal Network
參考代碼:https://github.com/eragonruan/text-detection-ctpn
CTPN模型主要包括三個部分,分別是卷積層、Bi-LSTM層、全連接層,其結構如下圖所示。
- 在卷積層部分,CTPN選取VGG16模型前5個conv5= stage得到feature maps作為圖像最后的特征,假設此時feature maps的尺寸為 W *H * C;
- 由于文本之間存在序列關系,因此,作者引入了遞歸神經網絡,采用的是一層Bi-LSTM層,作者發現引入了遞歸神經網絡對文本檢測的效果有一個很大的提升,如下圖所示,第一行是不采用遞歸神經網絡的效果,第二行是采用了Bi-LSTM后的效果。具體的做法是采用一個的滑動窗口,提取feature
maps上每個點周圍的區域作為該點的特征向量表示,此時,圖像的尺度變為,然后將每一行作為序列的長度,高度作為batch_size,傳入一個128維的Bi-LSTM,得到Bi-LSTM層的輸出為; - 將Bi-LSTM的輸出接入全連接層,在這一部分,作者引入了anchor的機制,即對每一個點用k個anchor進行預測,每個anchor就是一個盒子,其高度由[273,390,…,11]逐漸遞減,每次除以0.7,總共有10個。作者采用的是三個全連接層分支。
3、EAST
官方論文: EAST: An Efficient and Accurate Scene Text Detector
參考代碼:https://github.com/argman/EAST
論文的思想非常簡單,結合了DenseBox和Unet網絡中的特性,具體流程如下:
- 先用一個通用的網絡(論文中采用的是Pvanet,實際在使用的時候可以采用VGG16,Resnet等)作為base net ,用于特征提取
- 基于上述主干特征提取網絡,抽取不同level的feature map,它們的尺寸分別是 WHC,這樣可以得到不同尺度的特征圖.目的是解決文本行尺度變換劇烈的問題,ealy stage可用于預測小的文本行,late-stage可用于預測大的文本行.
- 特征合并層,將抽取的特征進行merge.這里合并的規則采用了U-net的方法,合并規則:從特征提取網絡的頂部特征按照相應的規則向下進行合并,這里描述可能不太好理解,具體參見下述的網絡結構圖
- 網絡輸出層,包含文本得分和文本形狀.根據不同文本形狀(可分為RBOX和QUAD),輸出也各不相同,具體參看網絡結構圖。
注:上述僅列舉幾個簡單常見算法簡介,文字檢測與文字識別詳細介紹、其他常見和最新算法見后續系列文章(持續補充)!
七、常用文字識別框架介紹:
常見文本識別的算法可分為基于CTC技術的方法和基于注意力機制的網絡模型兩大類。
-
CTC技術可以有效地捕獲輸入序列的上下文依賴關系,同時能夠很好地解決圖像和文本字符對齊的問題,但在自由度較大的手寫場景下仍會出現識別錯誤。
-
注意力機制主要應用于卷積神經網絡特征權重的分配上,提高強特征權重,降低弱特征的權重,同時在由圖像到文字的解碼過程中又具有天然的語義捕獲能力,因此,在圖像特征提取以及語義提取方面都提升了OCR模型的性能。
1.基于CTC文字識別方法
CRNN
官方論文:An End-to-End Trainable Neural Network for Image-Based Sequence Recognition and Its Application to Scene Text Recognition
參考代碼:https://github.com/meijieru/crnn.pytorch
簡介:基于 CTC 最典型的算法是CRNN (Convolutional Recurrent Neural Network),它的特征提取部分使用主流的卷積結構,常用的有ResNet、MobileNet、VGG等。CRNN文本識別算法引入了雙向 LSTM(Long Short-Term Memory) 用來增強上下文建模,通過實驗證明雙向LSTM模塊可以有效的提取出圖片中的上下文信息。最終將輸出的特征序列輸入到CTC模塊,直接解碼序列結果。
CRNN網絡架構:
CRNN網絡結構包含三部分,從下到上依次為:
1.卷積層,使用深度CNN,對輸入圖像提取特征。
2.循環層,使用雙向RNN(BLSTM)對特征序列進預測,輸出預測標簽(真實值)分布。
3.轉錄層,使用 CTC 損失,把從循環層獲取的一系列標簽分布轉換成最終的標簽序列。
2.基于Attention文字識別方法
簡介:目前主流的場景文本識別模型都是基于編碼器-解碼器框架的,而傳統的編碼器-解碼器框架只能將輸入序列編碼成一個固定長度的向量表示。引入Attention機制的編碼器輸出的是不定長向量組成的序列,對目標數據以及相關數據賦予更大的權重,使得解碼器的“注意力”集中到目標數據,獲取到更多的細節,并且可以學到較長輸入序列的合理向量表示。注意機制通常與RNN 結合作為預測模塊。
ASTER
官方論文:ASTER: An Attentional Scene Text Recognizer with Flexible Rectification
參考代碼:https://github.com/ayumiymk/aster.pytorch
以下為基于Attention文字識別方法總結:
以下是文字識別方法算法分類,具體內容參考文章:OCR文字識別經典論文詳解
八、深度學習文字檢測與識別方法發展歷程
1.過分割與文本行識別兩種方法發展:
2.深度學習文字檢測模型發展:
3.深度學習文字識別模型發展:
注:文字檢測與文字識別算法部分在后續系列文章中將詳細展開介紹,后續參考文章開頭目錄!
九、OCR常用的數據集
規則數據集
- IIIT5K-Words (IIIT) 2000 for Train; 3000 for Test
- Street View Text (SVT) 257 for Train; 647 for Test
- ICDAR2003 (IC03)
不規則數據集
- ICDAR2015 (IC15) 4468 for Train; 2077 for Test;
- SVT Perspective (SP) 645 for Test
- CUTE80 (CT) 288 for Test
合成數據集
- MJSynth (MJ) 8.9million個圖像
- SynthText(ST) 5.5million個圖像
注:后續文章將對上述重要數據集逐一展開詳細介紹!
1.數據集匯總
2.數據集下載
| ICDAR_2013 | 語言: 英文 train:229 test:233 | x1 y1 x2 y2 text | 下載鏈接1 . |
| ICDAR_2015 | 語言: 英文 train:1000 test:500 | x1,y1,x2,y2,x3,y3,x4,y4,text | 下載鏈接2 . |
| ICDAR2017-MLT | 語言: 混合 train:7200 test:1800 | x1,y1,x2,y2,x3,y3,x4,y4,text | 下載鏈接3 . 提取碼: z9ey |
| ICDAR2017-RCTW | 語言: 混合 train:8034 test:4229 | x1,y1,x2,y2,x3,y3,x4,y4,<識別難易程度>,text | 下載鏈接4 |
| 天池比賽2018 | 語言: 混合 train:10000 test:10000 | x1,y1,x2,y2,x3,y3,x4,y4,text | 檢測5 。 識別6 |
| ICDAR2019-MLT | 語言: 混合 train:10000 test:10000 | x1,y1,x2,y2,x3,y3,x4,y4,語言類別,text | 下載鏈接7 . 提取碼: xofo |
| ICDAR2019-LSVT | 語言: 混合 train:30000 test:20000 | json格式標簽 | 下載鏈接8 |
| ICDAR2019-ReCTS | 語言: 混合 train:20000 test:5000 | json格式標簽 | 下載鏈接9 |
| ICDAR2019-ArT | 語言: 混合 train:5603 test:4563 | json格式標簽 | 下載鏈接10 |
| Synth800k | 語言: 英文 80k | 基于字符標注 | 下載鏈接11 |
| 360萬中文數據集 | 語言: 中文 360k | 每張圖片由10個字符構成 | 下載鏈接12 . 提取碼:lu7m |
| 中文街景數據集CTW | 語言:中文 32285 | 基于字符標注的中文街景圖片 | 下載鏈接13 |
| 百度中文場景文字識別 | 語言: 混合 29萬 | 下載鏈接14 |
十、OCR技術難點:
1.不同拍攝角度:指通過正拍、斜拍和圖像反轉等不同角度進行拍攝;
2.不同光線:指在亮光(可能會出現反光)、暗光和部分亮光部分暗光的情形 下拍攝;
3.文字不清晰:指存在因污損、遮擋、折痕、印章、背景紋理等造成文字不 清楚的樣本;
4.邊框不完整:主要指圖片樣本中物體(證件、票據、車牌等)邊框沒有完 整出現在畫面中;
5.其他特殊情況:主要指卡證類樣本需考慮帶有少數民族文字、生僻字,同 時考慮到證件等用于高安全場景,對復印、掃描、屏幕翻拍、PS等樣本 進行告警;印刷體樣本需考慮不同字號、不同排版方向,以及彎曲的文本。
十一、OCR評價指標
OCR評價指標包括字段粒度和字符粒度的識別效果評價指標。
- 以字段為單位的統計和分析,適用于卡證類、 票據類等結構化程度較高的OCR 應用評測。
- 以字符 (文字和標點符號) 為單位的統計和分析,適用于通用印刷體、手寫體類非結構化數據的OCR應用評測。具體指標包括以下幾個:
(上圖摘自智能文字識別(OCR)能力評測與應用白皮書)
此外,從服務角度來說,識出率、平均耗時等也是衡量OCR系統好壞的指標之一。
編輯距離:
編輯距離是針對二個字符串(例如英文字)的差異程度的量化量測,量測方式是看至少需要多少次的處理才能將一個字符串變成另一個字符串。在萊文斯坦距離中,可以刪除、加入、替換字符串中的任何一個字元,也是較常用的編輯距離定義,常常提到編輯距離時,指的就是萊文斯坦距離。
測試指標說明:
平均識別率:[ 1 - (編輯距離 / max(1, groundtruth字符數, predict字符數) ) ] * 100.0%
的平均值; 平均編輯距離:編輯距離,用來評估整體的檢測和識別模型;
平均替換錯誤:編輯距離計算時的替換操作,用于評估識別模型對相似字符的區分能力;
平均多字錯誤:編輯距離計算時的刪除操作,用來評估檢測模型的誤檢和識別模型的多字錯誤;
平均漏字錯誤:編輯距離計算時的插入操作,用來評估檢測模型的漏檢和識別模型的少字錯誤;
十二 、OCR資源
1.論文學習資源
- 頂會:ICDAR、CVPR、ECCV、ICCV等
- Arxiv搜索引擎:http://www.arxiv-sanity.com/
2.OCR相關比賽:
ICDAR 國際文檔分析與識別大會 : https://rrc.cvc.uab.es/?com=introduction
含金量較高,兩年一次,目前2023年比賽正在進行,歡迎大家評論區組隊參加!
CSIG 中國圖象圖形學學會
會定期舉行OCR方向比賽,含金量可以,值得參加。
3.國內OCR領域優秀學者(不分先后順序):
白翔,黃偉林,金連文,劉成林,殷緒成
4.常見的OCR識別平臺:
- 百度開放平臺:PaddleOCR
- 商湯科技OpenMM : MMOCR
- 谷歌開源OCR引擎:Tesseract
- 其余基于深度學習字符識別框架
后續文章將依次繼續詳細介紹,并包括使用上述框架進行OCR項目實戰!
5.優秀OCR資源推薦:
1.OCR合集: handong1587
2. Awesome-Scene-Text-Recognition
后續文章將更新最新OCR優秀資料,歡迎訂閱關注!
本文參考資料:
https://aistudio.baidu.com/aistudio/education/group/info/25207
總結
以上是生活随笔為你收集整理的OCR入门教程系列(一):OCR基础导论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pandas神器操作excel表格大全(
- 下一篇: 全国计算机英语四六级准考证打印准考证号,