Распознавание с помощью tesseract-ocr

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by cardons, 4 Nov 2012.

  1. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Распознавание с помощью tesseract-ocr [Delphi]

    Добрый вечер.
    Хочу использовать эту библиотеку для распознавания текста. Нашел компонент под Delphi Winsoft OCR. К сожалению он платный. Выяснил что он использует tesseract-ocr.
    Подскажите как его приспособить под Delphi, для дальнейшего использования? Так понимаю необходимо подключить dll и в него передавать параметры и получать назад. Кто подскажет?

    Вот страница проекта http://code.google.com/p/tesseract-ocr/
     
    #1 cardons, 4 Nov 2012
    Last edited: 4 Nov 2012
  2. ChymeNik

    ChymeNik Member

    Joined:
    31 Aug 2010
    Messages:
    29
    Likes Received:
    7
    Reputations:
    9
    Подключи библеотку и объяви функции:
    PHP:
    BOOL APIENTRY  DllMain (HANDLE hModuleDWORD ul_reason_for_callLPVOID lpReserved
    TESSDLL_API void __cdecl  TessDllRelease () 
    TESSDLL_API void *__cdecl  TessDllInit (const char *lang
    TESSDLL_API int __cdecl  TessDllBeginPageBPP (uinT32 xsizeuinT32 ysizeunsigned char *bufuinT8 bpp
    TESSDLL_API int __cdecl  TessDllBeginPageLangBPP (uinT32 xsizeuinT32 ysizeunsigned char *buf, const char *languinT8 bpp
    TESSDLL_API int __cdecl  TessDllBeginPageUprightBPP (uinT32 xsizeuinT32 ysizeunsigned char *buf, const char *languinT8 bpp
    TESSDLL_API int __cdecl  TessDllBeginPage (uinT32 xsizeuinT32 ysizeunsigned char *buf
    TESSDLL_API int __cdecl  TessDllBeginPageLang (uinT32 xsizeuinT32 ysizeunsigned char *buf, const char *lang
    TESSDLL_API int __cdecl  TessDllBeginPageUpright (uinT32 xsizeuinT32 ysizeunsigned char *buf, const char *lang
    TESSDLL_API void __cdecl  TessDllEndPage (void
    TESSDLL_API ETEXT_DESC *__cdecl  TessDllRecognize_a_Block (uinT32 leftuinT32 rightuinT32 topuinT32 bottom
    TESSDLL_API ETEXT_DESC *__cdecl  TessDllRecognize_all_Words (void
    TESSDLL_API void __cdecl  ReleaseRecognize () 
    TESSDLL_API void *__cdecl  InitRecognize () 
    TESSDLL_API int __cdecl  CreateRecognize (uinT32 xsizeuinT32 ysizeunsigned char *buf
    TESSDLL_API ETEXT_DESC *__cdecl  reconize_a_word (uinT32 leftuinT32 rightuinT32 topuinT32 bottom
    Далее используй, как описано в оф. мануале:

    http://code.google.com/p/tesseract-ocr/w/list
    http://code.google.com/p/tesseract-ocr/wiki/FAQ
     
    #2 ChymeNik, 4 Nov 2012
    Last edited: 4 Nov 2012
    2 people like this.
  3. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Спасибо. Попробую ) Правда первый раз сталкиваюсь с подключением библиотек. Буду разбираться. Если у кого есть время подсказать подробнее буду оч благодарен.
     
  4. cardons

    cardons Elder - Старейшина

    Joined:
    19 Jul 2005
    Messages:
    778
    Likes Received:
    324
    Reputations:
    83
    Спасибо ) Почти все получилось. Вот только иногда путает 3 и 8, 7 и 1, 6 и 5 потому что цифры под разным углом и немного разным размером. Кто знает как выяснить угол поворота цифры и вернуть ее в правильное положение?
     
  5. foxmulder2006

    foxmulder2006 New Member

    Joined:
    19 Aug 2017
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    а можно более подробно об этом? я ни разу не подключал библиотеки. и если можно документацию на русском языке о tesseract-ocr (команды, операторы и так далее) перерыл кучу сайтов, но ничего не нашел
     
    #5 foxmulder2006, 19 Aug 2017
    Last edited: 19 Aug 2017
  6. Barmaley2017

    Barmaley2017 New Member

    Joined:
    19 Sep 2017
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Добрый день.
    Нужно распознать текст с качественно сканированной книги (Каталога латинских названий), без искажений, RGB, преимущественно черно белый. Все знаки - латиница, но часто попадаются из немецкого, французского и испанского. Несколько шрифтов. Часто попадаются слова наклонным шрифтом, знаки в числах всегда на разной высоте, т.е. 069 - хвостики будут выше и ниже строки, такой стиль. Орфография преимущественно латынь, но почти все слова могут, по определению, не иметь никакого смысла, т.е. могут быть произвольным набором букв только подчиняющихся(и то не обязательно) правилам латинского языка. Т.е. заранее построить словарь всего массива текста нельзя. Целью распознавания является построение этого словаря. Объем большой, порядка 10000 страниц. Tesseract ошибается в первом же слове. Качество распознавания очень плохое. Очевидно, что он распознает не буква в букву, а ищет слова по словарю по максимальной вероятности. Вместо правильного маловероятного "Aaages" пишет более благозвучное и более вероятное "Anages", хотя символы видны достаточно четко. Хотя национальные символы он распознает правильно. Предполагаю, что если частично отключить ему "мозги", то он бы правильнее распознавал.

    1. Посоветуйте, как заставить его распознавать текст буквально, а не гадать по вероятностям? Как повысить качество распознавания? Загрузить пример затрудняюсь. Для сравнения, online FineReader распознает почти всё правильно, но дорого для меня.

    2. Не получается сделать вывод в PDF-текст, получается PDF-исходное-изображение
     
    #6 Barmaley2017, 19 Sep 2017
    Last edited: 19 Sep 2017
  7. Djoser

    Djoser Member

    Joined:
    9 Nov 2015
    Messages:
    52
    Likes Received:
    11
    Reputations:
    0
    для этого нужно сеть обучать, но если всеже хочется выровнять символ то поворачиваешь его на от -(максимальный угол поворота) в градусах до +(максимальный угол поворота) ровным будет то изображение где будет наибольшая высота и наименьшая ширина, но это очень ресурсоемко.
     
  8. Djoser

    Djoser Member

    Joined:
    9 Nov 2015
    Messages:
    52
    Likes Received:
    11
    Reputations:
    0
    FineReader можно и крякнутый скачать, не надо платить, тессеракт надо обучать, но это долго, лучше всего скачать крякнутый абби, а потом в ms word - нажать исправить все, он пройдется по словам и исправит, но не факт что всегда правильно
     
  9. Barmaley2017

    Barmaley2017 New Member

    Joined:
    19 Sep 2017
    Messages:
    2
    Likes Received:
    0
    Reputations:
    0
    Мне нужна потоковая автоматизированная обработка, поэтому выбрал tesseract. Проблему частично решил, установив best версию tessdata_best. Сейчас предобработкой пытаюсь улучшить результат. Обсуждение вот здесь: https://www.linux.org.ru/forum/development/13692149?lastmod=1505905279127#comment-13695368