Lỗi chạy Tesseract


82

Tôi gặp sự cố khi chạy công cụ tesseract-ocr trên linux. Tôi đã tải xuống dữ liệu ngôn ngữ RUS và đưa nó vào thư mục tessdata (/ usr / local / share / tessdata). Khi tôi đang cố gắng chạy tesseract bằng lệnh tesseract blob.jpg out -l rus, nó sẽ hiển thị lỗi:

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.

Theo hướng dẫn biên dịch , tôi đã sử dụng export TESSDATA_PREFIX='/usr/local/share/' để trỏ thư mục tessdata của mình. Có lẽ tôi nên chỉnh sửa bất kỳ tệp cấu hình nào? Tesseract cố gắng tải các tệp dữ liệu 'eng' thay vì 'rus'.

Ảnh chụp màn hình: http://i.stack.imgur.com/I0Guc.png

Câu trả lời:


87

Bạn có thể lấy eng.traineddataGithub:

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

Kiểm tra https://github.com/tesseract-ocr/tessdata để biết danh sách đầy đủ dữ liệu ngôn ngữ được đào tạo.

Khi bạn lấy (các) tệp, hãy chuyển chúng vào /usr/local/share/tessdatathư mục. Cảnh báo: một số bản phân phối Linux (chẳng hạn như openSUSE và Ubuntu) có thể mong đợi nó vào /usr/share/tessdatathay thế.

# 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
sửa cho tôi nếu tôi sai .. nhưng không phải câu hỏi về việc bao gồm một ngôn ngữ mới (rus) và không cung cấp ngôn ngữ mà thông báo lỗi (bị lỗi) trỏ đến?
Arne

1
chỉnh sửa: Vì một số lý do, tesseract sẽ không chạy trừ khi có eng.traineddate - ngay cả khi nó không cần thiết. Vì vậy câu trả lời của AAAfarmclub là ổn.
Arne

3
Cảnh báo: cài đặt Linux khác (ubuntu sống động) làm việc trong một thư mục khác nhau: / usr / share / Tesseract-ocr / tessdata thay
octohedron

@Gazta: Vâng, openSUSE đòi hỏi thư mục đó thay vì
Avindra Goolcharan

3
Trong Ubuntu-Gnome 16.04: đó là/usr/share/tesseract-ocr/tessdata/
kmario23

55

Cách đơn giản nhất là cài đặt gói cần thiết:

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)

Như bạn có thể nhận thấy, nó mở ra con đường đến với các ngôn ngữ khác (tức là tesseract-ocr-fra).


3
Đây phải là câu trả lời được chấp nhận. Bằng tay mày mò với các tập tin đằng sau các nhà quản lý gói lại (giả sử bạn sử dụng một cài đặt Tesseract ở nơi đầu tiên) là một ý tưởng tồi
Ishay Peled

2
Đối với người dùng Mac sử dụng MacPort: cổng sudo cài đặt Tesseract-eng
p-mercier

4
Bạn có thể sử dụng tesseract --list-langsđể xem tất cả các ngôn ngữ có sẵn. Bạn cũng có thể sử dụng sudo apt-get install tesseract-ocr-*để cài đặt tất cả trong số họ
Rodrigo Laguna

cho vòm các gói được gọi tesseract-data-engvv
Loki

Rất tiếc, câu trả lời này không hoạt động trong vùng chứa Docker mặc dù nó hoạt động bên ngoài nó.
Ælex

27

Tôi cũng gặp lỗi này trên máy Windows.

Giải pháp của tôi.

1) Tải xuống tệp ngôn ngữ của bạn từ https://github.com/tesseract-ocr/tessdata/tree/3.04.00

Ví dụ: đối với eng, tôi đã tải xuống tất cả các tệp có tiền tố eng.

2) Đặt chúng vào thư mục tessdata bên trong thư mục nào đó. Thêm thư mục này vào các biến Đường dẫn Hệ thống dưới dạng TESSDATA_PREFIX .

Kết quả sẽ là System env var: TESSDATA_PREFIX = D: / Java / OCR Và thư mục OCR có tessdata với các tệp ngôn ngữ.

Đây là ảnh chụp màn hình của thư mục:

nhập mô tả hình ảnh ở đây


4
Vâng, mọi người đang nói về linux. Xin các bạn, đừng quên một hệ điều hành phổ biến nữa đang có trên thị trường.
Khan

4

