Распознавание капчи php
Здравствуйте, уважаемые читатели блога, в данном посте я хочу показать как может выглядеть скрипт 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% вероятностью распознает числа на картинках данной капчи:
|