LINUX.ORG.RU

Google дарит всем Open Source OCR


0

0

Компания Google открыла исходники системы по распознаванию текста Tesseract, которая разрабатывалась в лабораториях Hewlett-Packard с 1985 по 1995 годы. По словам Google, Tesseract, на данный момент, - лучшая Open Source система распознавания, которая, однако, поддерживает только английский язык.

>>> Подробности

★★★★★

Проверено: JB ()

Ответ на: комментарий от Sun-ch

> И что же? За все это время ни одного коммерческого продукта так и не было создано? Может они цены сильно задрали, или качество движка не очень высокое?

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

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

> Кто-то заставил tesseract работать?

1. В slackware собрался без модификации исходников.

2. Да, бинарник из ccmain нужно обязательно перенести в папку выше.

3. Работает уже 9 минут на AMD-850@977/256Mb. Никаких результатов: пустые файлики. Запускал, как и вы, только их собственный тестовый phototest.tif ему подсунул.

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

На 15 минуте я остановил эти мучения и удалил все что было связано с этим чудным "in 1995 was in top 3 OCR".

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

>Не вроде, а не такая же. Ффпоеск :)

Значит с чем-то ещё спутал. Извиняюсь.

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

> А можно пример странички?

Не вопрос. http://www.buniyad.newmail.ru/IMG_2489.JPG

Только вот... Как бы тактичнее выразиться... это весьма скверная страничка. Постинг - не претензия к разработчикам, а крик исстрадавшейся души %-)

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

>Не вопрос. http://www.buniyad.newmail.ru/IMG_2489.JPG >Только вот... Как бы тактичнее выразиться... это весьма скверная страничка. Постинг - не претензия к разработчикам, а крик исстрадавшейся души %-)

А нельзя ли повторить и выложить хотя бы кусочек TIF-а, который вы подсовываете OCR-ам для распознания, а также указать свой e-mail (если только он не buniyad AT newmail DOT ru). А я попробую подсказать, как сделать так, чтобы OCR его проглотил быстро ;-)

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

>Пример - gocr (со слов разработчиков).

Там по очереди в порядке частоты встречаемости сравнивается текущая буква со всеми английскими, пока не совпадет. Сделать такое для двуязычного текста не получится.

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

> Там по очереди в порядке частоты встречаемости сравнивается текущая буква со всеми английскими, пока не совпадет. Сделать такое для двуязычного текста не получится.

Получится, только возможно увеличение времени обработки в ~2 раза.

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

получится, есть символ "А", а кирилица это или латиница следует из контекста а не из написания.

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

глупости, зачем повторять "О" нашу, латинскую, итальянскую etc.? большая часть алфавита европейских стран одинакова. вот с ивритом и другими, конечно, начнуться проблемы

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

>Хде исходный код Вашей OCR, кстати? :)
> AP **** (*) (01.09.2006 20:30:42)

У меня на компьютере живет :). Не выкладываю по-причине того, что он вряд ли будет кому-то интересен на данном этапе работы, хотя согласие научного руководителя на LGPL-изацию давно получено.
Сейчас работаю над новым алгоритмом выделения изображений символов. Увы, работа идет ни шатко ни валко.

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

> глупости, зачем повторять "О" нашу, латинскую, итальянскую etc.? большая часть алфавита европейских стран одинакова. вот с ивритом и другими, конечно, начнуться проблемы

Затем, что в финском O может быть с двумя точками, во французском E может быть с тегю, серконфлексом и.т.д. Поэтому сначала будет стоять задача угадать язык, а потом уже ЗАНОВО (или почти заново, зависит от разрешенного набора языков для текста) распознать буквы.

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

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

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

> а почему не взять из gocr? там и построчная заливка и лабиринтный. разве этого не достаточно?

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

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

> А нельзя ли повторить и выложить хотя бы кусочек TIF-а, который вы подсовываете OCR-ам для распознания, а также указать свой e-mail (если только он не buniyad AT newmail DOT ru). А я попробую подсказать, как сделать так, чтобы OCR его проглотил быстро ;-)

Можно даже целый, он мало весит... http://www.buniyad.newmail.ru/IMG_2489.tiff

Правда, ocrad вот просит в формате pgm (не знаю что за такой, но gimp соглашается в нем сохранять). Ну а так - вот это.

Е-мэйл действительно такой. Буду благодарен за совет :)

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

а вы пробовали? gocr простой как топор. и конкретно выделение объектов на изображении достаточно просто оттуда вырезается

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

