Разгадываем капчу через эталоны

Уже пару месяцев прошло после того как я внедрил в miniPoster функционал для разгадывания капчи через эталоны, эксперимент оказался удачным, поэтому пришла пора написать о нем тут)

Что такое эталон? — это копия символа на изображении, она хранится в базе, после разделения капчи на символы, они сверяются по этой базе эталонов и где больше совпало, тот и результат.

Эталоны я храню в строке в виде 0 и 1, 0 — белый пиксель, 1 — черный. также для ускоренного поиска по базе я прикрутил метод дырки и метод начала и конца, по которым я определяю наличии дырок(+их количество) а тек же начало и конец символа, тоесть получилась следующая структура

QString img;
QChar result;
int CountHole;
int Start;
int End;

Благодаря CountHole,Start,End я могу при поиске сразу  отсеивать картинки да бы не тратить лишний раз время на сравнения строк QString img, таким образом время на поиск даже в огромной базе в 1000 эталонов занимает доли секунды.

Сбор эталонов.

Первой проблемой стал вопрос, а сколько их собирать? Решение было следующие, капча перебирается в цикле  и заносится в базу, но если такая капча там уже есть или есть похожая хотя бы на 90%(параметр можно выбирать самому) то естественно такое изображение добавлено не будет, в коде есть счетчик, если 30 итераций цикла подряд не было занесено в базу изображение, значит добавлять уже хватит.

Нус.. перейдем от теории к практике.

Берем подобную капчу

12__462

Очищаем от мусора на фоне, делим на символы

 

[LOAD_CAPTCHA][http://rewbux.com/captcha2.php]
[COLOR_TRESHOLD][128]
[SPLIT_CIRCUIT]

6

Дальше создаем эталоны

[START_MAKE_MODEL]
 [LOAD_CAPTCHA][http://rewbux.com/captcha2.php]
 [COLOR_TRESHOLD][128]
 [SPLIT_CIRCUIT]
 [END_MAKE_MODEL]

6-1
вышло у нас аж 168 штук, далее немного рутиной работы, нужно переименовать изображения и вместо символа n поставить значение на картинке,
6-2
Вызываем функцию[COMPLETE_MAKE_MODEL] и получаем 1 маленький файлик со всеми нашими эталонами.
Все, давайте проверим результат,

[BREAK_POINT][dd]
[LOAD_CAPTCHA][http://rewbux.com/captcha2.php]
 [COLOR_TRESHOLD][128]
 [SPLIT_CIRCUIT]
 [FIND_ARRAY_IMG_IN_MODEL_LIST][result.model]
 [COPY_FILE][captcha/$MODEL_NAME_captcha.png][captcha/testModel/$IT_$captcha.png]
 [GO_TO_BREAK_POINT][dd][50]
6-3
Результат 100%)

 

Проголосовать за статью

3 thoughts on “Разгадываем капчу через эталоны

  1. точно уже не помню побеждал ли я эту капчу, скрипт просто подсчитывал площадь символа, для 6 и 9, и еще при совпадениях площадей, делались небольшие доп. проверки.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *