為什麼有些驗證碼看起來很容易但是沒人做自動識別的?

比如說B站的驗證碼,除了背景有一些擾亂,字母稍作旋轉以外,字母本身非常工整,沒有扭曲也沒有缺失,相互之間的重疊度也很低,這種驗證碼要做自動識別應該並不難吧?但似乎從沒見過任何的驗證碼自動識別軟體,這是為什麼呢?


知乎首答一發!!!!


還記得從前,驗證碼還只是這樣:

作為一名優秀的程序猿的你在想,為什麼不做一個自動識別軟體,驗證碼全是數字,你只要收集一個包含10個數字的訓練庫,把圖片二值化然後分隔單個字元最後對比訓練庫里的數字最終識別,so easy!
作為一個有情懷的天才程序猿,你花了1天搞定了該程序,自豪感爆棚。
自己用了幾天趕腳非常不錯,於是你不僅自己用,還發給親戚朋友們用。儘管它只是省了3秒鐘的輸入驗證碼的時間不過你的親戚朋友們因為覺得它確實很高大上,紛紛誇你並把它分享給自己的朋友。

然而,終於有一天,你的作品被傳到了另一個天才程序猿手裡,非常不巧的是,他就是運營這個網站並且整出「驗證碼」這玩意兒的那個程序猿。他的工作任務就是確保在用戶電腦前執行登陸或者註冊操作的是一個「人」而不是某個黑科技刷子。
看完你的東西他瞬間覺得日了狗了,覺得你的軟體是對他工作的侮辱,是在向他的智商發出挑戰...

於是,這貨大手一揮,後來的驗證碼變成了,這樣:

次日你剛起床,發現你的郵箱已經炸了,裡面全是大家在向你反饋你的軟體不能用了。於是打開網頁看到了新版的驗證碼。
你冷哼一聲,當然,你是一個天才程序猿,你只簡單的向你的訓練庫里又添加了52個大小寫英文字母就解決了這個問題。完了以後你還順手添加了幾個日文平片假名,也沒別的目的,就是多裝個B。
於是你的軟體又能用了。你覺得你的智商已經碾壓了這個做網站的貨。

然而,不可避免的,過了幾天你發現,驗證碼開始喪心病狂了,它已經變成了這樣:

現在你就覺得有點懵逼了,漢字那麼多,你覺得這個對面那個做驗證碼的程序猿就是想玩兒死你。不過沒關係,換湯不換藥。於是你又花了一個禮拜,寫了一個字元自動截取的代碼,在網上整理出了常用漢字3000個,並且分別截取了這3000個字的黑體、宋體和楷體的圖片並放進了訓練庫里。你的程序又能用了。
這次以後你覺得很累但是真的很有成就感,你覺得你就是全天下最diao的程序猿。然後你就去補睡了。

然而,你不會意識到的是,在你睡覺的時候,另一個程序猿正在被你逼瘋。
幾天以後,你發現驗證碼突然變得開始反人類:
有,這樣的

這樣的

這樣的

這樣的

還有這樣的

- -|

等到某天你再從睡夢中醒過來的時候會發現,整個世界都已經不一樣了,你的郵箱里全是憤怒的朋友、朋友的朋友還有朋友的朋友的朋友。
他們不單單只吐槽你的軟體不能用了,而且更關鍵是!!喵了個咪的這TM啥玩意兒啊!直接用眼看都特么看不清這些驗證碼到底是個毛了啊!!!!

看到這些牛鬼蛇神我猜你整個人都已經斯巴達了!!!

但是怎麼辦,你是天才程序猿!你不能輸啊!
於是你繫上頭巾,泡好咖啡,借了各種書籍擼起袖子準備開干,勢要搞定這些驗證碼。

此時,電話響了。

是你的老媽。

你媽說:兒啊,你媽跟你爸打算出去度個假,想要在網上訂個火車票,上了12306的網站但是它最近不知道為什麼突然換了一種驗證碼啊。你爸媽是真老了,看了看發現是真不會輸這個驗證碼,聽二姨說你搞了個什麼軟體能直接自動給輸了,你給我看看唄。

