Ошибка запуска Tesseract

82

У меня проблема с запуском движка tesseract-ocr на Linux. Я скачал данные для русского языка и поместил их в каталог 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/' указывал свой каталог tessdata. Может стоит отредактировать какие-нибудь файлы конфигурации? 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папку. Предупреждение: некоторые дистрибутивы Linux (такие как openSUSE и Ubuntu) могут ожидать его /usr/share/tessdataвместо этого.

# 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/
AAAfarmclub
источник
2
поправьте меня, если я ошибаюсь .. но не был ли вопрос о включении нового языка (rus) и отсутствии того, на который указывает (ошибочное) сообщение об ошибке?
Арне
1
edit: по какой-то причине tesseract не будет работать, если не указан eng.traineddate - даже если он не нужен. Так что ответ AAAfarmclub в порядке.
Arne
3
Предупреждение: другие установки Linux (ubuntu vivid) работают в другом каталоге: / usr / share / tesseract-ocr / tessdata вместо этого
octohedron
@Gazta: Да, openSUSE требует вместо этого этот каталог
Авиндра Гулчаран
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 в первую очередь) - плохая идея
Ишай Пелед
2
Для пользователей Mac, использующих MacPort: sudo port install 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 внутри какой-то папки. Добавьте эту папку в переменные системного пути как TESSDATA_PREFIX .

Результатом будет System env var: TESSDATA_PREFIX = D: / Java / OCR И в папке OCR есть tessdata с файлами языков.

Это скриншот каталога:

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

Ян Хонски
источник
4
Да, все говорят о Linux. Ребята, не забывайте, что на рынке есть еще одна популярная ОС.
Хан
4

Ни одно предыдущее решение не помогло мне.

Я установил apt-getи загрузил tessdata вручную, переместил /usrи так далее, и никто не работал, даже если я экспортировал переменную тысячу раз.

Наконец, в последней попытке перед тем, как начать плакать, я попытался передать путь непосредственно экземпляру Tesseract ().

В Python: tr = Tesseract("/usr/local/share/tesseract-ocr/")и теперь это работает. Чтобы уточнить, я использую tesserwrapmodule.

m3nda
источник
1
Я чувствую тебя! Я прямо сейчас там. Разница в том, что, что еще хуже, я пытаюсь заставить его работать из командной строки.
explorer
4
tesseract  --tessdata-dir <tessdata-folder> <image-path> stdout --oem 2 -l <lng>

В моем случае ошибки, которые я сделал, или попытки, которые не увенчались успехом.

  • Я клонировал репозиторий github и скопировал файлы оттуда в
    • / USR / местные / доля / tessdata /
    • / USR / доля / tesseract-ocr / tessdata /
    • / usr / share / tessdata /
  • Используется TESSDATA_PREFIXс указанными выше путями
  • sudo apt-get install tesseract-ocr-eng

Первые 2 попытки не сработали, потому что файлы из git cloneне работали по неизвестным мне причинам. Я не уверен, почему попытка №3 сработала для меня.

В заключение,

  1. Я скачал файл eng.traindata, используя wget
  2. Скопировал его в какой-то каталог
  3. Используется --tessdata-dirс именем каталога

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

исследователь
источник
2

Вы можете вызвать функцию API tesseract из кода 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, да, это код C ++, протестированный в Debian GNU / Linux. Как видите, у Рассела Кроу проблема с функцией TessAPI :: Init (NULL, «rus»). Имеет смысл изучить исходный код Tesseract (метод класса TessAPI).
Александр
1

Я использую Visual Studio 2017 Community Edition.
Я решил эту проблему, создав каталог под названием tessdata в каталоге Debug моего проекта. Затем я помещаю файл 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

и скопируйте его в следующий каталог в моем проекте консольного приложения:

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

Я вручную создал папку tessdata выше.

yangli.liy
источник
0

Для пользователей Windows:

В Переменные среды добавьте новую переменную в системную переменную с именем «TESSDATA_PREFIX» и значением «C: \ Program Files (x86) \ Tesseract-OCR \ tessdata».

рафкод
источник
Согласитесь, и для бесперебойной работы требуется дополнительная установка, machineintelligent.blogspot.com/2019/03/…
Amit Vashistha
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