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

Russel Crowe
źródło

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/
AAAfarmclub
źródło
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).

Mih Zam
źródło
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

Yan Khonski
źródło
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.

m3nda
źródło
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

poszukiwacz
źródło
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ęć)

Alexander Lubyagin
źródło
@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.

Jan
źródło
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.

yusuzech
źródło
1

Programista C # pracujący w systemie Windows tutaj. U mnie działa po prostu pobranie pliku eng.traineddata z następującego adresu URL:

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

i skopiuj go do następującego katalogu w moim projekcie aplikacji konsoli:

[Katalog projektu] \ bin \ Debug \ tessdata

Ręcznie utworzyłem powyższy folder tessdata .

yangli.liy
źródło
0

Użytkownicy systemu Windows:

W Zmienne środowiskowe dodaj nową zmienną do zmiennej systemowej o nazwie „TESSDATA_PREFIX” i wartości „C: \ Program Files (x86) \ Tesseract-OCR \ tessdata”

rafcod
źródło
Zgadzam się, i to działa płynnie, niektóre bardziej instalacja jest wymagana, 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)
Marwen Sabri
źródło
4
To nie jest odpowiedź. Proszę wyjaśnij, co się tutaj dzieje, aby inni mogli uzyskać przydatne informacje podczas czytania Twojej odpowiedzi.
AlexH