你輕鬆的應承下來,不急不慢的打開12306網站。

終於

你惶恐的小眼神一眼就看到了如下玩意兒:

聽說大部分程序狗高中的時候都學的理科!!!!!!!!!!


就問你服不服!

-----------------------------------------------------------分割一下-----------------------------------------------------

槽吐完了再給大家看一看最初的那個清純簡單的驗證碼

1秒辨別,2秒輸入

所以想要表達的是,其實自動識別驗證碼這種東西,只要你不是黃牛黨殭屍號出售員刷票專業戶這種職業,花盡了心思去做完了也就只是裝裝X,並沒有什麼卵用。何必呢。

最後想一想人家對面哪位一直跟你杠正面,不停開腦洞搞出更加變態的驗證碼的小哥,你熬一個夜意味著他馬上得熬一個夜,於是你又熬兩個夜,他再熬四個夜...... 0.0 炸!
所以,大家都是程序狗,大學選專業的時候一不小心走了神才踏上這條不歸路的,互相放一條生路吧!!!Q.Q

------------------------------------------------------------------再割一下------------------------------------------------


(8.29)感謝大家的點贊~ 知乎首答就這麼多贊開心得不得了lol。
有同學問我說我似乎沒有真正回答為什麼程序猿不做自動識別的這個問題

答案就是,又不是沒做出來過

好吧我想我們可以來個類比:
做驗證碼的那位程序猿A就像是拿了一個花瓶來讓大家認,做自動識別程序的小哥B就像是一直試圖教機器認識這是個花瓶一樣。

起初,A為了反擊B,給花瓶上色、用布包起來只留個輪廓或者乾脆掰掉一個把手來試圖讓B的程序識別不了這個花瓶。
可是B是個很牛X的程序猿啊而且他調教的程序也相當的蒸汽!每每都能拆掉A出的奇招。
但是每次A只要隨手給出一點變動,B就要花上一兩天來繼續優化他的程序!


可是各位,你們有沒有發現再這樣下去無非只有一個結局。

就是... ...
A說:"媽蛋!算你狠!LZ不跟你玩兒了!大不了咱倆魚死網破!"
然後順手直接把花瓶砸了......
"你丫倒是接著拼起來認啊!!"

所以事實就是,現在的很多奇葩驗證碼已經很難做到自動識別了,而且就算有人做到了,估計識別率暫時也無法保證,而有情懷的程序猿們一般都會把用戶體驗看得很重,殘次品是不會到處去發給大家炫耀的。

況且
等到有一天程序猿B調教好了程序又能識別了

A只要把花瓶渣撿起來砸得更碎一點=、= 管你們自己用眼睛還能不能識別


----------------------------------------------------------------------
部分圖片來源於網路,侵刪。


這樣的驗證碼


這些驗證碼再簡單有新版reCAPTCHA簡單么?

只要點擊一下「我不是機器人」就可以了2333

演算法基於對用戶一段時間內操作的分析,比如滑鼠移動,cookie,瀏覽器環境等等,難點我認為在於機器人想要完全模擬這樣的環境會比較複雜(比如用WebDriver對網頁做操作和人類對網頁做操作還是存在細微的區別),而後想要表現的像一個人也有點困難(數據似乎會發到Google那邊做一做分析),目前沒看到靠譜的破解方法(也許是我看的不夠多)。


我來說下自己的想法,本人在一家做圖像識別的公司呆了三年,做銷售工作。

識別驗證碼的使用的技術是光符字元識別技術,即OCR技術,就是將圖片中的文字識別為電子流的技術。

這項技術目前已經得到廣泛應用,比如掃描識別,身份證識別,銀行卡號識別,車牌識別等等。驗證碼識別也是其中一種,也是難度比較大的一種。

為什麼難呢,一方面是因為它總體來說沒有規律,無法使用模版識別方式,身份證識別是典型的模版識別方式,因為身份證識別位置是固定的。另一方面是各類因素影響識別率較大,比如傾斜,背景等。總的來說就是目前ocr技術無法使驗證碼識別率達到一個滿意的效果。

