當前位置:首頁 » 操作系統 » 驗證碼識別演算法

驗證碼識別演算法

發布時間: 2022-11-27 01:20:12

1. 我想用按鍵精靈 識別驗證碼 我是這個思路!求指教

相似圖片?「相似」的演算法就很復雜了,還是圖片相似.....這個思路你就別糾結了。
我是做java的,寫過驗證碼識別系統。現在一般的驗證碼識別系統,都是隨機生成數字(或字母或數字+字母),然後在一張隨機顏色的背景上用程序動態「畫」上去的。稍微專業一點的驗證碼,可能會隨機選擇字體,隨機選擇字型大小,並且在隨機的范圍內變動位置,然後再加上隨機生成幾條無敵干擾線。想要圖片一樣的概率,比中500W還難......

2. 驗證碼識別之模板匹配方法

在寫爬蟲的時候難免會遇到驗證碼識別的問題,常見的驗證碼識別的流程為:

- 圖像灰度化

- 圖像去噪(如圖像二值化)

- 切割圖片

- 提取特徵

- 訓練

但這種方法要切割圖片,而且破解驗證碼的重點和難點就在於 能否成功分割字元 。

本文要介紹的演算法 不需要進行圖片切割,也不需要進行機器訓練 ,這種方法就是模板匹配:將待識別的文字切割成一個個模板,在待識別的圖像中去匹配模板。

這篇文章將分為兩個部分:

第一部分介紹模板匹配的基本概念以及模板匹配的一種實現演算法:快速歸一化互相關匹配演算法;

第二部分是一個具體實例。

模板匹配是在圖像中尋找目標的方法之一,目的就是在一幅圖像中尋找和模板圖像最相似的區域。

模板匹配的大致過程是這樣的:通過在輸入圖像上滑動圖像塊對實際的圖像塊和輸入圖像進行匹配。

假設我們有一張100x100的輸入圖像,有一張10x10的模板圖像,查找的過程是這樣的:

從輸入圖像的左上角(0,0)開始,切割一塊(0,0)至(10,10)的臨時圖像;

用某種方法得出臨時圖像與模板的相似度c,存放到相似度矩陣中(矩陣大小為91 x91);

切割輸入圖像從(0,1)至(10,11)的臨時圖像,對比,並記錄到相似度矩陣;

重復上述步驟,直到輸入圖像的右下角。

最終得到一個相似度矩陣,找到矩陣中的最大或最小值,最大值(最小值)對應的臨時圖像即為與模板最相似的圖像。

在步驟b中,求模板與圖像的相似度有多種方法,如平均絕對差演算法(MAD)、絕對誤差和演算法(SAD)、誤差平方和演算法(SSD)、歸一化互相關演算法(NCC),本文使用的是歸一化互相關演算法。

什麼是歸一化互相關?

從幾何圖形上來看,空間中的兩個向量,同方向平行時,歸一化互相關系數為1,表示兩個向量最相似,反方向平行時歸一化互相關系數為-1,垂直時為0,表示最不相似(用互相垂直的三個向量來代表整個空間也是這個道理,垂直的向量之間不包含對方的信息,相關系數為0),存在一定夾角時處於(-1,1),是不是跟餘弦函數很像,cos(0)=1,cos(pi/2)=0,cos(pi)=-1。就是這個樣子的,相關系數可以看作是兩個向量之間夾角的cosine函數。

在數學中是這么計算cosine函數的,假設兩個n維向量X,Y,對應的坐標分別為(x1,x2,…xn), (y1,y2,…yn) 則:

(如果想要了解更多,請參考文獻【2】)

但這是一維的,在模板匹配中要再加一個維度 (具體演算法請參考文獻【3】) ,簡要說一下文獻【3】的內容:如果直接計算二維相似度的話計算復雜度會非常高,文獻【3】利用快速傅里葉變換與積分圖像快速演算法來降低計算復雜度。

接下來讓我們看一個具體的應用。

模板匹配識別驗證碼的具體步驟為:

1. 找出圖片中所有可能出現的字元,製作成模板集合

2. 圖像灰度化

3. 圖片去噪(二值化)

4. 模板匹配

5. 匹配結果優化

