Извънредни CAPTCHA - получените резултати и направените заключения, бележки програмист

Преди очите ти е последната статия от поредицата публикации за чупене CAPTCHAs. В предишния раздел, ние успешно са обучени многослойни невронни мрежи. писмо признаване на индивидуално показват в CAPTCHA. Днес най-накрая се съберат всички резултати заедно и да разберете колко добре работи всичко това.

Получената програмата е както следва:

внос на системата. околна среда
внос Captcha. Leprosorium. Recognizer

процес # 91; INFILE # 93; = направя
код <- recognizeLeprosoriumCaptcha infile
putStrLn $ "РЕЗУЛТАТ:" ++ код

процес _ = направи
проктор <- getProgName
putStrLn $ "Употреба:" ++ прог ++ "+ RTS -N -RTS captcha.png"

Основните = направя
аргументи <- getArgs
технологични аргументи

... където функция recognizeLeprosoriumCaptcha се определя, както следва:

модула Captcha. Leprosorium. Recognizer където

внос Captcha. Leprosorium. Recognizer. предварителна обработка
внос Captcha. Leprosorium. Recognizer. GeneticAlgorithm
внос Captcha. Leprosorium. Recognizer. компрес # 40; cropAndCompress # 41;
внос Captcha. Leprosorium. Recognizer. NeuralNetwork
внос Codec. снимка
внос Codec. Снимка. RGBA8

recognizeLeprosoriumCaptcha. FilePath -> IO String
recognizeLeprosoriumCaptcha INFILE = задачи
Право dynimg <- readImage infile
wbimg <- imageToWhiteAndBlack $ fromDynamicImage dynimg
IMG <- removeNoise wbimg
# 40; букви. _ # 41; <- splitImageOnLetters img
нека буквите "= картата cropAndCompress писма
върне $ карта recognizeLetter писма "

Забележете как нашата задача е естествено разделен на независими модули и функции.

Е, как действа тя? Пусни на CAPTCHA 3112 показа, че 106 от тях са напълно признати правилно, това е, около 3.4%. Или един CAPTCHA на 29.36, срещу 1 от 11 милиона, ако просто се познае. Много или малко? Оказва се, че в случай на CAPTCHA 3,4% - това е действително много. Може да се каже, че се познае броя седемцифрена е намалена до познае числата от 1 до 30. Не е зле, като се има предвид, че съм решила проблема, те казват: "на челото", и прекарва да намери решение само няколко вечери. На практика правилното признаване на CAPTCHA дори и в 0,1% от случаите, вече означава, че тестът за разграничаване счупен.

Да предположим, че е написал робот спамър форуми. Оставете го да работи в 100 теми, всяка от които побира един от постовете в секунда. С правилните CAPTCHAs признаване в 3% от случаите, роботът ще бъде поставен на 3-те съобщения всяка секунда. Що се отнася до останалите 97 неуспешни опита, роботът просто се връща в тези форуми по-късно.

Друг пример. Ние събрахме база от 10 милиона потребители на някои от най-голямата електронна поща и реших да опитам да отида при всеки един от тези хора използват някои общи парола, да кажем, «QWERTY». Ако не се лъжа, това се нарича обратна груба сила. Не всички услуги, предоставяни от адекватна защита срещу него. Така че, правилно познае CAPTCHA в 3% от случаите, ние успешно завършено 300 000 опити за влизане, които не са толкова малко. Освен това, ние не са ограничени в броя на повторните опити.

Е, и какво, ако малко перфекционист седи вътре в теб и мен и казва, че 3% - това е твърде малко? Това, което е точността на разпознаване може да се постигне дори и с помощта на невронни мрежи? Помислете за стандартен набор от данни на MNIST с изображения на ръкописни цифри. Невронни мрежи лесно разпознават комплект с точност от 95% или повече (не забравяйте, ние сме получили само 55%). A група на мрежата 25 с 784-800-10 нататъшна обработка на входните данни достига точността на 99,61%.

За да се постигне по-голяма точност, добра идея, най-вероятно, по-точно ще определи краищата при рязане на изображението на буквите. С помощта на центъра на масата и процентът или още по някакъв начин. Можете да се опитате да използвате намотка мрежа (Habr). Също Haykin описва няколко метода за подобряване на невронна мрежа - ансамбъл усредняване и повишена чрез филтриране. По-специално, рекурсивни прилагането на последната доза на мрежата ви позволява да направите работи малко по-добре, отколкото просто да си задавате въпроса, мрежа с произволно малък признаване на грешка. Възможно е също така да се експериментира с преподаване на отделни мрежи за всяка буква и / или изображение върху преградни 4-9 части и отделна мрежа за всяка инструкция на тази част с допълнителни мрежи, получени чрез комбиниране на резултатите от тях. По принцип е възможно да се признае CAPTCHA с много по-голяма точност от 3%. Всичко зависи от размера на времето, с което разполагате, и желанието да се докоснат опции.

Във всеки случай, ще отбележа, че аз не се обади за спам или нещо подобно. В действителност, има много по-лесно и по-ефективно да се използва за откриване на помощта на "китайски тълпата." Поради това всички там невронни мрежи и генетични алгоритми не са спамери и други лоши хора с малка стойност. Ако аз съм на нещо и повикване, така че това е, за да се гарантира, че се интересувате от изкуствен интелект алгоритми. Не е в името на крайния резултат: "Вижте, ние сме тук такава голяма Проказата счупи", но за по-голяма ekspirensa и levelapov. които ви очакват по пътя към получаването на този резултат.

Просто питам: "Аз се чудя как е възможно да се напише програма, която разпознава CAPTCHA" I:

Може и да греша, но изглежда, че имам прекара интересно и полезно време. Наистина, счупи CAPTCHA оказа забележителен код ката.

Подобно на този пост? Споделете с другите: