最近對驗證碼識別做了一些研究,主要是ocr方向的,一些總結記錄一下。識別captcha後面跟了很多參考文章都講解的很詳細了,做orc不難,難點在於如何提高識別率。基本流程如下:
1.原圖
2.預處理(去噪點)
3.標準化(灰度變換,二值化,歸一化)
4.image segment(個人感覺這個比較難,有很多演算法,比如垂直投影直方圖,knn,color filling)
5.提取特徵
6.機器學習
7.識別
總之ocr是乙個很有意思的研究課題,包含大量對計算機圖形影象,機器學習,神經網路方面的研究,可以作為乙個問題點來研究機器學習。網上已經有乙個學習好的手寫體樣本庫mnist可供玩耍。附件另有乙份是vsm向量空間模型理論的**,清楚的講解了如何計算兩個物件之間的相似性。
0.pil簡單的api使用:
# -*- coding: utf-8 -*-
path = "/home/yunpeng/test4/data/4399/******/8.png"
from pil import image,imagedraw
im =image.open(path)
im = im.convert('l')
#二值化
print 'img info:',im.format,im.size,im.mode
width,height = im.size
for x in xrange(width):
for y in xrange(height):
p= im.getpixel((x, y))
if p>90:
im.putpixel((x,y),255)
else:
im.putpixel((x,y),0)
#去頭去尾
mlist = set()
p = im.load()
for x in xrange(width):
for y in xrange(height):
p= im.getpixel((x, y))
if p<200:
mlist.add(x)
mlist = list(mlist)
left= mlist[:1][0]
right = mlist[len(mlist)-1:][0]
box = (left, 0, right, height)
im = im.crop(box)
width,height = im.size
ps = [0]*width
for x in xrange(width):
for y in xrange(height):
p= im.getpixel((x, y))
if p==0:
ps[x]=ps[x]+4
image = image.new('rgb',(200,200),(255,255,255))
draw = imagedraw.draw(image)
ps_width = len(ps)
for k in xrange(ps_width):
source = (k,199) #起點座標y=99, x=[0,1,2....]
target = (k,199-ps[k]) #終點座標y=255-a[x],a[x]的最大數值是200,x=[0,1,2....]
draw.line([source, target], (100,100,100),1)
image.show()
im.show()
1.什麼是灰度變換?
photoshop裡的灰度變換可以使r,g,b 3色按任何比例增強再混合。黑白的黑白變換叫灰度變換,彩色的色彩變換也叫灰度變換。
比如線性變換
可以用乙個線性函式:f(x,y)=a'+(b'-a')/(b-a)×(f(x,y)-a)
f(x,y)代表乙個象素
[a,b]是原始影象的灰度範圍,[a',b']是變換後新影象的灰度範圍
用這個線性函式分別對r,g,b分量進行變換可以起到單色增強的目的,然後再混合輸出。
如果b'-a' > b-a ,則使得影象灰度範圍增大,即對比度增大,影象會變得清晰
如果b'-a' < b-a ,則使得影象灰度範圍縮小,即對比度減小。
ps: pil可以通過im.convert('l')
2.什麼是直方圖?
直方圖就是統計影象中畫素點為某個顏色值的個數。
參考:使用pil計算直方圖並顯示
3.tesseract如何安裝?
參考:ubuntu安裝tesseract 進行ocr識別
使用tesseract-ocr破解**驗證碼
4. 參考資料
深度學習之OCR相關經驗記錄
q1 基於深度學習的文字檢測方法有哪幾種?各有什麼優缺點?a 常用的基於深度學習的文字檢測方法一般可以分為基於回歸的 基於分割的兩大類,當然還有一些將兩者進行結合的方法。1 基於回歸的方法分為box回歸和畫素值回歸。a.採用box回歸的方法主要有ctpn textbox系列和east,這類演算法對規...
OCR 訓練記錄2
第13次訓練 增加拉伸壓縮的多樣性 scale list1 0.7,0.75,0.8,0.85,0.9,0.95 scale list2 1 x for x in scale list1 結束標誌 平均acc達到0.999 在真實資料上測試結果 字元準確率 95 word 準確率 75 真實樣本總數...
OCR深度學習應用
ocr技術識別文件的概括 我們常說的ocr 文字識別 ocr技術識別文件是指通過電子裝置等將紙質上的文字識別出來,形成可編輯的文字。ocr技術識別文件的流程 常規的ocr文字識別處理的過程包括 3 設定語種 選擇需要什麼ocr語種的引擎程式 4 輸出結果 輸出ocr識別結果為原版原樣的優質檔案 oc...