要識別的圖片如下,以識別圖片中的加字為例:



要從image中找到與模板最匹配的部分,Template圖像是事先從image圖像中截取的一部分。所用的為python模塊skimage中的match_template方法,match_template方法使用的是快速歸一化互相關演算法 【2】 。

遍歷模板圖像集合,與圖像匹配,如果dist大於閾值h,則認為此模板在圖像中存在,否則不存在,繼續匹配下一個模板,直到遍歷完所有模板。

以模板『加』為例,圖像大小為40x260,模板大小27x27,result是一個大小為(14,234)的矩陣,即上文提到的相似度矩陣,矩陣中的數值屬於[-1,1],找到result中最大值所處的對應位置即為與模板最匹配的圖像位置:x=66,y=11,正好對應模板圖像在image中所處的位置。 (更多內容請參閱參考文獻【4】)

但這是比較好的情況,因為在匹配時遍歷了所有的模板,而一張圖片中出現的模板數量是有限的,比如數字』四』在圖片中是沒有的,這時就要根據某種規則去掉這些在圖片中沒有出現的模板:程序中使用dist變數來過濾匹配結果,如果dist變數大於某個值則認為此模板在圖像中不存在。

最後的result_list中可能仍然存在一些圖片中不存在的模板或者匹配不精確的模板,比如數字『一』在模板中不存在,但仍然可以匹配到,因為數字『二』中可以匹配到『一』,需要進一步優化,優化方法有很多,比如當匹配到的兩個模板距離過近時,選擇較大的那個模板,其餘方法留給讀者自行考慮吧。

後續將會推出如何使用深度學習識別驗證碼,敬請期待~


參考文獻:

http://www.cnblogs.com/beer/p/5672678.html

http://www.ruanyifeng.com/blog/2013/03/cosine_similarity.html

J. P. Lewis, 「Fast Normalized Cross-Correlation」, Instrial Light and Magic.

http://scikit-image.org/docsjinhqin/dev/auto_examples/plot_template.html


本文作者 :李暉(點融黑幫),畢業於電子科技大學,現就職於點融成都Data部門,對一切新鮮事物充滿好奇,對跳舞毫無抵抗力的活力女青年一枚。

3. 請教生成如圖驗證碼的python演算法

def gene_text():
source = list(string.letters)
for index in range(0,10):
source.append(str(index))
return ''.join(random.sample(source,number))#number是生成驗證碼的位數
然後我們要創建一個圖片,寫入字元串,需要說明的這裡面的字體是不同系統而定,如果沒有找到系統字體路徑的話,也可以不設置
def gene_code():
width,height = size #寬和高
image = Image.new('RGBA',(width,height),bgcolor) #創建圖片
font = ImageFont.truetype(font_path,25) #驗證碼的字體和字體大小
draw = ImageDraw.Draw(image) #創建畫筆
text = gene_text() #生成字元串
font_width, font_height = font.getsize(text)
draw.text(((width - font_width) / number, (height - font_height) / number),text,
font= font,fill=fontcolor) #填充字元串
接下來,我們要在圖片上畫幾條干擾線

#用來繪制干擾線
def gene_line(draw,width,height):
begin = (random.randint(0, width), random.randint(0, height))
end = (random.randint(0, width), random.randint(0, height))
draw.line([begin, end], fill = linecolor)
最後創建扭曲,加上濾鏡,用來增強驗證碼的效果。
image = image.transform((width+20,height+10), Image.AFFINE, (1,-0.3,0,-0.1,1,0),Image.BILINEAR) #創建扭曲
image = image.filter(ImageFilter.EDGE_ENHANCE_MORE) #濾鏡,邊界加強
image.save('idencode.png') #保存驗證碼圖片

4. 按鍵精靈網頁圖片驗證碼如何簡便准確識別(下圖為驗證圖片示例)

這個比較麻煩,驗證碼一直是一個深坑。目前只能使用智能演算法進行大量分析,然後智能演算法才可以識別大部分的驗證碼。不過這方面還需要涉及到圖像處理,很復雜。兄弟,還是算了吧,目前還沒有能完全識別的軟體,所以自己別折騰了。目前市面上的都是人工識別的,他們把驗證碼鍵入到其他的網頁中,然後讓那些網者識別輸入。

