opencv ocr字元識別 OCR文字識別原理

2021-10-12 18:33:23 字數 2668 閱讀 9179

首先介紹乙個名詞ocr(optical character recognition,光學字元識別)。是指電子裝置(例如掃瞄器或數位相機)檢查紙上列印的字元,通過檢測暗、亮的模式確定其形狀,然後用字元識別方法將形狀翻譯成計算機文字的過程。

文字識別ocr通常應用在證件識別(身份證,駕駛證,護照,名片)、文件檢索、截圖識別(猿題庫,作業幫)

實際上我們預期的結果是把只有包含單個文字的交給計算機去翻譯。

機器是怎麼看到紙質或者電子文件或是上的文字的呢?接下來看一下他的工作流程:

首先要去掉雜質,這樣程式就可以集中注意到文字上面。

預處理主要包括灰度化,二值化,雜訊去除,傾斜矯正等。

灰度化:

灰度圖是只含亮度資訊,不含色彩資訊的。

在rgb模型中,如果r=g=b時,則彩色表示一種灰度顏色,其中r=g=b的值叫灰度值。

一般滿足下面這個公式:

gray=0.299r+0.587g+0.114b 這種引數考慮到了人眼的生理特點

原圖.jpg

灰度圖.jpg

二值化:非黑即白

對攝像頭拍攝的,大多數是彩色影象,彩色影象所含資訊量巨大,對於的內容,我們可以簡單的分為前景與背景,為了讓計算機更快的,更好的識別文字,我們需要先對彩色圖進行處理,使只前景資訊與背景資訊,可以簡單的定義前景資訊為黑色,背景資訊為白色,這就是二值化圖了。

經過灰度處理的彩色影象還需經過二值化處理將文字與背景進一步分離開。

二值化的過程中涉及到「閾值」的概念,簡單來說就是想找到乙個合適的值來作為乙個界限,大於或小於這個界限的值變為白色或黑色即0或255。「閾值」是怎麼選出來的?

有很多方法,這裡只介紹下面兩種

方法1:

取閥值為127(相當於0~255的中數,(0+255)/2=127),讓灰度值小於等於127的變為0(黑色),灰度值大於127的變為255(白色),這樣做的好處是計算量小速度快,但是缺點也是很明顯的,因為這個閥值在不同的中均為127,但是不同的,他們的顏色 分布差別很大,所以用127做閥值,這種一刀切,效果肯定是不好的。二值化效果圖.gif方法2:

使用直方圖方法(也叫雙峰法)來尋找二值化閥值,直方圖是影象的重要特質。直方圖方法認為影象由前景和背景組成,在灰度直方圖上,前景和背景都形成高峰,在雙峰之間的最低谷處就是閥值所在。

下圖就可以將小於t的視為全部為黑色,大於t的為白色。來自網路.png

影象降噪:

現實中的數字影象在數位化和傳輸過程中常受到成像裝置與外部環境雜訊干擾等影響,稱為含噪影象或雜訊影象。減少數字影象中雜訊的過程稱為影象降噪(image denoising)。

在演示的過程中可以看到當二值化之後的會顯示很多小黑點 ,這些都是不需要的資訊,會對後面進行的輪廓切割識別造成極大的影響,降噪是乙個非常重要的階段,降噪處理的好壞直接影響了識別的準確率。

最簡單的叫做資料結構中學到的dfs或者bfs(深度和廣度搜尋)。我們對w*h的點陣圖先搜尋所有聯通的區域(值為1的,我們看起來是黑色的,連線起來的區域)。所有聯通區域算乙個平均的畫素值,如果某些聯通區域的畫素值遠遠低於這個平均值,我們就認為是噪點。然後用0代替他。點點.jpg

傾斜矯正:

拍照或者選取的不可能完全是水平的,傾斜會影響後面切出來的,所以要對進行旋轉

傾斜矯正最常用的方法是霍夫變換,其原理是將進行膨脹處理,將斷續的文字連成一條直線,便於直線檢測。計算出直線的角度後就可以利用旋轉演算法,將傾斜矯正到水平位置。

對於一段多行文字來講,文字切分包含了行切分與字元切分兩個步驟,傾斜矯正是文字切分的前提。我們將傾斜矯正後的文字投影到 y軸,並將所有值累加,這樣就能得到乙個在y軸上的直方圖。

下圖是經過橫向縱向切割後得到的效果。

擷取這篇文章的內容理解一下這個直方圖

來自網路.jpg

來自網路.jpg

畫素圖.png

切割.jpg

以上所有的步驟都是為了獲取這一小塊的 ,把每一部分的掃瞄的文字提取的特徵向量與特徵模板庫進行模板粗分類和模板細匹配,識別出字元。

識別.jpg

本文預處理部分使用的是開源框架opencv,識別部分使用的是谷歌開源的第三方框架tesseract.tesseract不能識別手寫,而且只能識別一共大約64種字型的文字。目前對中文的識別速度還是有點低。畢竟是國外的,對於中文還是差點,畢竟是免費的~~~。

以上的總結參考並部分摘抄了以下文章,非常感謝以下作者的分享!:

1、2、

3、4、

5、6、

7、

Shape Context字元識別

關於shape context的文章,網上已經很多了。在這裡實現一下shape context描述子的視覺化。include hogimage.h using namespace std using namespace hog hogimage oimg struct color color col...

OCR字元識別

ocr optical character recognition 全稱光學字元識別技術,在halcon中,ocr常被用來分割區域及讀取識別影象中的字元含義。字元識別ocr原理及應用實現 ocr指電子裝置 掃瞄器 數位相機等 檢測在紙上列印的字元,通過檢測暗亮的模式確定其形狀,然後用字元識別方法將形...

字元識別 CRNN CTC

文字檢測過程分兩步,第一步為檢測出文字所在的位置,第二步根據檢測框裡的內容進行文字識別。第一部分文字檢測,這裡介紹了sast演算法 一 背景知識 1 迴圈神經網路rnn 迴圈神經網路recurrent neural network與其他cnn網路不同之處在於rnn每一點的輸出依賴於之前的結果。rnn...