Błąd działania Tesseract


82

Mam problem z uruchomieniem silnika tesseract-ocr na Linuksie. Pobrałem dane języka RUS i umieściłem je w katalogu tessdata (/ usr / local / share / tessdata). Kiedy próbuję uruchomić tesseract za pomocą polecenia tesseract blob.jpg out -l rus, wyświetla błąd:

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.

Według opracowującym przewodnika użyłem export TESSDATA_PREFIX='/usr/local/share/' wskazać mój katalog tessdata. Może powinienem edytować jakieś pliki konfiguracyjne? Tesseract próbuje załadować pliki danych „eng” zamiast „rus”.

Zrzut ekranu: http://i.stack.imgur.com/I0Guc.png

Odpowiedzi:


87

Możesz pobrać eng.traineddataGithub:

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

Sprawdź https://github.com/tesseract-ocr/tessdata, aby uzyskać pełną listę wytrenowanych danych językowych.

Gdy pobierzesz plik (i), przenieś je do /usr/local/share/tessdatafolderu. Ostrzeżenie: niektóre dystrybucje Linuksa (takie jak openSUSE i Ubuntu) mogą się tego spodziewać /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/

2
popraw mnie, jeśli się mylę… ale czy nie chodziło o włączenie nowego języka (rus) i nie podanie tego, na który wskazuje (błędny) komunikat o błędzie?
Arne

1
edycja: Z jakiegoś powodu tesseract nie będzie działać, jeśli nie ma eng.traineddate - nawet jeśli nie jest potrzebny. Więc odpowiedź AAAfarmclub jest w porządku.
Arne

3
Ostrzeżenie: inne instalacje Linuksa (ubuntu vivid) działają w innym katalogu: / usr / share / tesseract-ocr / tessdata
octohedron

@Gazta: Tak, openSUSE wymaga tego katalogu
Avindra Goolcharan

3
W Ubuntu-Gnome 16.04: to/usr/share/tesseract-ocr/tessdata/
kmario23

55

Najprostszym sposobem jest zainstalowanie potrzebnego pakietu:

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)

Jak widać, otwiera drogę do innych języków (np. Tesseract-ocr-fra).


3
To powinna być akceptowana odpowiedź. Ręczne majstrowanie przy plikach za plecami menedżerów pakietów (zakładając, że użyłeś jednego do zainstalowania tesseraktu) to zły pomysł
Ishay Peled

2
Dla użytkowników Maca korzystających z MacPort: sudo port install tesseract-eng
p-mercier

4
Możesz użyć, tesseract --list-langsaby zobaczyć wszystkie dostępne języki. Możesz również użyć sudo apt-get install tesseract-ocr-*do zainstalowania ich wszystkich
Rodrigo Laguna

dla łuku paczki są nazywane tesseract-data-engitp.
loki

niestety ta odpowiedź nie działa w kontenerze Dockera, chociaż działa poza nim.
Ælex

28

Miałem również ten błąd na komputerze z systemem Windows.

Moje rozwiązanie.

1) Pobierz pliki językowe ze strony https://github.com/tesseract-ocr/tessdata/tree/3.04.00

Na przykład dla eng pobrałem wszystkie pliki z przedrostkiem eng.

2) Umieść je w katalogu tessdata w jakimś folderze. Dodaj ten folder do zmiennych ścieżki systemowej jako TESSDATA_PREFIX .

Rezultatem będzie System env var: TESSDATA_PREFIX = D: / Java / OCR A folder OCR zawiera tessdata z plikami językowymi.

To jest zrzut ekranu katalogu:

wprowadź opis obrazu tutaj


4
Tak, wszyscy mówią o Linuksie. Proszę, nie zapominajcie, że na rynku jest jeszcze jeden popularny system operacyjny.
Khan

4

Żadne poprzednie rozwiązanie nie działało dla mnie.

Zainstalowałem zarówno przez, jak apt-geti ręcznie pobierając tessdata, przenosząc się /usri tak dalej, i nikt nie działał, nawet jeśli wyeksportowałem zmienną tysiące razy.

Wreszcie, przy ostatniej próbie przed rozpoczęciem płaczu, próbowałem przekazać ścieżkę bezpośrednio do instancji Tesseract ().

W Pythonie: tr = Tesseract("/usr/local/share/tesseract-ocr/")i teraz działa. Aby wyjaśnić, używam tesserwrapmodułu.


1
Czuję Cię! Jestem dokładnie tam teraz. Różnica polega na tym, że co gorsza, próbuję uruchomić go z wiersza poleceń.
odkrywca

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

W moim przypadku błędy, które popełniłem lub próby, które nie zakończyły się sukcesem.

  • Sklonowałem repozytorium github i skopiowałem stamtąd pliki do
    • / usr / local / share / tessdata /
    • / usr / share / tesseract-ocr / tessdata /
    • / usr / share / tessdata /
  • Używany TESSDATA_PREFIXz powyższymi ścieżkami
  • sudo apt-get install tesseract-ocr-eng

Pierwsze 2 próby nie zadziałały, ponieważ pliki z git clonenie działały z powodów, których nie znam. Nie jestem pewien, dlaczego próba nr 3 zadziałała dla mnie.

Wreszcie,

  1. Pobrałem plik eng.traindata za pomocą wget
  2. Skopiowałem go do jakiegoś katalogu
  3. Używany --tessdata-dirz nazwą katalogu

Dla mnie na wynos jest dobra nauka narzędzia i korzystanie z niego , zamiast polegania na instalacji i katalogach menedżera pakietów


2

Możesz wywołać funkcję API tesseract z kodu 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();

I zbuduj ten kod:

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

(potrzebuję FreeImage do ładowania zdjęć)


@DarkSkull, tak, to jest kod C ++ przetestowany w systemie Debian GNU / Linux. Jak widać, Russel Crowe ma problem z funkcją TessAPI :: Init (NULL, "rus"). Warto sprawdzić kod źródłowy Tesseract (metoda klasy TessAPI).
Alexander Lubyagin,

1

Używam programu Visual Studio 2017 Community Edition.
Rozwiązałem ten problem, tworząc katalog o nazwie tessdata w katalogu Debug mojego projektu. Następnie umieściłem plik eng.traineddata we wspomnianym katalogu.


1

Używam systemu operacyjnego Windows, wypróbowałem wszystkie powyższe rozwiązania i żadne z nich nie działa.

Wreszcie instaluję Tesseract-OCR na dysku D (skąd uruchamiam mój skrypt Pythona) zamiast dysku C i działa.

Tak więc, jeśli używasz systemu Windows, uruchom skrypt Pythona na tym samym dysku, co Tesseract-OCR.




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
To nie jest odpowiedź. Proszę wyjaśnij, co się tutaj dzieje, aby inni mogli uzyskać przydatne informacje podczas czytania Twojej odpowiedzi.
AlexH
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.