5. web滲透測試之攻破登錄頁面

當我們在做滲透測試時,無論廠商項目還是src眾測項目,都會遇到給一堆登錄系統的URL,然後讓我們自己去測,能不能進去全看天的狀況,本文將講一下怎麼突破這種封閉的web系統,從而進行更深層次的滲透 ,學完後你會發現,其實你就是系統管理員。

如果能直接繞過登錄系統界面,後面的就比較好做了,目前常見的登錄系統繞過方法有:

大部分情況下,系統登錄頁面都不存在xss,目錄遍歷,SQL注入等漏洞,這時候最常用的方法就是爆破和猜解登錄口令,密碼猜解最關鍵的就是字典要高效准確

https:// down.52pojie.cn/Tools/N etwork_Analyzer/Burp_Suite_Pro_v1.7.31_Loader_Keygen.zip

2.准確的用戶名,密碼字典是高效破解的重中之重 ,一般都是指定幾個常見用戶名 ,嘗試 top500,top1000進行爆破 字典不必要太大,最重要的是針對性要強 ,下面是top1000:

鏈接: https:// pan..com/s/1-XztuB 8YTfpT5aUBVbmbzA 密碼: 56pb

3.如果還是不能猜解成功,就要根據目標信息用字典生成器構造針對性的字典來猜解了,推 薦幾個比較好的字典生成工具

pydictor:

LandGrey/pydictor

crunch:

crunch - wordlist generator

Cewl:

digininja/CeWL

Cupp:

Mebus/cupp

因為管理員許可權較高,通常我都會先進行管理員口令的猜解,總結了一些常見的管理員用戶名字典

<u>鏈接:</u> <u> https:// pan..com/s/1sOD1-u whnStaw_LfMOf-sQ </u><u>密碼: 3yqe</u>

用此用戶名字典,再加上弱口令top1000,同時爆破系統管理員用戶名密碼

鏈接: https:// pan..com/s/1-XztuB 8YTfpT5aUBVbmbzA 密碼: 56pb

常見的普通用戶用戶名是姓名拼音,總結了普通用戶字典

TOP3000姓名

<u>鏈接:</u> <u> https:// pan..com/s/1qN9kCF tymP4ugvu3FFkKbA </u><u>密碼: hkzp</u>

TOP10w姓名

https:// github.com/rootphantome r/Blasting_dictionary/blob/master/top10W.txt

通常可以選擇幾個弱口令密碼,比如:123456,123abc,111111,然後配合top10w來猜解登陸口令,一些初始化的默認密碼也很簡單,如果能找到配合top10w通常也能爆出登錄口令

現在的業務系統口令傳輸到後端前都會進行加密處理 ,web常見的加密方式有 md5 加密、sha1 加密、RSA 加密,在此基礎上總結了兩種破解方式:

1.利用burpsuite的payload processing功能,把字典按照加密方式先加密再發包

2.用字典生成工具生成加密好的字典,然後burp直接載入加密字典

這里推薦的字典生成工具是pydictor,encode功能內置了多種加密演算法,調用handler工具直接加密自己的明文字典

如果登錄系統設置了IP地址白名單,我們可以通過下面的幾個http頭欄位偽造IP地址,用burp抓包後將下面的某個http頭欄位加入數據包發送到伺服器

<pre class="prettyprint hljs css" style="padding: 0.5em; font-family: Menlo, Monaco, Consolas, "Courier New", monospace; color: rgb(68, 68, 68); border-radius: 4px; display: block; margin: 0px 0px 1.5em; font-size: 14px; line-height: 1.5em; word-break: break-all; overflow-wrap: break-word; white-space: pre; background-color: rgb(246, 246, 246); border: none; overflow-x: auto;">Client-Ip: 127.0.0.1
X-Client-IP: 127.0.0.1
X-Real-IP: 127.0.0.1
True-Client-IP: 127.0.0.1
X-Originating-IP: 127.0.0.1
X-Forwarded-For: 127.0.0.1
X-Remote-IP: 127.0.0.1
X-Remote-Addr: 127.0.0.1
X-Forwarded-Host: 127.0.0.1</pre>

如果在系統登陸界面加上了驗證碼,那麼上面的方法基本上就都失效了,那有什麼方法可以繞過驗證呢

1.圖形驗證碼不刷新

在一段時間內只要不刷新頁面,無論登錄失敗多少次都不刷新驗證碼,這個時候就可以使用同一個驗證碼根據上面的方式進行暴力破解

2.驗證碼失效

不管在驗證碼表單輸入什麼樣的數據,都會判斷通過,但這種情況很少見

3.圖形驗證碼可被識別,抓包直接可以獲得驗證碼

很多網站的驗證碼都可以在請求數據包中找到,或者隱藏在request的cookie中,response的源碼中,可以利用burpsuite的macros來匹配response中的相應數據,具體的爆破方法參見下文:

burpsuite爆破密碼(含驗證碼) - CSDN博客

4.圖形驗證碼參數直接繞過

對於request數據: user=admin&pass=1234&vcode=brln,有兩種繞過方法:

一是驗證碼空值繞過,改成 user=admin&pass=1234&vcode=;

一是直接刪除驗證碼參數,改成 user=admin&pass=1234。

5.萬能驗證碼

滲透測試的過程中,有時候會出現這種情況,系統存在一個萬能驗證碼,如0000、9999,只要輸入萬能驗證碼,就可以無視驗證碼進行暴力破解。

6. 驗證碼可被識別

有些圖形驗證碼加入的像素線條過於簡單,使用圖形驗證碼識別工具可以識別出每次更換的驗證碼,在平常的漏洞挖掘過程中,如果我們發現登錄的驗證碼非常簡單且易於識別,那我們就可以嘗試使用自動化工具來進行登錄破解了,如 PKAV 的 HTTP Fuzzer

7.使用機器學習演算法識別驗證碼

主要是對特定網站的圖形驗證碼訓練識別模型,達到一定的准確率就可以調用進行模擬提交圖形驗證碼的值了。可參考以下三篇文章進行學習:

使用KNN演算法識別驗證碼:

http:// nlao.github.io/2016/0 9/22/%E9%AA%8C%E8%AF%81%E7%A0%81%E7%A0%B4%E8%A7%A3%E6%8A%80%E6%9C%AF%E5%9B%9B%E9%83%A8%E6%9B%B2%E4%B9%8B%E4%BD%BF%E7%94%A8K%E8%BF%91%E9%82%BB%E7%AE%97%E6%B3%95/

卷積神經網路識別驗證碼

http:// nlao.github.io/2016/0 9/23/%E9%AA%8C%E8%AF%81%E7%A0%81%E7%A0%B4%E8%A7%A3%E6%8A%80%E6%9C%AF%E5%9B%9B%E9%83%A8%E6%9B%B2%E4%B9%8B%E4%BD%BF%E7%94%A8%E5%8D%B7%E7%A7%AF%E7%A5%9E%E7%BB%8F%E7%BD%91%E7%BB%9C/

使用 TensorFlow 訓練驗證碼

http:// nlao.github.io/2017/0 4/10/%E4%BD%BF%E7%94%A8TensorFlow%E8%AE%AD%E7%BB%83Weibo-cn%E9%AA%8C%E8%AF%81%E7%A0%81/

對於網站要求輸入手機號,接收手機簡訊並校驗簡訊驗證碼是否正確進行登錄的系統,突破的主要思路有:

1.簡訊驗證碼生命期限內可暴力枚舉

在驗證碼還未過期的時間段內,可枚舉全部的純四位數字、六位數字等較簡單的簡訊驗證碼;

2. 簡訊驗證碼在數據包中返回

和圖形驗證碼一樣,在response中可以直接獲取到簡訊驗證碼。

3. 修改請求數據包參數或 Cookie 值繞過

比如有 post 數據包:mobile=12435437658&userid=123456, Cookie中有:codetype=1

在特定步驟,修改 mobile=自己的手機號,自己手機就可以收到別人的驗證碼,後面再用別人的手機號和接收到的驗證碼登錄;

修改 Cookie 中可疑的參數和值,進行繞過,比如上面修改 codetype=0;

4. 修改返回包繞過

