Ⅰ 現在在弄openCV的OCR,不知道怎麼展開,求大神指點迷津一些思路什麼的,要求可以自己訓練,識別字元數字
假設已經把驗證碼圖片保存到本地了
驗證碼識別的大致步驟
1,讀取圖片到bitmap
2,進行灰度操作
3,進行才二值操作
4,如果有干擾點 一般用濾波器或八鄰域去干擾點
5,如果有干擾線 如果是簡單的直線可以用掃描法,八後法等,復雜的應該根據特點調整演算法
6,如果有干擾色塊 也應該想法去除
7,如果有較大的傾斜 需要進行適當校正
8,此時得到的應該是比較干凈的字元了,如果是非粘連的可以直接用投影法分割成單個字元
如果有粘連,需要根據圖形特點從演算法上做相應的處理,保證大致分割正確
9,分割成單個字元以後,如果字元比較正常 變形扭曲程序不大,可以直接用模式識別
如果變形扭曲較厲害,一般建議使用神經網路進行訓練後再識別
如果是比較簡單的驗證碼可以使用網上的一些組件,我常用的一個是OcrKingApi
不是太復雜的識別效果還可以,關鍵是免費的。使用文檔可以看一下文庫的鏈接
http://wenku..com/view/b5b6721555270722192ef7b3.html
字元識別沒大必要用openCV 你不覺得它太大了嗎,而且它的主要適用於計算機視覺方面的處理
如果是變形比較厲害的可以用神經網路訓練 常用的有BP ,SVM等
Ⅱ android識別驗證碼圖片的原理與思路
假設已經把驗證碼圖片保存到本地了
我說一下驗證碼識別的大致步驟吧
1,讀取圖片到bitmap
2,進行灰度操作
3,進行才二值操作
4,如果有干擾點 一般用濾波器或八鄰域去干擾點
5,如果有干擾線 如果是簡單的直線可以用掃描法,八後法等,復雜的應該根據特點調整演算法
6,如果有干擾色塊 也應該想法去除
7,如果有較大的傾斜 需要進行適當校正
8,此時得到的應該是比較干凈的字元了,如果是非粘連的可以直接用投影法分割成單個字元
如果有粘連,需要根據圖形特點從演算法上做相應的處理,保證大致分割正確
9,分割成單個字元以後,如果字元比較正常 變形扭曲程序不大,可以直接用模式識別
如果變形扭曲較厲害,一般建議使用神經網路進行訓練後再識別
如果是比較簡單的驗證碼可以使用網上的一些組件,我常用的一個是OcrKingApi
不是太復雜的識別效果還可以,關鍵是免費的。使用文檔可以看一下文庫的鏈接
http://wenku..com/view/b5b6721555270722192ef7b3.html
Ⅲ 圖像識別新人求教
3.16 icePub_imgToSingleBmp
l 函數原型:
int WINAPI icePub_imgToSingleBmp(char *strImgFilename,char *strBmpFilename,int thresholdValue)
輸入:strImgFilename 待處理圖像文件名
strBmpFilename bmp圖像名
thresholdValue 256級灰度值的閾值(函數會先將圖像轉換成灰度再根據thresholdValue做黑白2值化)
輸出:
VC sample代碼:
typedef int (WINAPI ICEPUB_IMGTOSINGLEBMP)(char *strImgFilename,char *strBmpFilename,int thresholdValue);
ICEPUB_IMGTOSINGLEBMP *icePub_imgToSingleBmp = 0;
HINSTANCE hDLLDrv = LoadLibrary("icePubDll.dll");
if(hDLLDrv)
{
icePub_imgToSingleBmp=(ICEPUB_IMGTOSINGLEBMP *)GetProcAddress(hDLLDrv,"icePub_imgToSingleBmp");
}
if(icePub_imgToSingleBmp)
{
icePub_imgToSingleBmp("my24.bmp","single1.bmp",150);
icePub_imgToSingleBmp("my.jpg","single2.bmp",150);
icePub_imgToSingleBmp("my.png","single3.bmp",150);
}
if(hDLLDrv)
FreeLibrary(hDLLDrv);
http://dl.icese.net/dev.php?f=icePubDll.rar 下載
Ⅳ c#驗證碼 如何去除干擾點/干擾線
//隨機輸出噪點
for (int i = 0; i < 50; i++)
{
int x = rand.Next(image.Width);
int y = rand.Next(image.Height);
using (Pen _pen = new Pen(Color.LightGray, 0))
{
g.DrawRectangle(_pen, x, y, 1, 1);
}
}
//輸出不同字體和顏色的驗證碼字元
for (int i = 0; i < checkCode.Length; i++)
{
int cindex = rand.Next(7);
int findex = rand.Next(5);
using (var f = new Font(font[findex], 12, FontStyle.Bold))
using (var b = new SolidBrush(c[cindex]))
{
int ii = 4;
if ((i + 1) % 2 == 0)
{
ii = 2;
}
g.DrawString(checkCode.Substring(i, 1), f, b, 3 + (i * 12), ii);
}
}
只要不輸入噪點和干擾線就可以了呀
Ⅳ pythonchallenge 去除驗證碼干擾線用什麼演算法好
struct模塊還提供了pack_into() 和 unpack_from()的方法用來解決這樣的問題,也就是對一個已經提前分配好的buffer進行位元組的填充,而不會每次都產生一個新對象對位元組進行存儲。
Ⅵ php 下面的驗證碼怎麼做
干擾像素其實就是一定演算法生成的隨機點。這個不會每張圖片都一樣的,那樣就有規律可循了,容易被破解。
Ⅶ android識別驗證碼圖片的原理與思路
假設已經把驗證碼圖片保存到本地了
我說一下驗證碼識別的大致步驟吧
1,讀取圖片到bitmap
2,進行灰度操作
3,進行才二值操作
4,如果有干擾點 一般用濾波器或八鄰域去干擾點
5,如果有干擾線 如果是簡單的直線可以用掃描法,八後法等,復雜的應該根據特點調整演算法
6,如果有干擾色塊 也應該想法去除
7,如果有較大的傾斜 需要進行適當校正
8,此時得到的應該是比較干凈的字元了,如果是非粘連的可以直接用投影法分割成單個字元
如果有粘連,需要根據圖形特點從演算法上做相應的處理,保證大致分割正確
9,分割成單個字元以後,如果字元比較正常 變形扭曲程序不大,可以直接用模式識別
如果變形扭曲較厲害,一般建議使用神經網路進行訓練後再識別
如果是比較簡單的驗證碼可以使用網上的一些組件,我常用的一個是OcrKingApi
不是太復雜的識別效果還可以,關鍵是免費的。使用文檔可以看一下文庫的鏈接
http://wenku..com/view/b5b6721555270722192ef7b3.html
Ⅷ python pil 怎麼去掉驗證碼線條
一、驗證碼識別的概念
機器識別圖片主要的三個步驟為消去背景、切割字元、識別字元。而現有的字元驗證碼也針對這三個方面來設計強壯的驗證碼。
以下簡圖幫助大家理解驗證碼識別的流程:
二、處理流程
其中最為關鍵的就是好圖像處理這一步了。圖像處理功能模塊包括圖像的灰度化、二值化、離散雜訊點的去除、傾斜度校正、字元的切割、圖像的歸一化等圖像處理技術 。
1、 圖像的灰度化
由於 256 色的點陣圖的調色板內容比較復雜,使得圖像處理的許多演算法都沒有辦法展開,因此有必要對它進行灰度處理。所謂灰度圖像就是圖像的每一個像素的 R、G、B 分量的值是相等的。彩色圖像的每個像素的 R、G、B 值是不相同的,所以顯示出紅綠藍等各種顏色。灰度圖像沒有這些顏色差異,有的只是亮度上的不同。灰度值大的像素點比較亮(像素值最大為 255,為白色),反之比較暗(像素值最小為 0,為黑色)。圖像灰度化有各種不同的演算法,比較直接的一種就是給像素的 RGB 值各自一個加權系數,然後求和;同時還要對調色板表項進行相應的處理。
2、 圖像的二值化
要注意的是,最後得到的結果一定要歸一到 0-255 之內。因為這是每個位元組表示
圖像數據的極限。
3、 去噪
圖像可能在生成、傳輸或者採集過程中夾帶了雜訊,去雜訊是圖像處理中常用的手法。通常去雜訊用濾波的方法,比如中值濾波、均值濾波。但是那樣的演算法不適合用在處理字元這樣目標狹長的圖像中,因為在濾波的過程中很有可能會去掉字元本身的像素。
一個採用的是去除雜點的方法來進行去雜訊處理的。具體演算法如下:掃描整個圖像,當發現一個黑色點的時候,就考察和該黑色點間接或者直接相連接的黑色點的個數有多少,如果大於一定的值,那就說明該點不是離散點,否則就是離散點,把它去掉。在考察相連的黑色點的時候用的是遞歸的方法。此處,我簡單的用python實現了,大家可以參考以下。
#coding=utf-8"""
creat time:2015.09.14
"""import cv2import numpy as npfrom matplotlib import pyplot as pltfrom PIL import Image,ImageEnhance,ImageFilter
img_name = '2+.png'#去除干擾線im = Image.open(img_name)#圖像二值化enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
im = im.convert('1')
data = im.getdata()
w,h = im.size#im.show()black_point = 0for x in xrange(1,w-1): for y in xrange(1,h-1):
mid_pixel = data[w*y+x] #中央像素點像素值
if mid_pixel == 0: #找出上下左右四個方向像素點像素值
top_pixel = data[w*(y-1)+x]
left_pixel = data[w*y+(x-1)]
down_pixel = data[w*(y+1)+x]
right_pixel = data[w*y+(x+1)] #判斷上下左右的黑色像素點總個數
if top_pixel == 0:
black_point += 1
if left_pixel == 0:
black_point += 1
if down_pixel == 0:
black_point += 1
if right_pixel == 0:
black_point += 1
if black_point >= 3:
im.putpixel((x,y),0) #print black_point
black_point = 0im.show()041424344
原驗證碼:
4、分割
圖像中一般會含有多個數字,識別的時候只能根據每個字元的特徵來進行判斷,所以還要進行字元切割的工作。這一步工作就是把圖像中的字元獨立的切割出來。
具體的演算法如下:
第一步,先自下而上對圖像進行逐行掃描直至遇到第一個黑色的像素點。記錄下來。然後再自上而下對圖像進行逐行掃描直至找到第一個黑色像素,這樣就找到圖像大致的高度范圍。
第二步,在這個高度范圍之內再自左向右逐列進行掃描,遇到第一個黑色像素時認為是字元切割的起始位置,然後繼續掃描,直至遇到有一列中沒有黑色像素,則認為這個字元切割結束,然後繼續掃描,按照上述的方法一直掃描直至圖像的最右端。這樣就得到了每個字元的比較精確寬度范圍。
第三步,在已知的每個字元比較精確的寬度范圍內,按照第一步的方法,分別進行自上而下和自下而上的逐行掃描來獲取每個字元精確的高度范圍。
5、 圖像的歸一化
因為採集的圖像中字元大小有可能存在較大的差異,或者是經過切割後的字元尺寸不統一,而相對來說,統一尺寸的字元識別的標准性更強,准確率自然也更高,歸一化圖像就是要把原來各不相同的字元統一到同一尺寸,在系統實現中是統一到同一高度,然後根據高度來調整字元的寬度。具體演算法如下:先得到原來字元的高度,跟系統要求的高度做比較,得出要變換的系數,然後根據得到的系數求得變換後應有得寬度。在得到寬度和高度之後,把新圖像裡面的點按照插值的方法映射到原圖像中。
不少人認為把每個字元圖像歸一化為 5×9 像素的二值圖像是最理想的,因為圖像的尺寸越小,識別速度就越高,網路訓練也越快。而實際上,相對於要識別的字元圖像, 5×9 像素圖太小了。歸一化後,圖像信息丟失了很多,這時進行圖像識別,准確率不高。實驗證明,將字元圖像歸一化為 10×18 像素的二值圖像是現實中是比較理想的,達到了識別速度快和識別准確率高的較好的平衡點。
三、識別
圖像識別包括特徵提取、樣本訓練和識別三大塊內容。
驗證碼識別其中最為關鍵的就是去噪和分割,這對你的訓練和識別的精度都有著很大的影響。這里只講了大致的流程,其中每個細節都有很多工作要做,這里碼字也很難講清楚,大家可以以這個流程為主線,一步步的實現,最終也就能完成你的需求。
Ⅸ 如何利用Python做簡單的驗證碼識別
1摘要
驗證碼是目前互聯網上非常常見也是非常重要的一個事物,充當著很多系統的防火牆功能,但是隨時OCR技術的發展,驗證碼暴露出來的安全問題也越來越嚴峻。本文介紹了一套字元驗證碼識別的完整流程,對於驗證碼安全和OCR識別技術都有一定的借鑒意義。
然後經過了一年的時間,筆者又研究和get到了一種更強大的基於CNN卷積神經網路的直接端到端的驗證識別技術(文章不是我的,然後我把源碼整理了下,介紹和源碼在這裡面):
基於python語言的tensorflow的『端到端』的字元型驗證碼識別源碼整理(github源碼分享)
2關鍵詞
關鍵詞:安全,字元圖片,驗證碼識別,OCR,Python,SVM,PIL
3免責聲明
本文研究所用素材來自於某舊Web框架的網站完全對外公開的公共圖片資源。
本文只做了該網站對外公開的公共圖片資源進行了爬取,並未越權做任何多餘操作。
本文在書寫相關報告的時候已經隱去漏洞網站的身份信息。
本文作者已經通知網站相關人員此系統漏洞,並積極向新系統轉移。
本報告的主要目的也僅是用於OCR交流學習和引起大家對驗證安全的警覺。
4引言
關於驗證碼的非技術部分的介紹,可以參考以前寫的一篇科普類的文章:
互聯網安全防火牆(1)--網路驗證碼的科普
裡面對驗證碼的種類,使用場景,作用,主要的識別技術等等進行了講解,然而並沒有涉及到任何技術內容。本章內容則作為它的技術補充來給出相應的識別的解決方案,讓讀者對驗證碼的功能及安全性問題有更深刻的認識。
5基本工具
要達到本文的目的,只需要簡單的編程知識即可,因為現在的機器學習領域的蓬勃發展,已經有很多封裝好的開源解決方案來進行機器學習。普通程序員已經不需要了解復雜的數學原理,即可以實現對這些工具的應用了。
主要開發環境:
python3.5
python SDK版本
PIL
圖片處理庫
libsvm
開源的svm機器學習庫
關於環境的安裝,不是本文的重點,故略去。
6基本流程
一般情況下,對於字元型驗證碼的識別流程如下:
准備原始圖片素材
圖片預處理
圖片字元切割
圖片尺寸歸一化
圖片字元標記
字元圖片特徵提取
生成特徵和標記對應的訓練數據集
訓練特徵標記數據生成識別模型
使用識別模型預測新的未知圖片集
達到根據「圖片」就能返回識別正確的字元集的目標
7素材准備
7.1素材選擇
由於本文是以初級的學習研究目的為主,要求「有代表性,但又不會太難」,所以就直接在網上找個比較有代表性的簡單的字元型驗證碼(感覺像在找漏洞一樣)。
最後在一個比較舊的網站(估計是幾十年前的網站框架)找到了這個驗證碼圖片。
原始圖:
然後就將圖片素材特徵化,按照libSVM指定的格式生成一組帶特徵值和標記值的向量文
Ⅹ 求易語言圖片識別的方法或者 源碼 謝謝 有分 瞎打的別來 不給分
強大的識圖識色模塊個插件,精易論壇搜索大漠兩個字,有一大堆你需要的模塊和插件。