Скажу честно, такой вариант практически не рассматривался по ряду причин:
1. Изначально была идея попробовать profile-based алгоритм сегментации и казалось, что он будет работать достаточно хорошо. По факту оказалось, что он работает хорошо только в ряде случаев, однако даже с таким алгоритмом удалось провести первые испытания.
2. Потроха gocr слишком не похожи на потроха моей ocr'ки. Т.е. можно посмотреть, как поступил автор gocr'а, но напрямую использовать его код не удобно.

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

Понятно. Ну, держите общественность в курсе изменений :)

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

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

Нет, выкладывать я пока не планирую из-за того, что слишком ранняя шумиха может повредить проекту. С другой стороны, если вам интересно, то я могу предоствить исходный код в частном порядке, при условии, что вы его не будете выкладывать в общий доступ. Если вас устраивает - давайте e-mail.

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

шумиха? о чем вы? на sf.net, berlios.de десяток ocr проектов. да тот же гуглевский tesseract.
я же так понимаю никакого ноухау у вас нет, а тогда до качества fr вам в одиночку не дойти.

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

Ну зачем делать еще один "мертвый проект"? :)

Что касается FR, то на мой взгляд, разработать продукт такого уровня можно только на коммерческой основе.

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

Конечно.

Язык: C
Библиотеки: GLib-2.10.x, libtiff
Алгоритмы:
* определение угла наклона текстовых строк на основе анализа профиля проекции документа;
* выделение символов путем обхода связанных областей переднеплановых пикселей (на этапе реализации);
* распознавание с помощью персептрона с двумя активными слоями нейронов.

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

Как-таковых тестов не проводилось. На вскидку - достоверность распознавания около 90 % при условии обучения на том же шрифте.

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

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

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

Ну как вам сказать...

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

Другое дело, что подготовка качественной выборки для обучения - задача достаточно трудоемкая. Тот результат, что я привел, был получен при обучении на выборке в 10024 картинки, с распределением, близким к распределению в нормальном тексте. 10% выборки не участвовали в обучении, а использовались на вычисления ошибки обощения. Процесс обучения производился до какого-то минимального значения ошибки обобщения.

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

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

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

Еще раз повторю, что как-таковых тестов не производилось - я специально дал вам ссылку с примером работы OCR чтобы вы могли сами оценить качество работы.

Честно говоря, ваше высказывание меня немного задело, поэтому я решил посчитать достоверность распознавания. Т.к. все сделать "по-честному" сейчас нет возможности, я поступил следующим образом:

Взял скриншот, на который я раньше давал ссылку, и выбрал маленький кусочек - первые 10 строк. OCR обучалась только на прописных буквах русского алфавита, поэтому я откинул все заглавные буквы, цифры и знаки препенания. После этого я построчно посчитал общее кол-во символов и количество ошибок:

1: 37 / 0
2: 38 / 1
3: 32 / 0
4: 44 / 0
5: 26 / 0
6: 36 / 0
7: 36 / 0
8: 39 / 1
9: 34 / 0
10: 37 / 1
Итог: 359 / 3

Вероятность ошибки: ~1 %.

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

Владимир, а мы, оказывается, с вами еще в январе общались. Правда, у вас ник другой был - mccarka. Думаю, вы помните :) У вас, я так понимаю, есть свой вариант реализации OCR - с тем же персептроном для распознавания и входной частью от gocr'а. По крайней мере вы так писали... Каких результатов вам удалось добиться?

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

> Я уж не говорю о пользовательском интерфейсе - я фактически разрабатываю библиотеку в надежде на то, что кто-то потом интегрирует в свое приложение.

sK1(.sf.net) как раз подыскивают подходящий движок OCR для себя

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

> Нейросетка имеет способность к обобщению, что позволяет надеяться на то, что обучив, к примеру, её на нескольких разных шрифтах (моноширинных, с засечками и без и т.д.) можно добиться того, что она будет достаточно хорошо распознавать любой шрифт, т.е. OCR будет шрифтонезависимой.

Вот что кажется заманчивым - наверное с нейронной сетью будет не сложно сделать обучение в процессе работы, как в некоторых системах распознавания речи типа dragon dictate или в системах машинного перевода? Кажется, этого для OCR еще не делали (хотя что мы, избалованные ломанным файнридером, видели в жизни?). Типа как в файнридере два окна, текстовое и графическое. В графическом показывается кусок картинки с подсвеченным изображением буквы, рядом в текстовом окне посдвечен символ, как он распознался. Ну и когда правишь в текстовом окне символ - обратное распространение ошибки, то-се, сеть переобучается чуть-чуть... и следующий раз когда прогонят распознавание, есть шанс что документ будет выглядеть заметно лучше :)

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

> С тем примером, что вы привели - вряд ли вообще что-то получится.

