tft每日頭條

 > 生活

 > 簡述ocr技術以及流程

簡述ocr技術以及流程

生活 更新时间:2024-08-19 20:15:27
什麼是OCR?

OCR英文全稱是Optical Character Recognition,中文叫做光學字符識别。它是利用光學技術和計算機技術把印在或寫在紙上的文字讀取出來,并轉換成一種計算機能夠接受、人又可以理解的格式。文字識别是計算機視覺研究領域的分支之一,而且這個課題已經是比較成熟了,并且在商業中已經有很多落地項目了。比如漢王OCR,百度OCR,阿裡OCR等等,很多企業都有能力都是拿OCR技術開始掙錢了。其實我們自己也能感受到,OCR技術确實也在改變着我們的生活:比如一個手機APP就能幫忙掃描名片、身份證,并識别出裡面的信息;汽車進入停車場、收費站都不需要人工登記了,都是用車牌識别技術;我們看書時看到不懂的題,拿個手機一掃,APP就能在網上幫你找到這題的答案。太多太多的應用了,OCR的應用在當今時代确實是百花齊放啊。

OCR的分類

如果要給OCR進行分類,我覺得可以分為兩類:手寫體識别和印刷體識别。這兩個可以認為是OCR領域兩個大主題了,當然印刷體識别較手寫體識别要簡單得多,我們也能從直觀上理解,印刷體大多都是規則的字體,因為這些字體都是計算機自己生成再通過打印技術印刷到紙上。在印刷體的識别上有其獨特的幹擾:在印刷過程中字體很可能變得斷裂或者墨水粘連,使得OCR識别異常困難。當然這些都可以通過一些圖像處理的技術幫他盡可能的還原,進而提高識别率。總的來說,單純的印刷體識别在業界已經能做到很不錯了,但說100%識别是肯定不可能的,但是說識别得不錯那是沒毛病。

假如輸入系統的圖像是一頁文本,那麼識别時的第一件事情是判斷頁面上的文本朝向,因為我們得到的這頁文檔往往都不是很完美的,很可能帶有傾斜或者污漬,那麼我們要做的第一件事就是進行圖像預處理,做角度矯正和去噪。然後我們要對文檔版面進行分析,進每一行進行行分割,把每一行的文字切割下來,最後再對每一行文本進行列分割,切割出每個字符,将該字符送入訓練好的OCR識别模型進行字符識别,得到結果。但是模型識别結果往往是不太準确的,我們需要對其進行識别結果的矯正和優化,比如我們可以設計一個語法檢測器,去檢測字符的組合邏輯是否合理。比如,考慮單詞Because,我們設計的識别模型把它識别為8ecause,那麼我們就可以用語法檢測器去糾正這種拼寫錯誤,并用B代替8并完成識别矯正。這樣子,整個OCR流程就走完了。從大的模塊總結而言,一套OCR流程可以分為:

版面分析 -> 預處理-> 行列切割 -> 字符識别 -> 後處理識别矯正

從上面的流程圖可以看出,要做字符識别并不是單純一個OCR模塊就能實現的(如果單純的OCR模塊,識别率相當低),都要各個模塊的組合來保證較高的識别率。上面的流程分的比較粗,每個模塊下還是有很多更細節的操作,每個操作都關系着最終識别結果的準确性。做過OCR的童鞋都知道,送入OCR模塊的圖像越清晰(即預處理做的越好),識别效果往往就越好。那現在對這流程中最為重要的字符識别技術做一個總結。

識别方法

現在我們隻想單純地想對字符進行識别,那方法會有哪些呢?我列了一下可以采取的策略:

  • 使用谷歌開源OCR引擎Tesseract
  • 使用大公司的OCR開放平台(比如百度),使用他們的字符識别API
  • 傳統方法做字符的特征提取,輸入分類器,得出OCR模型
  • 暴力的字符模闆匹配法
  • 大殺器:基于深度學習下的CNN字符識别

上面提到的OCR方法都有其有點和缺點,也正如此,他們也有各自特别适合的應用場景。

首先說開源OCR引擎Tesseract。搞字符識别的童鞋應該都聽說過Tesseract這個東西,這是谷歌維護的一個OCR引擎,它已經有一段相當悠久的曆史了。Tesseract現在的版本已經支持識别很多種語言了,當然也包括漢字的識别。畢竟Tesseract是外國人搞得一個東西,所以在漢字識别的精度上還是不能擺上台面,不過還是自己去改善。但是Tesseract在阿拉伯數字和英文字母上的識别還是可以的,如果你要做的應用是要識别英文或者數字,不妨考慮一下使用Tesseract,畢竟拿來就能得到不錯的結果。當然啦,要做到你想要的識别率,後期微調或者優化肯定要多下功夫的。

