No Image

Укажите символы с картинки

СОДЕРЖАНИЕ
0 просмотров
11 марта 2020

СРОЧНО: Невозможно ввести символы с картинки (Ка́пча)

Здравствуйте, уже очень давно страхую ОСАГО в «Ресо-Гарантия», фирма всем нравиться, но вот ваше последнее нововведение заставляет меня задуматься о смене страховщика.
Захожу в личный кабинет, нажимаю пролонгировать, ввожу данные, нажимаю сохранить. ввожу код из СМС а вот код с картинки ввести невозможно — так как размер картинки 5мм*20мм, в ней 8 символов разных цветов, но самое плохое что на фоне нарисованы кругляшки тех же самых цветов что и буквы с цифрами — что делает невозможным распознать и ввести защитный код. Пробовал раз 50 не меньше на протяжении трех дней.
Обратился в офис — они помочь не смогли, сказали что полис создан но программа нечего не дает сделать. Обратился в тех поддержку, на 8-800 сказали писать в тех поддержку на электронку(e-policy@reso.ru), что те ответят через 24 часа максимум — пошли шестые сутки — ответа нет.
Пытался с руководством связаться — не соединяют. Что делать — ума не приложу.
Данные:
Полис 2017 года: ЕЕЕ 0386100213
e-mail: rus5@ngs.ru

Вы вынуждаете меня сменить страховщика? Поэтому вы приказали своим программистам сделать такой не читаемый защитный код?

К сожалению, запрошенная вами страница отсутствует на нашем сайте!

Возможные причины:

  • Вы перешли на наш сайт по устаревшей ссылке
    Это значит, что такая страница когда-то была, но сейчас её больше нет.
  • Вы неправильно набрали адрес страницы в строке браузера
    Таким способом сейчас почти никто не пользуется, но всё же.
  • Такой страницы на нашем сайте никогда и не было
    Например, кто-то где-то разместил ссылку на одну из страниц нашего сайта, но ошибся в адресе.
  • Адрес страницы мог быть изменён нами
    Иногда такое случается, то хотя мы стараемся так не делать.
Читайте также:  2Ch слитые фото кристины финк

Если вы попали на эту страницу в результате перехода по ссылке, расположенной на нашем сайте, то пожалуйста сообщите нам об этом и мы всё исправим. Для отправки сообщения вы можете воспользоваться формой обратной связи, расположенной на странице контактов.

Приносим извинения за временные неудобства.

Tessnet2 и MODI

Естественно для начала я поискал готовые решения. Первое что выдал гугл — библиотека Tesseract, а точнее ее обертка под .NET – под названием Tessnet2. К сожалению при детальном изучении оказалось что она мне не подходит. Во второй версии Tesseract довольно много утечек памяти, что мне не подходило, так как после 10 минут работы программы с использованием Tessnet2 приложение вылетало с OutOfMemoryException. На странице Tesseract написано, что в третьей версии утечек не должно быть, но и рабочей обертки для Tesseract3 я не нашел.

Так же мне не подошло средство MODI (Microsoft Office Document Imaging) – так как распознает только файлы (нельзя передать ему экземпляр класса Bitmap для распознавания).

После непродолжительного поиска в гугле других бесплатных библиотек распознавания символов под .NET и проблем с ними связанных, я решил что проще будет сделать свою маленькую библиотеку как раз для таких случаев. Тем более задача довольно интересная.

Что мы имеем:

  • Символы никак не искажаются. То есть для распознавания капчи использовать не получится
  • Набор распознаваемых символов постоянный и для каждого символа мы имеем файл с его изображением
  • Небольшое количество символов для распознавания. Чем больше символов – тем дольше распознает

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

Читайте также:  Топовые наушники с алиэкспресс

var playerStacks = new OCRReader(OCRFont.Load("MyFont.pft")), Color.Black, useForeColor: false);
var stackString = playerStacks.Recognize(imageToRecognition);

Еще подумалось было бы неплохо иметь утилиты для создания таких файлов шрифтов и для проверки созданного шрифта на конкретном изображении. Утилиты исключительно для удобства. Все действия которые можно сделать с помощью утилит, можно сделать и в коде.

Реализация

Вся функциональность распределена между тремя классами OCRSymbol, OCRFont и OCRReader.

OCRSymbol – описывает символ: его название, ширину и высоту, сдвиг символа вниз относительно самого высокого символа из всего набора, списки точек характерных для символа и точек составляющих фон.

OCRFont – набор символов, сериализуется с помощью BinaryFormater.

OCRReader – координирует считывание символов один за другим. Так же задает стратегию считывания. Дело в том, что при создании экземпляра этого класса мы можем задать цвет. Этот цвет будет использован либо как цвет фона (все что не этот цвет, то символ), либо как цвет символа (все что не этот цвет – фон). Это надо для случаев когда в фоне используется больше одного цвета, либо когда символ нарисован более чем одним цветом.

Случай когда символ нарисован более чем одним цветом (черный фон, все остальное символ)

Случай, когда фон не одноцветный (фон – зеленый градиент, символы нарисованы белым цветом)

Алгоритм распознавания очень простой. Каждый символ описывается двумя универсальными списками List. Первый – точки, которые должны присутствовать в символе (Good), второй – которые не должны, то есть фон (Bad). При сравнении с очередным символом сначала проходится список точек фона, если при проверке очередной точки соответствующая точка в распознаваемом изображении оказывается не фоном (цвет фона задается при создании OCRReader), цикл заканчивается и переходим к сравнению со следующим символом. Если список точек фона успешно пройден, то аналогично прогоняем через список точек символа. Любое несовпадение – переходим к сравнению со следующем символом. Если все проверки прошли успешно, значит мы распознали наш символ и можем переходить к распознаванию следующего.

Читайте также:  Зарегистрировать адрес электронной почты бесплатно

Дополнительные утилиты

В ручную описывать списки точек для каждого символа не хотелось, поэтому я написал утилиту которая автоматически импортирует из заданной директории все файлы изображений и по названию файла и заданному цвету фона сама создает эти списки. Конечно в большинстве случаев будет желательна ручная корректировка. Так как все пиксели изображения раскидываются по спискам точек фона и точек символа. В большинстве случаев такой точности не надо. Достаточно указать по 10-20 точек из каждого списка для однозначного определения символа. Например для моего примера для символа ‘6’ хватило следующих списков пикселей (красный – фон, зеленый – символ, белый – не проверяется). Первый скриншот — символ описан утилитой, второй — после ручного редактирования. Распознаются они одинаково. Можно было сделать еще меньше характерных точек.

Так же была создана утилита для проверки работы созданного с помощью предыдущей утилиты файла шрифта.

Распознавание 5 символов с учетом кроппинга (обрезания изображения до границ символов) заняло 37 мсек. Для полного алфавита время распознавания будет само-собой больше.

Комментировать
0 просмотров
Комментариев нет, будьте первым кто его оставит

Это интересно
Adblock detector