提交錯誤的簡訊驗證碼,返回包中有: status=false,在Burpsuite中修改為 status=true,即可繞過前端判斷,成功進入系統。具體還要結合實際的場景,靈活操作。

web系統登陸頁面看似銅牆鐵壁,但其實只要梳理一遍思路,右鍵看過每一行網站源碼,弄懂每個參數的意義,查看每一個js文件,就會發現其實自己就是系統管理員,只是我把密碼忘了,現在我要用上面的方式進入。

6. 如何利用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素材選擇

    由於本文是以初級的學習研究目的為主,要求「有代表性,但又不會太難」,所以就直接在網上找個比較有代表性的簡單的字元型驗證碼(感覺像在找漏洞一樣)。

    最後在一個比較舊的網站(估計是幾十年前的網站框架)找到了這個驗證碼圖片。

    原始圖:

  • def get_feature(img): """

  • 獲取指定圖片的特徵值,

  • 1. 按照每排的像素點,高度為10,則有10個維度,然後為6列,總共16個維度

  • :param img_path:

  • :return:一個維度為10(高度)的列表 """


  • width, height = img.size


  • pixel_cnt_list = []

  • height = 10 for y in range(height):

  • pix_cnt_x = 0 for x in range(width): if img.getpixel((x, y)) == 0: # 黑色點

  • pix_cnt_x += 1


  • pixel_cnt_list.append(pix_cnt_x) for x in range(width):

  • pix_cnt_y = 0 for y in range(height): if img.getpixel((x, y)) == 0: # 黑色點

  • pix_cnt_y += 1


  • pixel_cnt_list.append(pix_cnt_y) return pixel_cnt_list

  • 然後就將圖片素材特徵化,按照libSVM指定的格式生成一組帶特徵值和標記值的向量文

7. 手機驗證碼的原理是什麼

驗證碼一般是防止有人利用機器人自動批量注冊、對特定的注冊用戶用特定程序暴力破解方式進行不斷的登陸、灌水。因為驗證碼是一個混合了數字或符號的圖片,人眼看起來都費勁,機器識別起來就更困難。像網路貼吧未登錄發貼要輸入驗證碼大概是防止大規模匿名回帖的發生。 一般注冊用戶ID的地方以及各大論壇都要要輸入驗證碼

8. 驗證碼是怎麼回事

驗證碼(CAPTCHA)是「Completely Automated Public Turing test to tell Computers and Humans Apart」(全自動區分計算機和人類的圖靈測試)的縮寫,是一種區分用戶是計算機還是人的公共全自動程序。
可以防止:惡意批量注冊、惡意破解密碼、刷票、論壇灌水,有效防止某個黑客對某一個特定注冊用戶用特定程序暴力破解方式進行不斷的登陸嘗試。

說的通俗一點就是,計算機會產生一個驗證碼問題(一般就是將一串隨機產生的數字或符號,生成一幅圖片, ),但這個驗證問題計算機自身是不能識別的,只有人類才可解答,計算機就可以根據驗證碼的輸入來判斷當前是人在操作,還是機器在操作。從而起到防止作用。

常見的驗證碼,有GIF動畫驗證碼,手機簡訊驗證碼,隨著技術的進步,計算機也可以慢慢破解一些常規類型的驗證碼,因此需要使用更先進的演算法和方式來產生驗證碼,常見的方式就是在驗證碼中加上一些干擾,例如隨機畫數條直線,畫一些點等,其實就是防止計算機自動識別,這也造成在有時候驗證碼人眼也看不清楚(所以一般都帶有類似「看不清,換一張」的提示)。

9. 為什麼網頁的驗證碼的字母總是那麼難辨認

我來說下自己的想法,本人在一家做圖像識別的公司呆了三年,做銷售工作。識別驗證碼的使用的技術是光符字元識別技術,即OCR技術,就是將圖片中的文字識別為電子流的技術。這項技術目前已經得到廣泛應用,比如掃描識別,身份證識別,銀行卡號識別,車牌識別等等。驗證碼識別也是其中一種,也是難度比較大的一種。為什麼難呢,一方面是因為它總體來說沒有規律,無法使用模版識別方式,身份證識別是典型的模版識別方式,因為身份證識別位置是固定的。另一方面是各類因素影響識別率較大,比如傾斜,背景等。總的來說就是目前ocr技術無法使驗證碼識別率達到一個滿意的效果。哪些核心技術限制了它的識別率呢?