哪些核心技術限制了它的識別率呢?
1.傾斜矯正技術。
整個識別驗證碼流程大概是這樣的。先將驗證碼區域圖像獲取下來,進行二值化,將圖片中的字元一個一個切分出來,分別進行識別,輸出整體識別結果。當一個字元是歪的時候(此處說的歪是大於一定角度的,具體記不清了,但驗證碼中經常出現),切下來後無法進行傾斜矯正,那麼計算機可能認為要識別的字就是這樣的,識別後肯定是錯誤的。為什麼不能進行傾斜矯正呢?因為傾斜矯正是需要一個基準點的,比如身份證識別可以拿照片位置做記住點,這樣傾斜多少度識別引擎是知道的,就可以矯正,但驗證碼沒有。所以驗證碼識別這傾斜矯正是一個難點!
2.圖像質量影響。目前的ocr技術一般都需要二值化,即將彩色圖片變為黑白的後再進行切分識別。但這塊有個痛點,就是背景顏色要比識別的字顏色要淺這樣識別才有保證,但驗證碼有的不是這樣,影響了識別率。另外就是獲取但的圖片解析度不夠,ocr識別是需要每個字要有一定的dpi的,驗證碼很多字達不到,ocr識別率當然差。不要跟我說你能看清,因為人往往是理想的,但技術是腳踏實地的,這塊後邊我會說。

為什麼有些網站的驗證碼特別簡單,以上的問題基本沒有,ocr識別率應該不低,卻沒人做識別插件呢?
這個需要從商務角度說,我認為有以下幾點:
1.還是識別率不夠高。對於需要這項技術的公司,一般都是做產品的,他們會對用戶體驗這塊非常的關注。你設想一下,當你搶票的時候,驗證碼識別結果一出來,竟然有兩個字元是錯的,你還要去改,你肯定會罵娘,嘮叨不如老子自己手輸了。對於這些產品公司他們肯定會關注這點啊,所以有些這塊不是強需求的公司就不做這塊了。但對於有些產品,這塊用戶需求巨大,比如搶火車票的這種產品,這塊是競爭的一個巨大優勢,在目前技術達不到非常高的識別率又不想太影響用戶體驗情況下,他們是怎樣做的呢?先要說下引擎的識別結果不是只有一個的,而是很多計算機認為可能的結果,每個結果都有一個分數,最後選分數最高的一個為輸出結果。通過大量訓練比對,可模糊確定界定正確和不正確結果的一個值。好了回到之前的問題,產品公司通過這個值來只輸出他們認為絕對正確的結果,而有的所有識別結果都沒超過這個值,那就不輸出了,用戶自己填。這樣做的好處是,減少了用戶一定的操作,又不太影響用戶體驗。真是印證了我們總跟客戶說的那句話,目前這些技術只能減輕用戶的工作量,而不能完全代替!之前這種方法效果也不是太好,因為這個值太難界定,錯誤率也不低,所以一些有錢的公司是這樣做的:買兩家技術,識別結果進行比對,輸出比對一樣的即他們認為絕對準確的結果,比對不一樣的結果則不輸出,這種方法是目前比較好的方法,但成本比較高。老版本的智行火車票好像就這麼做的。
2.驗證碼設定奇葩。我們想輸入省事兒設定驗證碼的肯定要阻止啊,出了一批連人都不容易知道怎麼輸的驗證方式,這已經超出圖像識別領域,尤其是一些流量大的公司,圖片我都看不懂計算機能懂么!
3.技術自主研發公司的壁壘。這些技術公司也要發工資吃飯的,驗證碼識別只是圖像識別應用的很小一部分,和主流的市場需求量大的身份證識別,銀行卡識別,票據識別比需求量還是小,況且有重重阻礙,技術推動力自然小,技術進步很慢。

好了,以上回答按照我的理解基本可以解答題主問題,目前驗證碼識別應用率不高主要因為技術瓶頸和市場阻礙因素。

下面我說點題外話,僅代表我個人觀點,不吐不快。
當我剛開始做核心技術銷售的時候和後段技術人員衝突很多。以題主想法舉例,銷售站在客戶角度認為既然能夠看清,圖片效果不錯,那識別應該問題不大。而後端技術給出的結果是無法保證,那麼衝突來了,是我一廂情願過於理想還是技術不給力。當我全程看到他們做的事之後,才改變了我的認知。為了提升零點幾的識別率,他們需要大量的數據進行訓練,這些數據收集來的少大多是買來的,特別貴。大量數據拿來後經過初步的過濾,技術人員通過演算法進行切分。你能想想幾T的全文字圖片數據切分成單個字元有多少么。然後需要數據部門大量人工對這些字元進行人工標註(標註每個字元圖片的識別結果),這個時間可能是通宵達旦的幾天,可能是幾個月。然後將分類好的字元拿給技術進行初步訓練,然後統計,優化演算法。好,再來一輪,訓練,優化演算法。一遍一遍,直到達到預期目標。這裡需要大量的人工參與,大量的資金,大量的時間為了提升一點點的識別率。這還不算核心技術人員腦洞大開的精力和時間,還有進行前期實驗的時間。我不止一次看到他們冥思苦想,通宵達旦,反覆實驗。說實話,我看著都枯燥,都累。但就是這些我們所說的碼農單身狗,讓人機智能交互技術一點一點在往前走,腳踏實地。往小了說這是他們的職責,往大了說他們就是在默默無聞的改變我們的生活!

為什麼我之前會給客戶肯定答案呢?因為我理想,想當然,對技術不了解,或者說根本不了解他們在做什麼!所以請不要像我以前一樣在不了解實際情況之前說:這是可以做的啊,看著挺簡單啊,為什麼沒人做啊?不去了解如何知道可以,如何知道簡單,如何知道這東西沒人在做?只是不了解不知道罷了,這是對默默無聞搞研究的技術人員的一種不尊重!

如果現在在遇到不敢肯定的技術問題,我會坦然的跟客戶說:不好意思,這塊我確實不是很清楚,我需要問下我們專業的技術人員。


目前 B站 的驗證碼相比大部分其他用戶較多的網站的驗證碼而言確實比較容易自動識別。
GCC15/bilibili-captcha · GitHub
這個B站驗證碼識別器是前段時間和 @d hadzc 和 @Crepuscule 一起實現的,使用 Python。
識別的大體方法是在灰度化和去噪之後先把圖像分割成 5 個部分,分別對應 5 個字元,之後用神經網路(多層感知器)識別每個字元。
分割方法比較 naive,成功率約 45%,還有很大改進空間;而 MLP 單個字元的識別成功率接近 100%。
由於能夠根據分割結果來判定分割是否成功,在實際用於登錄或者註冊的時候,可以在分割失敗的情況下丟棄識別結果並請求新的驗證碼,這樣可以使提交的識別結果的成功率達到 95% 以上。


是時候祭出這個故事了!轉載,侵刪


是的,就說說簡單的驗證碼。
簡單,就是看起來不費力。

輕鬆愜意,「696285」,簡單的不要不要的。
那諸如此類看起來容易的,有自動識別的嗎?
有的啊。
首先,把驗證碼變成灰度圖,是不是灰灰的?

接著去雜訊,設個閾值,二值化

然後使用pytesser庫的方法,並且考慮到諸如明明是「0」,識別出「O」,明明是「2」,識別出「z」,明明是「1」,識別出「I」,對,大些的I。。。進行相應的轉換。
最後直接就輸出了

這樣的數字,一般準確率是99.99%。。。。因為數字之間無粘連啊,也沒幹擾字元,你看起來簡單,那自然非人識別也簡單,對對對,一切是基於簡單基礎上的啊。。

=======&>&>&>&>&>696285。
很了不起,有毛用?世上無無用之物。
舉個栗子。
王二是個有心的商家,他在某平台賣點東西,也就要發快遞啥的。他想時時掌握每個訂單的信息,欲及時掌握貨物的物流軌跡,客戶收到與否。
他有很多訂單,就有很多快遞單號,也就是要查好多次。
可偏偏這個FLETCHER24網站,有煩人的驗證碼,王二不停地通過輸入驗證碼獲悉物流軌跡,會不會累趴?

