[OCR] Как очистить картинку от шумов для Tesseract?

nikola1956

Добрый день!
У меня неожиданно возникла задача, связанная с OCR (Optical Character Recognition). Поискав в интренете, решил использовать для этих целей Tesseract. Довольно просто я подключил его к своему проекту и протестировал на разных изображениях. Выяснилось, что этот Тессеракт хочет чистых бинарных изображений и всякий шум в области распознавания существенно влияет на результаты его работы.
Но вот как очистить изображения от кусочков рамок по краям и как убрать мелкие штришки, я не знаю. Может быть кто-нибудь из форумчан знает готовые бесплатные библиотеки или ссылки на известные методы, которые сделают эту работу?
Да, Тессеракт хорош тем, что распознает "разорванные", несвязные образы, но вот делает он это хорошо только на чистых картинках без шумов. Поэтому остро встает вопрос: как удалить шумы с изображения?

margadon

первое что в голову приходит - блюр, потом пороговый фильтр для конвертации в чб
и(ли) может шумодав найти
остальное, вроде рамку вырезать - руками

nikola1956

блюр, потом пороговый фильтр для конвертации в чб
Да, я так уже сделал (сглаживание + пороговая обработка с otsu-порогом).
остальное, вроде рамку вырезать - руками
Да, попробую. Правда опасаюсь потерь в производительности приложения.

Dasar

Да, попробую. Правда опасаюсь потерь в производительности приложения.
у тебя достаточно простые преобразования изображения (блюр, вырезание рамки и т.д.) делаются значительно дольше, чем трудоемкая операция (распознать текст) над тем же изображением?

nikola1956

вырезание рамки
Сглаживание и пороговая обработка происходят быстро в сравнении со временем распознавания.
Но, что касается вырезания рамки, то у меня есть опасения. Дело в том, что мне на одном изображении нужно выделить несколько областей распознавания (около ста), каждая в своей рамке, причем рамка — это граница слегка наклоненного прямоугольника. Поэтому, чтобы вырезать образ, нужно будет сначала повернуть рамку (трудоемкая операция), а потом вырезать образ. Можно было бы сразу вырезать образ (т.к. Тессеракт устойчив к небольшим наклонам текста), но кусок рамки (т.к. она наклонена) вроде бы все равно остается.

Dasar

можно же сразу вырезать наклоненный прямоугольник

nikola1956

можно же сразу вырезать наклоненный прямоугольник
Да, да, остается только это. Пока других идей нет.

margadon

заранее наклон рамки не определён? то есть у тебя задача найти на картинке блоки текста, вырезать и распознать?

nikola1956

заранее наклон рамки не определён?
Да, не определен.
то есть у тебя задача найти на картинке блоки текста, вырезать и распознать?

Да, да, блоки текста (примерно одно слово) в прямоугольных рамках, возможно слегка наклоненных. Причем этих блоков (ячеек) много, около ста.

margadon

прям полновесный OCR делаешь вроде файнридера - тот вроде как примерно подобное умеет делать
то есть тут надо найти все прямые, потом прямоугольники на картинке, определить наличие в них текста... жуть, тут ты быстро воткнёшься в серьёзный такой машин лёрнинг
а зачем такая задача?

nikola1956

то есть тут надо найти все прямые, прямоугольники на картинке, определить наличие в них текста... жуть
Алгоритм для нахождение прямоугольников с текстом я уже написал. Кстати, несложный.
а зачем такая задача?

Если привинтить уже готовый UI, будет полезная для определенной группы пользователей штука. Пока больше сказать не могу. :)

nikola1956

можно же сразу вырезать наклоненный прямоугольник
Оказывается можно сделать все проще, используя следующую особенность Тессеракта: он легко игнорирует связную(!) целиковую границу прямоугольника, внутри которого расположен текст! Поэтому достаточно отступить вовне на несколько пикселей, чтобы вся граница прямоугольника целиком оказалась в области распознавания. Тогда всё ок!
Оставить комментарий
Имя или ник:
Комментарий: