Привет. Как наверное все заметили уже, на сосаче сменилась капча. И вот меня сугубо с исследовательской точки зрения интересует, как её можно автоматически распознавать? То есть в целом концептуально я примерно представляю как это работает для обычного текста с разными шрифтами и прочим. Но конкретно в данном случае не совсем понимаю, как это должно реализовываться на практике.
Наверное, для всех подобных вещей должна происходить одна и та же процедура: отделяем возможные символы, учим OCR распознавать каждый из них. Далее уже на конкретных картинках как-то всевозможными способами стараемся сделать так, чтобы остался только пустой фон и сами буквы. И уже эту упрощённую картинку распознаём посимвольно.
Скорее всего я очень упрощаю, так как сам только только знакомлюсь с этой всей темой. И вот хотел бы услышать мнения анонов, как в частности этот процесс должен происходить для текущей капчи сосача? Потому что для неискушённого взгляда даже выделять отдельные буквы на этой капче кажется довольно нетривиальной задачей.
В общем, интересно как с этим всем в действительности обстоит дело.
Перввый этап для данной капчи распознавание по цветовому диапозону 1. Распознаем все используемые цвета в капче 2. Разрезаем картинку на множество разных картинок содержащие один и тот же цвет 3. На этом этапе у нас уже появятся буквы и шум, шум фильтруем по размеру оставляя только буквы - картинки по размеру похожие на прямоугольники/квадратики
Тут кстати ошибка в составлении капчи, тонкие линии должны быть на переднем фоне, а они на заднем. 4. Теперь у нас осталоись буквы капчи и псевдобуквы. Псевдобуквы - всегда бледного цвета, ненасыщенные, как это правильно сказать, ну вы поняли - их можно отфильтровать по этому признаку. 5. Усе, теперь у нас есть буквы капчи. Они не повернуты под углом и не искажены вроде - что очень хорошо. Только разного размера - масштабируем их до чего то среднего. Таким образом получаем весь алфавит.
6. Проверяем нет ли отличий в них, тут вроде один и тотже шрифт, так что тренируем нейросеть какунить на этих буквах. Ну либо обесцвечиваем и получаем Perceptual Hash каждой буквы.
Новые капчи нарезаем на буквы сделанным ранее инструментом и сверяем их c базой. Ну и далее поиск слова по словарю вместо символа ?. Как то так.
>>200301 > 2. Разрезаем картинку на множество разных картинок содержащие один и тот же цвет А в теории не может возникнуть такой ситуации, что шум и какая-то буква будут иметь одинаковый цвет? Тогда ведь разделить их таким образом вряд ли выйдет? Или у них априори цвет всегда хоть чуть чуть, но отличен?
>>200302 Шум - прямые линии, могут быть вроде одного цвета с буквами. Но это алгоритмически решается, буквы всегда занимает 5-15% ширины и 15-90% длинны, линии могут нарезаться на отрезки, но в таком случае они будут иметь малое кол-во пикселей - что опять же их отсеит.
Но ты прав, допустим ена код иногда нарезает лишнюю букву, это решается на этапе составления алфавита. Ты отвсеиваешь вручную все что нарезалось неправильно, ты отсеял и всеравно получил алфавит. Натернировал его - ок.
И если в будущем (уже когда для каждой буквы будет хэш) снова нарежется лишняя буква, она просто не распознается твоей базой и ее можно проигнорировать.
>>200304 Как думаешь, хорошей идеей будет для каждого цвета подсчитывать компоненты связности? Для отсева вот этих полосок, например. И в целом если у нас больше двух-трёх компонент, то в таком случае это точно не буква и можно отсеивать. Только я почему то не уверен, что такой подход будет работать для всех полосок, хотя интуитивно кажется так.
>>200305 В общем отсеял полоски эти таким вот образом, вышло что-то такое. Компоненты считал BFS-ом, и вроде как для некоторых капч работает хорошо. В общем случае не знаю, выйдет ли.
>>200306 Ну ты молодец, красиво выглядит. Ты случайно всерьез не собираешься эту капчу решать? Смысла же нет, как только там поймут что она решается автоматически они заменят шрифт, добавят шума или буквы чуть изказят динамический.
>>200307 > Ну ты молодец, красиво выглядит Спасибо тебе, особенно за наводки.
> Ты случайно всерьез не собираешься эту капчу решать? Смысла же нет, как только там поймут что она решается автоматически они заменят шрифт, добавят шума или буквы чуть изказят динамический. Да, я понимаю, мне просто сам процесс скажем так интересен и что в итоге получится из этого. Ну и опыт некоторый получить. Думаю вот как-то погружаться в именно компьютерное зрение.
А вот ещё интересно, можно ли сделать такой распознаватель, чтобы несмотря на небольшие подобные изменения капчи, он всё же продолжал давать валидный результат? Или слишком большое число параметров должно быть учтено в таком случае? Просто по тем статьям, что я читал (не только по распознаванию текста, но и комп. зрению в целом) кажется, что это в общем случае не реализуется, ведь можно специально подобрать такие данные, чтобы на них распознавалка давала невалидный ответ. Но в частности для относительно (конечно растяжимое понятие) похожих друг на друга капч, наверное, можно что-то такое сделать?