細心的人可能一經發現,這個「953304」驗證碼好像似曾相識。的確,無可奈何花落去,似曾相識燕歸來。
我們把這個驗證碼圖下載下來,在用前文提到的方法解出來,再將單號信息以及驗證碼信息模擬post出去,

就能得到相應的物流軌跡了啊。

驗證碼就是要阻撓一小撥別有用心的人或非人。而我們並非別有用心,只是圖個方便快捷,畢竟時間不斷流淌。。。。。。。。
以上,是看上去簡單的驗證碼的自動識別的舉例說明。
那些個看上去沒那麼簡單的,準確率很難保證,還有滑動驗證碼,12306驗證碼啥的,就更不簡單了啊。。。。。
ref = [python, requests, pytesser]
一切的一切,不過是,野鴿子飛過天空。。。。。


我校的選課系統被我的搶課姬拖死了
苦逼的程序猿加了一個驗證碼
然而他們不知道我早就寫好了OCR
就是讓OCR的性能喪心病狂 - 喵星隕石坑 - 知乎專欄 和 試著做了一個對選課系統的OCR - 喵星隕石坑 - 知乎專欄
玩我……哼!
好吧這種情況下一般就會請喝茶寫檢討……你開藥丸


怎麼就沒幾個人在真正回答問題呢。

做難識別的驗證碼目的是什麼,是為了防止機刷廣告,黃牛黨等問題。越難的驗證碼,就越可能防止這種狀況(但是正常用戶也會難以辯識,所以這是一個需要權衡的過程)。

而為什麼有的網站驗證碼很簡單呢,因為他們不存在這樣的問題,比如B站是邀請註冊,你登陸驗證碼簡單不影響安全性。所以網站沒必要把驗證碼設計的很複雜。

而對於居心不良者,這樣的網站破解了驗證碼也沒大用途,自然也不會把重心放在這。


逆向工程哪有那麼容易,我前幾天寫爬蟲碰到我們學校的驗證碼。然後我了解到Python有一個圖像處理的庫,開源的,放在了google code上。專門就是把圖片中的文字識別出來。
然而事實是:那個庫只能識別簡單的,我們學校只是稍微做了一點複雜的處理就不行了。你別說12306這種了。
你加入傾斜,模糊,色彩這些演算法可能不難,不過你倒著玩。。。。。。。。


你以為殭屍粉註冊是人手動的.....?


https://github.com/bilibiliHack/bilibiliCaptcha


看來題主沒見過知乎手機網頁版的驗證碼,看似簡單,但是別說機器,就是真人也填不對,因為顯示的就是錯的……


以下全文摘自TomsInsight團隊的文章《創業視角:人工智慧或打碼軟體》,如果有侵犯他人利益,我會馬上刪除。

簡單來說就是,人多力量大。

驗證碼背後的故事

關於驗證碼,我們每個人應該都非常熟悉。幾乎所有網路應用的註冊、提交信息或者交互信息時都要求輸入指定圖片上的七歪八扭的文字,這是為了防止使用特定程序模擬用戶行為。例如:論壇灌水、批量註冊ID、各種刷票、等。我們每個人都有輸入驗證碼的經歷。

驗證碼,這個源自卡內基梅隆大學的發明英文名是CAPTCHA(下文統一稱之為CAPTCHA),是一個很高大上的名字的縮寫:Completely Automated Public Turing test to tell Computers and Humans Apart (全自動區分計算機和人類的圖靈測試)。區分計算機和人類的圖靈測試,那什麼是圖靈測試呢?

1950年10月,圖靈發表了一篇題為《機器能思考嗎?》的論文,成為劃時代之作。正是這篇文章,為圖靈贏得了桂冠——「人工智慧之父」。在這篇論文里,圖靈提出「機器思維」的概念,對智能問題從行為主義的角度給出了定義,由此提出假想:即一個人在不接觸對方的情況下,通過一種特殊的方式,和對方進行一系列的問答,如果在相當長時間內,他無法根據這些問題判斷對方是人還是計算機,那麼,就可以認為這個計算機具有同人相當的智力,即這台計算機是能思維的。這就是著名的「圖靈測試」(Turing Testing)。