Không có giải pháp trước đây làm việc cho tôi.

Tôi đã cài đặt cả bằng apt-getcách tải xuống tessdata theo cách thủ công, di chuyển xung quanh /usr, v.v. và không ai hoạt động ngay cả khi tôi đã xuất biến hàng nghìn lần.

Cuối cùng, trong lần thử cuối cùng trước khi bắt đầu khóc, tôi đã cố gắng truyền trực tiếp đường dẫn đến phiên bản Tesseract ().

Trong Python: tr = Tesseract("/usr/local/share/tesseract-ocr/")và bây giờ nó hoạt động. Để làm rõ, tôi đang sử dụng tesserwrapmô-đun.


1
Tôi cảm thấy bạn! Tôi đang ở đó chính xác ngay bây giờ. Sự khác biệt là, để làm cho mọi thứ tồi tệ hơn, tôi đang cố gắng làm cho nó hoạt động từ dòng lệnh.
nhà thám hiểm

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

Trong trường hợp của tôi, những sai lầm mà tôi đã mắc phải hoặc những nỗ lực không thành công.

  • Tôi sao chép repo github và sao chép các tệp từ đó sang
    • / usr / local / share / tessdata /
    • / usr / share / tesseract-ocr / tessdata /
    • / usr / share / tessdata /
  • Được sử dụng TESSDATA_PREFIXvới các đường dẫn trên
  • sudo apt-get install tesseract-ocr-eng

2 lần thử đầu tiên không hoạt động bởi vì, các tệp từ git clonekhông hoạt động vì những lý do mà tôi không biết. Tôi không chắc tại sao lần thử số 3 lại hiệu quả với tôi.

Cuối cùng,

  1. Tôi đã tải xuống tệp eng.traindata bằng wget
  2. Đã sao chép nó vào một số thư mục
  3. Được sử dụng --tessdata-dirvới tên thư mục

Đối với tôi, hãy tìm hiểu kỹ công cụ và sử dụng nó , thay vì dựa vào cài đặt & thư mục trình quản lý gói


2

Bạn có thể gọi hàm API tesseract từ mã 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();

Và xây dựng mã này:

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

(tôi cần FreeImage để tải ảnh)


@DarkSkull, vâng, đây là mã C ++ được thử nghiệm trong Debian GNU / Linux. Như bạn thấy, Russel Crowe gặp vấn đề với hàm TessAPI :: Init (NULL, "rus"). Việc kiểm tra mã nguồn Tesseract (phương pháp lớp TessAPI) có ý nghĩa.
Alexander Lubyagin

1

Tôi đang sử dụng Visual Studio 2017 Community Edition.
Tôi đã giải quyết vấn đề này bằng cách tạo một thư mục có tên tessdata trong thư mục Gỡ lỗi của dự án của tôi. Sau đó, tôi đặt tệp eng.traineddata vào thư mục đã nói.


1

Tôi đang sử dụng hệ điều hành windows, tôi đã thử tất cả các giải pháp ở trên và không có giải pháp nào hoạt động.

Cuối cùng, tôi cài đặt Tesseract-OCR trên ổ D (Nơi tôi chạy tập lệnh python của mình từ đó) thay vì ổ C và nó hoạt động.

Vì vậy, nếu bạn đang sử dụng windows, hãy chạy tập lệnh python của bạn trong cùng ổ đĩa với Tesseract-OCR của bạn.


1

Nhà phát triển C # làm việc trên Windows tại đây. Điều hiệu quả đối với tôi chỉ đơn giản là tải xuống tệp eng.traineddata từ URL sau:

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

và sao chép nó vào thư mục sau trong dự án Ứng dụng Bảng điều khiển của tôi:

[Thư mục dự án] \ bin \ Debug \ tessdata

Tôi đã tạo thủ công thư mục tessdata ở trên.


0

Đối với người dùng Windows:

Trong Biến môi trường, hãy thêm một biến mới trong biến hệ thống có tên "TESSDATA_PREFIX" và giá trị là "C: \ Program Files (x86) \ Tesseract-OCR \ tessdata"


Đồng ý, và để làm việc nó trơn tru, một số cài đặt hơn là cần thiết, 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
Đây không phải là một câu trả lời. Vui lòng giải thích những gì đang xảy ra ở đây để những người khác có thể có được những hiểu biết hữu ích khi đọc phản hồi của bạn.
AlexH
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.