1.傾斜矯正技術。整個識別驗證碼流程大概是這樣的。先將驗證碼區域圖像獲取下來,進行二值化,將圖片中的字元一個一個切分出來,分別進行識別,輸出整體識別結果。當一個字元是歪的時候(此處說的歪是大於一定角度的,具體記不清了,但驗證碼中經常出現),切下來後無法進行傾斜矯正,那麼計算機可能認為要識別的字就是這樣的,識別後肯定是錯誤的。為什麼不能進行傾斜矯正呢?因為傾斜矯正是需要一個基準點的,比如身份證識別可以拿照片位置做記住點,這樣傾斜多少度識別引擎是知道的,就可以矯正,但驗證碼沒有。所以驗證碼識別這傾斜矯正是一個難點!

2.圖像質量影響。目前的ocr技術一般都需要二值化,即將彩色圖片變為黑白的後再進行切分識別。但這塊有個痛點,就是背景顏色要比識別的字顏色要淺這樣識別才有保證,但驗證碼有的不是這樣,影響了識別率。另外就是獲取但的圖片解析度不夠,ocr識別是需要每個字要有一定的dpi的,驗證碼很多字達不到,ocr識別率當然差。不要跟我說你能看清,因為人往往是理想的,但技術是腳踏實地的,這塊後邊我會說。為什麼有些網站的驗證碼特別簡單,以上的問題基本沒有,ocr識別率應該不低,卻沒人做識別插件呢?這個需要從商務角度說,我認為有以下幾點:

1.還是識別率不夠高。對於需要這項技術的公司,一般都是做產品的,他們會對用戶體驗這塊非常的關注。你設想一下,當你搶票的時候,驗證碼識別結果一出來,竟然有兩個字元是錯的,你還要去改,你肯定會罵娘,嘮叨不如老子自己手輸了。對於這些產品公司他們肯定會關注這點啊,所以有些這塊不是強需求的公司就不做這塊了。但對於有些產品,這塊用戶需求巨大,比如搶火車票的這種產品,這塊是競爭的一個巨大優勢,在目前技術達不到非常高的識別率又不想太影響用戶體驗情況下,他們是怎樣做的呢?先要說下引擎的識別結果不是只有一個的,而是很多計算機認為可能的結果,每個結果都有一個分數,最後選分數最高的一個為輸出結果。通過大量訓練比對,可模糊確定界定正確和不正確結果的一個值。好了回到之前的問題,產品公司通過這個值來只輸出他們認為絕對正確的結果,而有的所有識別結果都沒超過這個值,那就不輸出了,用戶自己填。這樣做的好處是,減少了用戶一定的操作,又不太影響用戶體驗。真是印證了我們總跟客戶說的那句話,目前這些技術只能減輕用戶的工作量,而不能完全代替!之前這種方法效果也不是太好,因為這個值太難界定,錯誤率也不低,所以一些有錢的公司是這樣做的:買兩家技術,識別結果進行比對,輸出比對一樣的即他們認為絕對准確的結果,比對不一樣的結果則不輸出,這種方法是目前比較好的方法,但成本比較高。老版本的智行火車票好像就這么做的。

2.驗證碼設定奇葩。我們想輸入省事兒設定驗證碼的肯定要阻止啊,出了一批連人都不容易知道怎麼輸的驗證方式,這已經超出圖像識別領域,尤其是一些流量大的公司,圖片我都看不懂計算機能懂么!