而CAPTCHA,是最簡單、應用最廣的行之有效的、全自動化的圖靈測試。如果你是人類,就可以正確的輸入歪曲的字元,如果是計算機,就不能。

從2000年CAPTCHA出現開始,人工智慧領域就有無數科學家和黑客致力於破解它!為什麼有大量的人試圖破解呢?

大家想想:圖靈測試是「人工智慧之父」圖靈提出來的,而代表人工智慧學科最高水平的卡內基梅隆大學研究出來最通用的圖靈測試CHPTCHA,誰要是能通過技術手段來識別出來,誰就一個單挑了人工智慧領域的江湖泰斗「少林寺」!想想一個人單挑了「少林寺」是什麼感覺?!

卡內基梅隆大學計算機科學家,CAPTCHA聯合開發人Luis von Ahn說:「驗證碼在2000年左右出現,自2003年開始,每隔幾個月就有消息聲稱有軟體可以將其破解。即便是字母驗證碼被破解,但還有圖片驗證碼,圖片驗證碼變形的背景只有人類才能識別。」

十多年來,大量的團隊和公司都在這個上面不斷的嘗試,但是魔高一尺道高一丈,驗證碼也不斷升級,變得越來越複雜,複雜到有時候我們人類也需要幾次嘗試才能識別正確。研究人工智慧的科學家和黑客們在上面嘔心瀝血,也很難完成這樣「單挑少林寺」的超級壯舉。破解CAPTCHA 也就成為了一個神一樣存在的目標。

但是如果我告訴你,遠在中國的互聯網創新精英們早在2003年就已經徹底攻破了CAPTCHA,你信么?

打碼模式與打碼軟體

隨著CAPTCHA的使用越來越廣泛,破解CAPTCHA不僅僅一項「單挑少林寺」的壯舉,還有著大量的經濟利益。這個世界上永遠不缺為了金錢和榮譽而肝膽塗地的人,有些人「單挑少林寺」是為了江湖榮譽,而更多的人是為了存儲在少林寺裡面的大量財寶 -- 這些財寶都是附近的財主因為相信少林寺的絕對安全而存放在少林寺的。

從2003年開始,從來沒有人能「單挑少林寺」,但是少林寺的珠寶也從來沒有安全過。因為發源自中國,推廣到全世界有效的破解方法「打碼模式」出現了。

所謂的打碼模式,其實很簡單,就是用人工的方式去破解。破解組織製作了打碼軟體,當在網上需要輸入CAPTCHA時,打碼軟體自動的把歪曲的圖片信息送到打碼工人面前,一個熟練的打碼工人一分鐘可以輸入20個以上的CAPTCHA。這就是最早的打碼破解模式。

接下來起源於中國的這種人力破解的方式傳到了全球各地,各大第三世界國家很多人靠打碼為生(不完全統計有100萬以上的打碼工人存在),而這種工作也有了一個全球通用的名字:CAPTCHA Human Bypass。

有人會問了,少林寺的珠寶到底是什麼東西呢?為什麼大家都拚命要破解CAPTCHA呢,下面看TOMsInsight的數據組冒死從國內一著名打碼軟體組織獲取的數據:


從2006年開始,中國互聯網的遊戲和電商開始了高速發展,流量終於可以變現。郵件營銷,SEO,IM工具營銷等開始火熱,打碼模式到了新的發展高度,由於打碼軟體用戶的特殊性,也是為了隱藏自己,目前的打碼組織都是通過API(國內以易語言API為主,關於易語言這個國內互聯網地下世界最常用的語音,TOMsInsight正在調研分析會在稍後分享)來分發,而集成到專有專用的軟體中使用(一般使用打碼API的軟體都是定製開發),所以假設我如果定製一個郵件營銷的程序,如果需要識別驗證碼,我只需要在軟體中接入打碼組織的API,衝上錢,那麼CAPTCHA就再無法阻攔這個程序。

