Ruperea CAPTCHA - rezultatele obținute și concluziile trase, note de programator

Înainte de a-ți ochii este ultimul articol din seria de posturi despre captchas de rupere. În secțiunea precedentă, ne-am antrenat cu succes multi-strat de rețele neuronale. o scrisoare de recunoaștere de pe afișate în mod individual într-un CAPTCHA. Astăzi, vom aduna în cele din urmă toate rezultatele împreună și de a afla cât de bine funcționează toate aceste lucruri.

Programul rezultat este după cum urmează:

Sistemul de import. mediu
import Captcha. Leprosorium. Recognizer

proces # 91; INFILE # 93; = do
cod <- recognizeLeprosoriumCaptcha infile
putStrLn $ "REZULTATUL:" ++ cod

proces _ = face
prog <- getProgName
putStrLn $ "Utilizare:" ++ prog ++ "+ RTS-N -RTS captcha.png"

principale = do
args <- getArgs
args proces

... în cazul în care funcția recognizeLeprosoriumCaptcha este definită după cum urmează:

modulul Captcha. Leprosorium. Recognizer în cazul în care

import Captcha. Leprosorium. Recognizer. preprocesa
import Captcha. Leprosorium. Recognizer. GeneticAlgorithm
import Captcha. Leprosorium. Recognizer. comprima # 40; cropAndCompress # 41;
import Captcha. Leprosorium. Recognizer. NeuralNetwork
import Codec. imagine
import Codec. Imagine. RGBA8

recognizeLeprosoriumCaptcha. FILEPATH -> IO String
recognizeLeprosoriumCaptcha INFILE = do
dynimg dreapta <- readImage infile
wbimg <- imageToWhiteAndBlack $ fromDynamicImage dynimg
img <- removeNoise wbimg
# 40; scrisori. _ # 41; <- splitImageOnLetters img
lasa litere = harta litere cropAndCompress
reveni $ hartă litere recognizeLetter

Observați modul în care sarcina noastră este în mod natural împărțită în module și funcții independente.

Deci, cum funcționează? Rula pe codul de validare 3112 a arătat că 106 dintre ei pe deplin recunoscut în mod corect, adică, aproximativ 3,4%. Sau 1 CAPTCHA de 29.36, împotriva 1 din 11 milioane de euro, în cazul în care doar ghicitul. Un lot sau un pic? Se pare că, în cazul CAPTCHA 3,4% - aceasta este de fapt o afacere mare. Ai putea spune că ghicitul numărul de șapte cifre a fost redus la ghicitul numerele de la 1 la 30. Nu-i rău, având în vedere că am rezolvat problema, spun ei, „pe frunte“, și a petrecut pentru a găsi o soluție doar câteva seri. În practică, recunoașterea corectă a captcha chiar și în 0,1% din cazuri, deja înseamnă că CAPTCHA rupt.

Să presupunem că am scris un robot de forumuri spammer. Să-l operează în 100 de fire, fiecare dintre acestea conținând una din posturile în al doilea. Cu captchas adecvate de recunoaștere în 3% din cazuri, robotul va fi plasat pe 3 mesaje în fiecare secundă. În ceea ce privește încercările de restul de 97 nu a reușit, robotul pur și simplu se întoarce la aceste forumuri mai târziu.

Un alt exemplu. Ne-am pus împreună o bază de 10 milioane de utilizatori ai unora dintre cele mai mari serviciului de e-mail și a decis să încerce să meargă sub fiecare dintre aceste persoane sunt folosind unele parole comune, să zicem, «qwerty». Dacă nu mă înșel, aceasta se numește o forță brută inversă. Nu toate serviciile furnizate o protecție adecvată împotriva ei. Deci, ghicitul corect captcha în 3% din cazuri, am finalizat cu succes 300 000 de încercări de conectare, care nu sunt atât de puțin. În plus, noi nu sunt limitate în numărul de încercări.

Ei bine, și ce se întâmplă dacă un pic perfecționist stă în tine și de mine și spune că 3% - acest lucru este prea mic? Care este precizia de recunoaștere se poate realiza chiar și cu ajutorul rețelelor neuronale? Luați în considerare un set de date standard MNIST cu imagini de cifre scrise de mână. Rețelele neuronale recunosc cu ușurință acest set, cu o precizie de 95% sau mai mult (amintiți-vă, am primit doar 55%). O bandă a rețelei 25 cu 784-800-10 procesarea ulterioară a datelor de intrare atinge precizia 99,61%.

Pentru a obține o mai mare acuratețe, o idee bună, cel mai probabil, va defini mai precisă a marginilor la tăierea imaginii pe litere. Folosind centrul de masă și procentul sau încă într-un fel. Puteți încerca să folosească rețeaua de convoluție (Habr). De asemenea, Haykin descrie mai multe metode pentru îmbunătățirea rețelei neuronale - calculare a mediei ansamblu și a crescut prin filtrare. În special, aplicarea recursiv ultimei doze de rețea vă permite să lucreze un pic mai bine decât simpla ghicitul, o rețea cu o recunoaștere eroare în mod arbitrar mici. De asemenea, este posibil să se experimenteze cu predarea de rețele separate pentru fiecare literă și / sau imagine pe partiția 4-9 părți și o rețea separată pentru fiecare instrucțiune a acestei părți cu rețele suplimentare obținute prin combinarea rezultatelor. În general, este posibil să se recunoască cu mult mai mare captcha precizie de 3%. Totul depinde de cantitatea de timp aveți la dispoziție, precum și dorința de a atinge opțiuni.

În orice caz, am act de faptul că nu am sunat pentru spam sau ceva similar. În realitate, este mult mai ușor și mai eficient de a utiliza o detectare folosind „mulțimea chineză.“ Prin urmare, toate de rețea și algoritmi genetici acolo neuronale nu sunt spam și alți oameni răi de mică valoare. Dacă sunt pe ceva și apel, deci este să se asigure că sunteți interesat de algoritmi de inteligenta artificiala. Nu de dragul rezultatului final, „Uite, aici suntem o astfel de mare lepră rupt“, dar de dragul ekspirensa și levelapov. care sunt în așteptare pentru tine pe calea obținerii acestui rezultat.

Pur și simplu întreabă: „Mă întreb cum este posibil să se scrie un program care recunoaste captcha“ I:

Aș putea fi greșit, dar se pare că am timp interesant și util petrecut. Într-adevăr, de rupere CAPTCHA cod dovedit remarcabil kata.

Ca și postul? Împărtășește cu alții: