Распознавание капчи с сайта clickid.ru
Рассмотрим распознавание капчи с сайта clickid.ru. Смысл этой капчи в том, что там требуется указать с картинки количество черных квадратов.
Эту капчу можно отнести к простейшим, так фон всегда один и тот же и квардраты всегда одного цвета, меняется только их количество и положение.
Итак, приступим. Распонавание капчи включает в себя этапы предобработки изображения, разделения на объекты (как правило символы) и их классификация.
Предобработка:
Фон у данной капчи не монотонный, поэтому сразу точно сосчитать количество квадратов не получится, да и фон содержит в себе черные пиксели, поэтому, в начале избавляемся от фона.
Сделать это можно двумя простыми способами. Первый способ - на основе нескольких вариантов капчи получаем фоновую картинку без черных квадратов, затем попиксельно сверяем капчу с полученной фоновой картинкой, и в случае совпадения, ставил белый цвет, а при несовпадении черный.
Минус этого способа в том, что для программы распознавание придется эту фоновую картинку поддерживать в проекте, да и будет лишняя работа по получению этой фоновой картинки.
Поэтому, мы пойдем вторым путем. Заметим, что фон содержит только единичные черные пиксели, а значит, чтобы их убрать, достаточно применить к изображению высокочастотный фильтр, или попросу размытие.
Результат размытия на картинке справа. Видим, что после размытия фон стал более менее монотонный и если приметить фильтр порога, фон станет белым, а квардраты, вернее то, что от них осталось, черными, как на картинке слева.
После обоих способов удаления фона мы будем иметь похожий режультат - белый фон и черные связные области, где были квадраты. На этом предобработка закончена.
Разделение на объекты:
Первый способ: В данном случае можно заметить, что квардраты изначально все одного размера, а значит, если сосчитать количество черных пикселей на картинке после обработки и поделить на площадь квадрата, мы получим количество квадратов.
Минус в том, что с процессе предобработки квадраты стали уже не совсем квадратами, и данный метод будет давать результат, порядка 80% верных распознаваний. Плюс в том, что метод быстрый.
Способ второй дает 100% распознавание, но более ресурсоемкий. Идея в том, чтобы получить количество связных областей на картинке, тогда результат распознавания будет это количество минус 1, область фона.