2013-02-10 86 views
34

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à đặt nó vào thư mục tessdata (/ usr/local/share/tessdata). Khi tôi đang cố gắng để chạy Tesseract với lệnh tesseract blob.jpg out -l rus, nó sẽ hiển thị một lỗi:Lỗi chạy Tesseract

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 compiling guide, tôi sử dụng export TESSDATA_PREFIX='/usr/local/share/' để chỉ thư mục tessdata của tôi. Có lẽ tôi nên chỉnh sửa bất kỳ tệp cấu hình nào? Tesseract cố 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

Trả lờ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 cho hình ảnh tải)

+0

Đây là mã C++ ... – DarkSkull

+0

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

45

Bạn có thể lấy eng.traineddata từ Google (nén):

wget https://tesseract-ocr.googlecode.com/files/eng.traineddata.gz 

hoặc Github (thô):

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

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

Khi bạn lấy (các) tệp, hãy di chuyển chúng đến thư mục /usr/local/share/tessdata. Cảnh báo: một số bản phân phối Linux (chẳng hạn như openSUSE và Ubuntu) có thể được mong đợi trong số /usr/share/tessdata thay 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/ 
+1

sửa tôi nếu tôi sai .. nhưng không phải là câu hỏi về việc bao gồm một ngôn ngữ mới (rus) và không cung cấp một thông báo lỗi (lỗi) trỏ tới? – Arne

+1

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

+3

Cảnh báo: các cài đặt linux khác (ubuntu sống động) hoạt động trong một thư mục khác:/usr/share/tesseract-ocr/tessdata thay vì – octohedron

15

nó có thể có ích cho một ai đó như vậy ... Cách đơn giản nhất là cài đặt các 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ể thấy, nó sẽ mở ra con đường cho các ngôn ngữ khác (ví dụ Tesseract -ocr-fra)

+1

Đây phải là câu trả lời được chấp nhận. Thủ công mày mò với các tệp đằng sau các trình quản lý gói (giả sử bạn đã sử dụng một tệp để cài đặt tesseract ở vị trí đầu tiên) là một ý tưởng tồi: –

+0

Đối với người dùng Mac sử dụng MacPort: sudo port install tesseract-eng – Haxis

2

Không có giải pháp nào trước đây phù hợp với tôi.

Tôi đã cài đặt cả hai bằng cách apt-get và tải xuống tessdata theo cách thủ công, di chuyển xung quanh /usr và cứ như vậy và không ai làm việc ngay cả khi tôi đã xuất biến nghìn lần.

Cuối cùng, trong lần thử trước khi bắt đầu khóc, tôi đã cố chuyển đường dẫn trực tiếp đến cá thể của Tesseract().

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

5

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

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

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

Ví dụ, đối eng, tôi đã tải về tất cả các file với tiền tố eng.

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

Ta được kết quả Hệ thống env var: TESSDATA_PREFIX = D:/Java/OCR Và thư mục OCR có tessdata với các tập tin ngôn ngữ.

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

enter image description here

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.