Помилка запуску Tesseract


82

У мене проблема з запуском движка tesseract-ocr на Linux. Я завантажив дані мови RUS і помістив їх у каталог tessdata (/ usr / local / share / tessdata). Коли я намагаюся запустити tesseract за допомогою команди tesseract blob.jpg out -l rus, він відображає помилку:

Error opening data file /usr/local/share/tessdata/eng.traineddata

Please make sure the TESSDATA_PREFIX environment variable is set to the parent directory of your "tessdata" directory.

Failed loading language eng
Tesseract couldn't load any languages!

Could not initialize tesseract.

Згідно з керівництвом зі складання , я звик export TESSDATA_PREFIX='/usr/local/share/' вказувати свій каталог тесданих. Може, мені слід редагувати будь-які конфігураційні файли? Tesseract намагається завантажити файли даних "eng" замість "rus".

Знімок екрана: http://i.stack.imgur.com/I0Guc.png

Відповіді:


87

Ви можете захопити eng.traineddataGithub:

wget https://github.com/tesseract-ocr/tessdata/raw/master/eng.traineddata

Перевірте https://github.com/tesseract-ocr/tessdata, щоб отримати повний перелік навчених мовних даних.

Захопивши файли, перемістіть їх до /usr/local/share/tessdataпапки. Попередження: /usr/share/tessdataнатомість деякі дистрибутиви Linux (наприклад, openSUSE та Ubuntu) можуть очікувати цього.

# If you got the data from Google, unzip it first!
gunzip eng.traineddata.gz 
# Move the data
sudo mv -v eng.traineddata /usr/local/share/tessdata/

2
виправте мене, якщо я помиляюся .. але чи не виникало питання про включення нової мови (rus) та не надання тієї, на яку вказує повідомлення про помилку (з помилкою)?
Арне

1
редагувати: з якихось причин tesseract не працюватиме, якщо не буде присутній eng.traineddate - навіть якщо він не потрібен. Тож відповідь AAAfarmclub чудова.
Арне

3
Попередження: інші установки Linux (Ubuntu) яскраві роботи в іншому каталозі: / USR / частки / тессеракт-OCR / tessdata замість
octohedron

@Gazta: Так, openSUSE вимагає замість цього каталогу
Avindra Goolcharan

3
В Ubuntu-Gnome 16.04: це/usr/share/tesseract-ocr/tessdata/
kmario23,

55

Найпростіший спосіб - це встановити необхідний пакет:

sudo apt-get install tesseract-ocr-eng  #for english
sudo apt-get install tesseract-ocr-tam  #for tamil
sudo apt-get install tesseract-ocr-deu  #for deutsch (German)

Як ви можете помітити, це відкриває шлях до інших мов (тобто tesseract-ocr-fra).


3
Це має бути прийнятою відповіддю. Ручна робота з файлами позаду менеджерів пакетів назад (припускаючи, що ви використовували один для встановлення tesseract) - погана ідея
Ishay Peled

2
Для користувачів Mac, які використовують MacPort: встановити порт sudo tesseract-eng
p-mercier

4
Ви можете використовувати, tesseract --list-langsщоб переглянути всі доступні мови. Ви також можете використовувати їх sudo apt-get install tesseract-ocr-*для встановлення
Родріго Лагуна

для арки викликаються пакети tesseract-data-engтощо
loki

на жаль, ця відповідь не працює в контейнері Docker, хоча вона працює поза ним.
Ælex

28

У мене також була ця помилка на машині Windows.

Моє рішення.

1) Завантажте свої мовні файли з https://github.com/tesseract-ocr/tessdata/tree/3.04.00

Наприклад, для eng я завантажив усі файли з префіксом eng.

2) Помістіть їх у каталог tessdata всередині якоїсь папки. Додайте цю папку до змінних System Path як TESSDATA_PREFIX .

Результатом буде System env var: TESSDATA_PREFIX = D: / Java / OCR І папка OCR має тесдані з мовними файлами.

Це скріншот каталогу:

введіть тут опис зображення


4
Так, усі говорять про Linux. Будь ласка, хлопці, не забувайте ще одну популярну ОС на ринку.
Хан

4

Жодне попереднє рішення для мене не спрацювало.

Я встановив як apt-getзавантаження тес-даних, так і вручну, переміщення /usrі так далі, і ніхто не працював, навіть якщо я експортував змінну тисячу разів.

Нарешті, з останньої спроби перед початком крику я намагався передати шлях безпосередньо екземпляру Tesseract ().