接下來說一下借用OCR開放平台做文字識别。現在很多大公司都開放了OCR的API供開發者調用,當然啦,小量調用是不收費的,但是大量調用就要收費了。最近我也在百度開放平台上調用OCR的API做一些識别的工作,說實話,在漢字的識别上,我們中國公司的技術還是頂尖的,在漢字識别的準确率上已經讓人很滿意了。比如我要識别一些文本,自己寫個python腳本,調用開放平台的服務,返回的就是識别結果了。這種模式有啥不好的地方嗎?首先是需要錢(當然每天小批量識别一下是不用錢的),第二是自己的控制程度不足,我們想要提升識别精度,我們不可以從OCR識别上做改進(畢竟别人的東西,我們改不了),能做隻是預處理和後期矯正,能做的還是比較有限的。但是,如果自己不想花大量時間做OCR模型并且手上有錢的話,這種識别方法還是OK的。

上面提到的都是用的是别人的東西,那我們想從頭自己做,咋辦?

那就自己做吧!先談一談字符模闆那匹配法。暴力的字符模闆匹配法看起來很蠢,但是在一些應用上可能卻很湊效。比如在對電表數字進行識别時,考慮到電表上的字體較少(可能就隻有阿拉伯數字),而且字體很統一,清晰度也很高,所以識别難度不高。針對這種簡單的識别場景,我們首先考慮的識别策略當然是最為簡單和暴力的模闆匹配法。我們首先定義出數字模闆(0~9),然後用該模闆滑動匹配電表上的字符,這種策略雖然簡單但是相當有效。我們不需要左思右想去建模,訓練模型,隻需要識别前做好模闆庫就可以了。

簡述ocr技術以及流程(OCR技術綜述)1

模闆匹配法隻限于一些很簡單的場景,但對于稍微複雜的場景,那就不太實用了。那此時我們可以采取OCR的一般方法,即特征設計、特征提取、分類得出結果的計算機視覺通用的技巧。在深度學習大放異彩之前,OCR的方法基本都是這種方法,其效果嘛,并不算特别好。在這裡簡單說一下這裡常見的方法。第一步是特征設計和提取,特征設計是一件很煩人的事情,做過模式識别相關項目的童鞋也深有體會,我們現在識别的目标是字符,所以我們要為字符設計它獨有的的特征,來為後面的特征分類做好準備。字符有啥特征呢?有結構特征,即字符的端點、交叉點、圈的個數、橫線豎線條數等等,都是可以利用的字符特征。比如“品”字,它的特征就是它有3個圈,6條橫線,6條豎線。除了結構特征,還有大量人工專門設計的字符特征,據說都能得到不錯的效果。最後再将這些特征送入分類器(SVM)做分類,得出識别結果。這種方式最大的缺點就是,人們需要花費大量時間做特征的設計,這是一件相當費工夫的事情。通過人工設計的特征(例如HOG)來訓練字符識别模型,此類單一的特征在字體變化,模糊或背景幹擾時泛化能力迅速下降。而且過度依賴字符切分的結果,在字符扭曲、粘連、噪聲幹擾的情況下,切分的錯誤傳播尤其突出。針對傳統OCR解決方案的不足,學界業界紛紛擁抱基于深度學習的OCR。

這些年深度學習的出現,讓OCR技術煥發第二春。現在OCR基本都用卷積神經網絡來做了,而且識别率也是驚人的好,人們也不再需要花大量時間去設計字符特征了。在OCR系統中,人工神經網絡主要充當特征提取器和分類器的功能,輸入是字符圖像,輸出是識别結果,一氣呵成。這裡就不再展開說明卷積神經網絡了,想要知道的細節的可以看我以前寫過的一篇博客《卷積神經網絡CNN總結》。當然用深度學習做OCR并不是在每個方面都很優秀,因為神經網絡的訓練需要大量的訓練數據,那麼如果我們沒有辦法得到大量訓練數據時,這種方法很可能就不奏效了。其次,神經網絡的訓練需要花費大量的時間,并且需要用到的硬件資源一般都比較多,這幾個都是需要考慮的問題。

在接下來的博客中,我将在工程上一一實現以上說到的幾種OCR的識别方法~~

OCR的發展

在一些簡單環境下OCR的準确度已經比較高了(比如電子文檔),但是在一些複雜環境下的字符識别,在當今還沒有人敢說自己能做的很好。現在大家都很少會把目光還放在如何對電子文檔的文字識别該怎麼進一步提高準确率了,因為他們把目光放在更有挑戰性的領域。OCR傳統方法在應對複雜圖文場景的文字識别顯得力不從心,越來越多人把精力都放在研究如何把文字在複雜場景讀出來,并且讀得準确作為研究課題,用學界術語來說,就是場景文本識别(文字檢測 文字識别)。

簡述ocr技術以及流程(OCR技術綜述)2

從上圖可以看出,自然場景下的文字識别比簡單場景的文字識别實在困難太多了,現在雖然出了很多成果,但是離理想結果還是差很遠。

當然啦,除上面的場景文字識别外,曆史悠久的手寫體的識别到現在還是一件具有挑戰的課題,在深度學習的浪潮下,手寫體的識别已經前進了一大步,但是尚且沒達到印刷體識别那種可以商用的地步,所以啊,OCR的研究還得不斷地進行下去。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关生活资讯推荐

热门生活资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved