Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%
Распознавание капчи php
Здравствуйте, уважаемые читатели блога LifeExample, в данном посте я хочу показать как может выглядеть скрипт Pраспознавание капчи php.
Все мы привыкли ежедневно видеть, на самых разнообразных ресурсах интернета, картинки, надписи на которых нас просят вписать в специальное поле формы, перед каким либо действием, к примеру, перед скачиванием файлов или отправкой сообщений. Такие картинки называются капчами, подробнее о происхождении этого термина можно прочесть в моей статье "Капча на PHP".
И ведь действительно без капчи теперь не обходится ни один из более-менее полезных сайтов. Связано это с тем, что с ростом технологического процесса и развитием ресурсов, становится все больше роботов гуляющих по интернету и вредящих безбрежному благополучию ресурсов, не имеющих защиты от ботов.
Капча как раз таки является одним из средств защиты от роботов, а как следствие и от спама. Все дело в том, что для человека распознать капчу является не трудоемким процессом, а для спам бота оно может стать невыполнимым.
Но нет таких способов защиты, на которые нельзя найти способы взлома, вопрос лишь во времени и средствах. Другими словами, выяснить, что же написано на картинке — можно программно, и я хочу показать, как может происходить распознавание капчи php скриптом.
Как действовать при распознавании капчи
На сегодняшний день существует множество сложных способов распознавания капчи на php и на любых других языках, но чтобы их понять стоит начать с малого, а именно с написания скрипта распознающего примитивную капчу.
Под примитивной капчей понимается картинка с монотонным фоном, на которой изображено трехзначное число. Число всегда выводится в одном шрифте и не имеет коэффициента искажения.
Пример примитивной капчи:
Перед тем как приступить к обдумыванию алгоритмов, и начинать изучать природу нейронных сетей, проанализируем имеющуюся примитивную капчу.
Как видите можно выделить ряд условий формирования этой картинки:
- Шрифт всегда одинаковый.
- Высота цифр одинаковая.
- Между цифрами существует пустота минимум в 2 px.
Алгоритм распознавания такой капчи не требует знаний о нейронных сетях и может выглядеть так:
- Разбить все цифры меду собой.
- Составить ассоциативный массив с количеством пикселей для каждой цифры.
- Посчитать для каждой цифры из капчи, из какого количества пикселей она состоит а именно сколько содержит пикселей отличных от цвета фона.
- Получить цифру из массива соответствий.
Распознавание цифр с картинки по шагам.
Переводим картинку в бинарную матрицу (1 шаг)
Вычисляем интервалы содержащие цифры (2 шаг )
Складываем построчно все столбцы, получаем строку:
По полученной строке можно вычислить интервалы, задающие положение цифр.
Теперь мы знаем, что столбцы матрицы с индексами в интервалах [1,15], [18,32], [35,49] содержат цифры.
Вычисляем количество пикселей для каждой цифры (шаг 3)
Складываем все единицы в найденных интервалах, получаем:
- [1,15] = 215 единиц;
- [18,32] = 213 единиц;
- [35,49] = 184 единиц.
Подсчет количества пикселей для всех возможных цифр (шаг 4)
Скачиваем несколько вариаций капчи, которые содержат все цифры от 0 до 9.
Затем необходимо вычислить количество пикселей для каждой из цифр [1234567890].
Например, подсчитав пиксели в цифре восемь — получим 215 шт.
Вычислив вручную или же с помощью скрипта пиксели, для каждой из цифр получим такую таблицу:
Теперь зная сколько пикселей содержится в каждой из цифр, мы можем распознать капчу, и то что написано на картинке.
В результате у меня получился скрипт который с 100% вероятностью распознает числа на картинках данной капчи:
Набор картинок и сам код скрипта для распознавания капчи php лежит в архиве который можно скачать по следующей ссылке.
Читайте также похожие статьи:
Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.
Комментарии
Спасибо!
спасибо за скрипт , он умеет рсзпознавать буквы или нет ? , вот
мой скайп aleksandr01078
Нет, скрипт только цифры распознает, но по аналогии можно сделать и с буквами.
Mark — нужна помощь ваша, у меня есть ява скрипт что распознаёт в одной игре буквы , счас туда ввели цифры нужно немного подправить его , скрипт и капчи скинуть могу , если сможете помочь напишите мне в скайп желательно tanchik2616 могу заплатить но немного .
К сожалению нет времени.
А как перевести картинку в бинарную матрицу?
В коде есть функция для этого.
Ты гений! Дружище! Если у меня когда-нибудь появится возможность выпить с тобой пива, я тебя обязательно угощу, большое спасибо! То что мне надо!
К сожалению алгоритм слишком прост, хотя для размышления годится. Уязвимость алгоритма в том, что не всегда символы на капче будут иметь различное число пикселей, совпадений может быть много, особенно если картинку капчи делать маленькую и на стороне браузера ее растягивать.
у меня только разгадывает ваши картинки но не показывает бинарную матрицу
В скрипте есть метод для вывода матрицы.
как вывести матрицу приведите пример
Извините за глупый вопрос, но как запустить этот скрипт на сайте?
а как сделать, чтобы он распознавал любую капчу из данных?
чтобы каждый раз не переписывать скрипт
Огроменнейшее спасибо! Вы грамотно придумали идею и грамотно все объяснили и ваш код отличная основа для дальнейшего развития парсера изображений.
Умеет ли скрипт определять координаты цифр на картинке?
Например 126px по горизонтали 56px по вертикали от левого верхнего угла.
Нужно расставить дивки над картинками, а именно над числами. В каждой картинке от 1 до 30 чисел.
Цифра 6 и цифра 9 имеют одинаковую бинарную матрицу, что с этим можно придумать?
А как сделать перевод картинки в бинарную матрицу на javascripte
. В php я не очень шарю. Возможно есть модули на node js или легковесные програмки?
Вопрос к комментаторам: ребята, Вы мне скажите, зачем задавать такие глупые вопросы? Вы думаете на них кто то будет отвечать?
«Извините за глупый вопрос, но как запустить этот скрипт на сайте?»
Этот вопрос равносилен вопросу: «где найти кнопку бабло?»
Прежде чем что то писать — подумайте и не позорьтесь