LINUX.ORG.RU
ФорумTalks

[спв][ocr][cuneiform] Распознавание текста на изображениях с низким разрешением

 ,


0

1

С год назад или около того я попячился в своей жаже на тему «распознавателя скриншотов» от аввыы, где концептуально наметил решение проблемы в пингвиноугодном плане с помощью спичек и желудей. А нынче решил взять и сделать полноценный скрипт - ну там воображение уже нарисовало содом на bash-е, опциональные настройки через gtk-dialog и всё в таком же духе. Ибо я подумал, что распознать текст со скриншота и засунуть его в буфер обмена может быть полезным при работе с сервисами а-ля JSTOR (если без подписки, когда кусок можно картинкой посмотреть только) или Гуглокниги.
Но оказалось, что по части обработки именно этих типов изображений налицо тотальный дестрой. Если взять скриншот, скажем, консоли или браузера - всё нормально. Открыть книгу в DjVu (сканировал в 300 dpi в бинарном ч/б варианте, но смотрю, конечно, умещая по ширине - могу предъявить вещдоки) - тоже хорошо распознается. А вот картинки с джейсторов и Ко, при таком же приблизительно размере букв, не распознаются практически никак, легче вручную перепечатать, чем исправлять эту кашу.
Попробовал управлять масштабированием картинки, установкой порога отделения черного от белого, резкостью - не преуспел. Как ни крути, получается то, что ничего не получается. Распознается от силы половина.
Есть ли какие-то проверенные подходы к решению этой проблемы? Или это не лечится?

★★★★★

Последнее исправление: Smacker (всего исправлений: 1)

>с низким разрешением

В аналогичных задачах распознавания номеров автомобилей и вагонов используют многоуровневую пошаговую детализацию изображений. А методы распознавания - стандартные.

quickquest ★★★★★
()

Я, в своё время, для решения этой проблемы написал свой простенький корреляционный OCR движок. Когда точно известен шрифт, которым напечатан текст, распознаётся всё практически без ошибок.

В принципе, если не важна производительность, то можно просто перед распознаванием увеличивать разрешение скриншотов без интерполяции. Тогда смогут работать алгоритмы выделения признаков (это моё предположение, на самом деле, как точно работает тот-же cuneiform, я не знаю). Точность распознавания после такой процедуры должна подрасти.

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

angrycore
()
Ответ на: комментарий от angrycore

> Когда точно известен шрифт, которым напечатан текст, распознаётся всё практически без ошибок.

Ни разу не известен. Что гугл-книги, что джейстор - показывают сканы текста, а не преобразуют текст в картинку. А уж исходные печатные материалы могут быть набраны чем угодно и как угодно.

можно просто перед распознаванием увеличивать разрешение скриншотов без интерполяции


Делал (собственно, это и есть «метод из спичек и желудей»). 200÷300% увеличения, с или без преобразования в ч/б (двоичный). И на указанных объектах - толку мало.

Smacker ★★★★★
() автор топика
Ответ на: комментарий от quickquest

ОК, переформулирю вопрос: как надо (стандартными методами imagemagick-а, например) преобразовать изображение вроде этого http://www.jstor.org/pss/193530?searchUrl=%2Faction%2FdoBasicSearch%3FQuery%3... - чтобы распознавание проходило успешно. Писать что-то своё мне не улыбается, само собой.

Smacker ★★★★★
() автор топика
Ответ на: комментарий от Smacker

>изображение вроде этого

(ИМХО) Перед распознаванием такого изображения полезно выполнить:
1. медианную (или лучше ранговую) фильтрацию - уменьшает шум, не размазывая края символов.
2. топологическую скелетизацию (она же «эрозия», она же «растяжение-сжатие») - создаёт связный скелет символа (толщиной в 1 пиксел), удобный для структурного распознавания.

Далее пробовать разные доступные OCR...

quickquest ★★★★★
()
Ответ на: комментарий от quickquest

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

Думаю, что самое осмысленное, что можно сделать:
mogrify -resize 1000% -filter Point image.png

Насколько увеличивать — стоит поэкспериментировать, возможно 1000% — это перебор.

Ну а если текст совсем сильно искажён, и лень заниматься программированием — советую посмотреть в сторону scantailor.

angrycore
()

http://www.linux.org.ru/gallery/screenshots/4481886

Скрипт этот подложил:

#!/bin/bash
cuneiform -l rus -f smarttext -o --dotmatrix --fax -o '/home/amorpher/Рабочий стол/Скан' /tmp/xsane-conversion-avision*

После того, как посоветовали параметры в xsane нормальные выставить — сканил вообще чисто, без ошибок (хотя в книге там дерьмовая бумага и шрифты соответственнные были).

amorpher ★★★★★
()

А именно:

petrosyan 26.01.2010 12:40:30
300 dpi line art для распознавания - самый идеальный вариант, да и скорость приемлемая.

amorpher ★★★★★
()
Ответ на: комментарий от amorpher

И щито ты мне предлагаешь сканировать?

Smacker ★★★★★
() автор топика
Ответ на: комментарий от angrycore

Поэкспериментировал. Нет, 1000% как раз в самый раз. При конвертировании скрина с гугл-книг с -resize 1000% -filter Point -median 3x3 -threshold 85% в pbm получается вполне приемлемый вариант:

(Dunleavy and Margetts l999). In 2002. Centrelink was put forward as a 'working model for the 'whole. of-government approach' b

y the consulting llrm primavera, as one of those government agencies 'leading the pack' In terms of dellverlng on the whole of government promhe of better

Пробовал увеличивать и уменьшать окресность в медианном фильтре - только хуже становится. Меньший порог преобразования в ч/б - тоже ухудшает картину (а без него - распознать вообще нельзя).

Но ресурсов такое преобразование ест что-то больно много, на роль регулярного метода не годится.

Smacker ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.