Вот-вот... (грустно вздыхая) :)

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

Обучение по мере распознавания достаточно давно было сделано конкурентами ABBYY - компанией Cognitive Technologies. Я лично не работал с их продуктом - ничего сказать не могу, но преподносилось это как одно из главных конкурентных преимуществ.

Что касается вашей идеи об использовании процедуры обратного распространения ошибки для дообучения нейросети, на мой взгляд, результат будет обратным - после нескольких попыток дообучения достоверность распознавания начнет падать. Это связано с тем, что по мере "запоминания" новых символов, нейросеть начинает "забывать" старые. Поэтому в процедуре дообучения помимо неизвестного изображения символа должны нужно предъявлять нейросети все ранее использованные изображения симоволов. К сожалению, я не могу точно сказать, какой должен быть объем обучающей выборки, но я использовал около 10000 картинок и этого мало.

Все сказанное выше - мое собственное мнение, основанное на небольшом опыте общения с нейросетями. Возможно, все совсем не так.

P.S. Если не трудно, поделитесь с общественностью результатами распознавания предложенных вами сканов с помощью FR.

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

> Что касается вашей идеи об использовании процедуры обратного распространения ошибки для дообучения нейросети [...]

Ну, поскольку вы занимаетесь нейронными сетями, то знаете поведение персептрона лучше чем я, конечно :) Но наверное вопрос с забыванием можно как-то решить. Может использовать для обучения на ошибках дополнительную сеть с консультативным правом голоса, не знаю :) Просто заманчиво использовать, раз уж проект на нейронных сетях, возможность дообучения в процессе работы. Как-никак одно из достоинств технологии...

> P.S. Если не трудно, поделитесь с общественностью результатами распознавания предложенных вами сканов с помощью FR.

А плоды файнридеровского труда - вот они (специально перегрузился туда, где файнридеры работают): http://www.buniyad.newmail.ru/1.txt

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

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

Про автоматизацию конечно с такими данными можно забыть :) Но, увы, если дать человеку камеру с приличным разрешением и снова отправить все это снимать - едва ли качество возрастет до уверенного, щоб можно было пораспознавать все без человека, в пакетном режиме...

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

У вас слишком старый FR для таких экспериментов, одна из главных "фишек" восьмого FR - распознавание цифровых изображений документов. Подробнее об этом можно прочитать тут:
http://www.abbyy.ru/finereader8/?param=45008#f2

syomin
()

На тебе Боже, что нам не гоже !

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

> У вас слишком старый FR для таких экспериментов, одна из главных "фишек" восьмого FR - распознавание цифровых изображений

Спасибо, попробую.

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

Я чего хотел подсказать :-) У нас как то в 2000 году возникла такая же проблема с распознанием кучи архивных документов. Использовали тоже FR, но серверный вариант, с укладкой всего в специальную БД с нечетким поиском. Для улучшения распознования мы обрабатывали изображения. Алгоритм прост: отсканируйте на хорошем разрешении со всеми цветами, а потом поиграйтесь с картинкой в GIMP (мы тогда использовали photoshop). Попробуйте в GIMP уменьшить толщину цифр и сгладить их границы (чтобы зазубрин таких сильных не было). Если вам удастся найти последовательность действий, которая в вашем случае поможет лучше распознавать FR, то script-fu ваш лучший друг (тогда использовали PS, а потом написали свою программку на C++ Builder :-).

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

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

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

отцы!

Понятно, что вопрос из офтопика, но может кто сможет ответить:

ccutil\host.h(154): error: invalid redeclaration of type name "INT8" (declared at line 30 of "C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7/PlatformSDK\include/basetsd.h") typedef SIGNED char INT8;

и так более 300 раз на разные файлы. Build log was saved at "file://c:\Documents and Settings\user.NSK_DOMAIN\Рабочий стол\tesseract-1.01\Debug\BuildLog.htm" tesseract - 394 error(s), 29 warning(s)

(слава богу теперь mfcpch.cpp есть)

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

спасибо за советы. где берут серверный вариант файн-ридера не знаю пока-что :) посему придется пользоваться обычным :)

поиграться с цветом я вроде немного попробовал, вернее с параметрами при переводе в black&wihte. Немного помогло... Вот. Подписи не удастся видимо удалить, ибо сфотографировано все в grayscale. А жаль :) Мысль манипулирования цветами для удаления пометок дельная.

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

>> У вас слишком старый FR для таких экспериментов, одна из главных "фишек" восьмого FR - распознавание цифровых изображений

>Спасибо, попробую.

Попробовал. Заметно лучше получается, действительно. Пожалуй, так уже можно жить :)

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