少林寺再也無法保護這些珠寶,而從此垃圾郵件、論壇營銷、QQ 的各種群發廣告、各種SEO手段,也屢禁不止。著名的圖靈測試CAPTCHA在理論上從沒有被攻破,但也從沒有安全過。

感謝TomsInsight團隊提供的優質內容,微信公眾號裡面推薦了各種乾貨,非常喜歡這個團隊的內容。


創建於 2015-10-25
著作權歸作者所有


怎麼就得出沒人做的結論呢?普通碼OCR軟體搞定,識別率只要有個8,9成就行,失敗了重新拉取接著來,刷個幾次總會遇到一張好識別的。那文藝碼和二B碼就沒轍了?畢竟圖森破,度娘「打碼」關鍵詞,你會發現一個新興互聯網產業(好吧其實一點都不新了),悠悠雲什麼的api都更新了無數版了,機器識別+人肉打碼+隨時更換代理ip分分鐘教各種馬做人。。。至於有人說然並卵的,會花心思繞過驗證碼的,說不好聽點非奸即盜,怎麼可能會沒有利益,垃圾郵件、水軍賬號、手機支付寶以及。。。好吧這事兒真不能說太細。



我上小學的時候就有自動填驗證碼這種東西了,另外我覺得12306的驗證很魔性!


人看起來也很不容易,想想,你活了10幾年終於勉強能認3000漢字……


其實是有組件的:
http://easyproject.cn/easyocr/zh-cn/index.jsp#api

驗證碼出現的目的就是反機器提交和防止識別,所以識別和反識別之間是一對矛與盾的關係,此強彼弱,你來我往。

驗證碼識別技術中,關鍵技術點其實並不在於OCR,而是在於圖片清理,能從洗圖片中提取到有用的圖片特徵,清洗掉雜質。而驗證碼本身為了防止OCR,對字形做了很多干擾,一個好的清理演算法能減少干擾,顯著提高識別率。

當然,由於驗證碼本身的特徵,沒有任何演算法是可以適應所有驗證碼類型的,做到100%準確無誤的識別率也是不太可能的,有些驗證碼人都很難區分,機器也不一定能做到。所以,很多時候,不同的驗證碼類型,不同的場景,需要作出不同的圖片清理。

雖然無法立即窮舉所有驗證碼場景和類型,但通過可擴展的插件支持,通過自行編寫圖片清理的處理代碼,或組合不同處理代碼,來滿足不同人的處理需求,解決不同場景問題。

最後,值得考慮的是,在OCR識別技術不斷提高,機器學習能力不斷進步,大數據分析越來越快的的時候,傳統以字元識別為主的驗證碼作用也在動搖,問題型驗證碼,圖像選擇型驗證碼等等都已經不再僅能通過OCR實現了。


最後附上我見過歷史反識別做複雜的圖像識別驗證碼:

http://gsxt.zjaic.gov.cn/zhejiang.jsp

如有興趣可以思考一下或挑戰。


計算機的本質是處理一維信息,二維世界的信息稍作變化,就足夠讓轉換出來的一維信息量大爆炸。大家都明白同底一次方和二次方的數量區別。

計算機的本質是執行而不是學習,首先要程序猿懂了,才能教會計算機,計算機的瓶頸是其對人的依賴。

程序猿能設計通過一維視角辯識二維物體的演算法嗎?只要夠複雜,是可以的。

沒事,到時候再上三維圖片,破譯過程是先把二維信息片段補全為三維全信息,再編譯成一維信息進行辯識。

對了,這個是沒考慮變形之後還要模糊辯識的情況。


推薦閱讀:

用 Linux 真的能學到很多平台無關的東西嗎?
國內人寫代碼的水平跟美國的差距在哪?
為什麼說讀代碼比寫代碼難?
是什麼阻礙了代碼的重用?問題是否應該只解決一次即可?
什麼時候應該使用宏定義?

TAG:編程 | 信息技術(IT) | 驗證碼 | 圖像識別 |