3.技術自主研發公司的壁壘。這些技術公司也要發工資吃飯的,驗證碼識別只是圖像識別應用的很小一部分,和主流的市場需求量大的身份證識別,銀行卡識別,票據識別比需求量還是小,況且有重重阻礙,技術推動力自然小,技術進步很慢。好了,以上回答按照我的理解基本可以解答題主問題,目前驗證碼識別應用率不高主要因為技術瓶頸和市場阻礙因素。下面我說點題外話,僅代表我個人觀點,不吐不快。當我剛開始做核心技術銷售的時候和後段技術人員沖突很多。以題主想法舉例,銷售站在客戶角度認為既然能夠看清,圖片效果不錯,那識別應該問題不大。而後端技術給出的結果是無法保證,那麼沖突來了,是我一廂情願過於理想還是技術不給力。當我全程看到他們做的事之後,才改變了我的認知。為了提升零點幾的識別率,他們需要大量的數據進行訓練,這些數據收集來的少大多是買來的,特別貴。大量數據拿來後經過初步的過濾,技術人員通過演算法進行切分。你能想想幾T的全文字圖片數據切分成單個字元有多少么。然後需要數據部門大量人工對這些字元進行人工標注(標注每個字元圖片的識別結果),這個時間可能是通宵達旦的幾天,可能是幾個月。然後將分類好的字元拿給技術進行初步訓練,然後統計,優化演算法。好,再來一輪,訓練,優化演算法。一遍一遍,直到達到預期目標。這里需要大量的人工參與,大量的資金,大量的時間為了提升一點點的識別率。這還不算核心技術人員腦洞大開的精力和時間,還有進行前期實驗的時間。我不止一次看到他們冥思苦想,通宵達旦,反復實驗。說實話,我看著都枯燥,都累。但就是這些我們所說的碼農單身狗,讓人機智能交互技術一點一點在往前走,腳踏實地。往小了說這是他們的職責,往大了說他們就是在默默無聞的改變我們的生活!為什麼我之前會給客戶肯定答案呢?因為我理想,想當然,對技術不了解,或者說根本不了解他們在做什麼!所以請不要像我以前一樣在不了解實際情況之前說:這是可以做的啊,看著挺簡單啊,為什麼沒人做啊?不去了解如何知道可以,如何知道簡單,如何知道這東西沒人在做?只是不了解不知道罷了,這是對默默無聞搞研究的技術人員的一種不尊重!如果現在在遇到不敢肯定的技術問題,我會坦然的跟客戶說:不好意思,這塊我確實不是很清楚,我需要問下我們專業的技術人員。

10. android識別驗證碼圖片的原理與思路

假設已經把驗證碼圖片保存到本地了
我說一下驗證碼識別的大致步驟吧
1,讀取圖片到bitmap
2,進行灰度操作
3,進行才二值操作
4,如果有干擾點 一般用濾波器或八鄰域去干擾點
5,如果有干擾線 如果是簡單的直線可以用掃描法,八後法等,復雜的應該根據特點調整演算法
6,如果有干擾色塊 也應該想法去除
7,如果有較大的傾斜 需要進行適當校正
8,此時得到的應該是比較干凈的字元了,如果是非粘連的可以直接用投影法分割成單個字元
如果有粘連,需要根據圖形特點從演算法上做相應的處理,保證大致分割正確
9,分割成單個字元以後,如果字元比較正常 變形扭曲程序不大,可以直接用模式識別
如果變形扭曲較厲害,一般建議使用神經網路進行訓練後再識別

如果是比較簡單的驗證碼可以使用網上的一些組件,我常用的一個是OcrKingApi

不是太復雜的識別效果還可以,關鍵是免費的。使用文檔可以看一下文庫的鏈接

http://wenku..com/view/b5b6721555270722192ef7b3.html

熱點內容
解壓到當前文件夾右鍵 發布:2024-04-26 03:57:08 瀏覽:979
html5android教程視頻下載 發布:2024-04-26 03:09:59 瀏覽:867
伺服器的描述是什麼 發布:2024-04-26 03:08:32 瀏覽:394
個人加密 發布:2024-04-26 03:01:23 瀏覽:520
linuxusbgadget 發布:2024-04-26 02:52:54 瀏覽:304
我的世界空島世界伺服器地址 發布:2024-04-26 01:39:08 瀏覽:248
尼爾機械紀元加密 發布:2024-04-26 01:37:11 瀏覽:867
在控制台輸出sql語句 發布:2024-04-26 01:08:12 瀏覽:432
動畫java 發布:2024-04-26 01:02:40 瀏覽:12
得力文件夾5302 發布:2024-04-26 00:21:32 瀏覽:91