У Python: tr = Tesseract("/usr/local/share/tesseract-ocr/")і зараз це працює. Для уточнення використовую tesserwrapмодуль.


1
Я вас відчуваю! Я зараз точно там. Різниця полягає в тому, що, щоб погіршити ситуацію, я намагаюся змусити це працювати з командного рядка.
дослідник

4
tesseract  --tessdata-dir <tessdata-folder> <image-path> stdout --oem 2 -l <lng>

У моєму випадку помилки, які я зробив, або спроби, які не мали успіху.

  • Я клонував репозиторій github і скопіював звідти файли в
    • / usr / local / share / tessdata /
    • / usr / share / tesseract-ocr / tessdata /
    • / usr / share / tessdata /
  • Використовується TESSDATA_PREFIXіз зазначеними вище шляхами
  • sudo apt-get встановити tesseract-ocr-eng

Перші 2 спроби не спрацювали, оскільки файли з git cloneне працювали з причин, які я не знаю. Я не впевнений, чому спроба №3 у мене спрацювала.

Нарешті,

  1. Я завантажив файл eng.traindata за допомогою wget
  2. Скопійовано в якийсь каталог
  3. Використовується --tessdata-dirз назвою каталогу

Відняти для мене - це добре вивчити інструмент і використовувати його , а не покладатися на встановлення та каталоги менеджера пакунків


2

Ви можете викликати функцію tesseract API із коду C:

#include <tesseract/baseapi.h>
#include <tesseract/ocrclass.h>; // ETEXT_DESC

using namespace tesseract;

class TessAPI : public TessBaseAPI {
    public:
    void PrintRects(int len);
};

...
TessAPI *api = new TessAPI();
int res = api->Init(NULL, "rus");
api->SetAccuracyVSpeed(AVS_MOST_ACCURATE);
api->SetImage(data, w0, h0, bpp, stride);
api->SetRectangle(x0,y0,w0,h0);

char *text;
ETEXT_DESC monitor;
api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
printf("m.count: %s\n", monitor.count);
printf("m.progress: %s\n", monitor.progress);

api->RecognizeForChopTest(&monitor);
text = api->GetUTF8Text();
printf("text: %s\n", text);
...
api->End();

І побудуйте цей код:

g++ -g -I. -I/usr/local/include -o _test test.cpp -ltesseract_api -lfreeimageplus

(мені потрібен FreeImage для завантаження зображення)


@DarkSkull, так, це код С ++, протестований у Debian GNU / Linux. Як бачите, у Рассела Кроу проблема з функцією TessAPI :: Init (NULL, "rus"). Значущим є перевірка вихідного коду Tesseract (метод класу TessAPI).
Олександр Лубягін

1

Я використовую Visual Studio 2017 Community Edition.
Я вирішив цю проблему, створивши каталог з назвою tessdata в каталозі налагодження мого проекту. Потім я помістив файл eng.traineddata у вказаний каталог.


1

Я використовую ОС Windows, я спробував усі рішення вище, і жодне з них не працює.

Нарешті, я встановлюю Tesseract-OCR на диск D (де я запускаю свій сценарій python) замість диска C. Це працює.

Отже, якщо ви використовуєте Windows, запустіть свій скрипт python на тому самому диску, що і ваш Tesseract-OCR.


1

Тут працює розробник C #, який працює на Windows. Для мене працює просто завантаження файлу eng.traineddata із такої URL-адреси:

https://github.com/tesseract-ocr/tessdata/blob/master/eng.traineddata

і скопіюйте його в наступний каталог у моєму проекті Console Application:

[Каталог проектів] \ bin \ Debug \ tessdata

Я вручну створив папку tessdata вище.


0

Для користувачів Windows:

У Змінні середовища додайте нову змінну в системну змінну з назвою "TESSDATA_PREFIX" та значенням "C: \ Program Files (x86) \ Tesseract-OCR \ tessdata"


Погодьтеся, і працювати плавно, більш деякі установки потрібні, machineintelligent.blogspot.com/2019/03 / ...
Amit Васиштха

0
tessdata_dir_config = r'--tessdata-dir "/usr/local/Cellar/tesseract/4.1.1/share/tessdata"'
pytesseract.image_to_string(imgCrop,lang='eng',config=tessdata_dir_config)

4
Це не відповідь. Поясніть, будь ласка, що тут відбувається, щоб інші могли отримати корисну інформацію, читаючи вашу відповідь.
AlexH
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.