2013-07-11 13 views
8

Firma, nad którą pracuję, rozważa zmianę obecnego silnika OCR (OmniPage Nuance) na alternatywne rozwiązanie typu open source takie jak Tesseract.C++ - Rozczarowująca wydajność z Tesseractem

W nadziei na uzyskanie wyników testów wydajności (szybkość i dokładność wykonania) w celu ich porównania, otrzymałem bardzo prosty program działający tylko po to, aby zorientować się, jak dobrze mógłby działać interfejs API Tesseract 3.2 C.

Moje początkowe obserwacje (niektóre z nich mogą być wyłączone, nie krępuj się poprawić moje interpretacje w komentarzach):

  • Dokładność była dobra. Bardzo dobrze porównuje się z naszym obecnym silnikiem.
  • Formaty wyjściowe oferują tylko rozpoznany tekst zamiast podglądu miejsca, w którym tekst znajdował się na oryginalnym obrazie. There jest możliwość pobrania formatu hOCR i przekształcenie go w coś jeszcze bardziej wizualnie atrakcyjne, ale nie udało mi się znaleźć konwertery open-source na Windows nadaje się do użytku komercyjnego (nie mogłem znaleźć źródła lub wykonywalny od ExactCODE's hocr2pdf). I mógłby napisać prosty skrypt, który będzie konwertować wykrytej bbox za każdym akapicie i wystarczy dodać style element, który ustawia left, right, width, height i position atrybuty znacznika HTML, więc to ograniczenie jest niewielkie.
  • Leptonica (biblioteka obrazów używana przez Tesseract) appears not to support reading complex PDF files. Chociaż powoduje to dodatkowe niewielkie nakłady związane z migracją (ponieważ nie jest to gotowe do użycia), nie stanowi to większego problemu, ponieważ mamy już moduły w naszym produkcie, aby wyodrębnić obrazy z plików PDF.
  • Prędkość wykonania była bardzo powolna (w porównaniu do OmniPage Nuance'a, przynajmniej). Zajęło Tesseract nieco więcej niż 2 minuty na moim komputerze, aby przekonwertować plik na końcu tego pytania. Zajęło to OmniPage Nuance mniej niż 3 minuty 30 sekund, aby przekonwertować 10 dużych dokumentów (w tym dostarczony obraz). (Nie pamiętam dokładnie jak długo, ale najwyraźniej było to mniej niż ~ 15 sekund dla dostarczonego obrazu)

Jeśli chodzi tylko o inne czynniki, migracja mogłaby prawdopodobnie odbyć się bez zbyt dużego problemu . To ograniczenie wydajności jest jednak zabójcą.

Potem pomyślałem: jak Tesseract może działać tak źle w porównaniu z komercyjnymi odpowiednikami? Google z pewnością dąży do wydajności.

Jestem prawie pewien, że problem pochodzi ode mnie. Nie używam interfejsu API we właściwy sposób, nie zmieniam ustawień, które powinienem lub czegoś innego, czego właśnie brakuje właśnie teraz.

Oto odcinek mojego programu badawczego związanego Tesseract:

#include "baseapi.h" 
#include "allheaders.h" 

// ... 
// Tesseract initialization 
tesseract::TessBaseAPI api; 
api.Init("", "eng+deu+fra"); 
api.SetPageSegMode(tesseract::PageSegMode::PSM_AUTO_OSD); 
api.SetVariable("tessedit_create_hocr", "1"); // for the hOCR output 

// ... 
// OCR 
PIX* pixs = pixRead(image_path.c_str()); 
STRING result; 
api.ProcessPages(image_path.c_str(), NULL, 0, &result); 

// ... write the result to a file 

Próbowałem z różnymi trybami strona segmentacji i bez stworzenia hocr formacie aktywnego, tylko być tak samo rozczarowany jak poprzednio. Próbowałem też zastosować do obrazu niektóre skrypty przetwarzania wstępnego, aby sprawdzić, czy pomogłoby to w wykryciu, ale bez powodzenia. Próbowałem z jednym słownikiem w celach testowych, ale nie miało to dużego wpływu na wydajność. Miałem te same problemy z wydajnością w przypadku wielostronicowych plików TIF i jednostronicowych obrazów TIF, ale nie wypróbowałem jeszcze innych formatów.

Szybkie profilowanie aplikacji za pomocą VerySleepy pokazało, że większość czasu wykonania została poświęcona na new s i delete s związanych z ramkami ograniczającymi.

Naprawdę chciałbym nam przenieść się do biblioteki open-source, a nie produktem handlowym, więc byłbym wdzięczny, jeśli ktoś może mi pomóc osiągnąć lepszą wydajność z API. O ile nie będę w stanie uzyskać radykalnych ulepszeń, aby uzyskać wyniki wydajności podobne do obecnego silnika, migracja nie nastąpi.

Dziękuję bardzo za Twój cenny czas.

Oto obraz z mojego zestawu testowego:

Sample OCR image

Odpowiedz

9

Nie sądzę, że można coś z tym zrobić. To prawda, Tesseact jest niesamowicie wolny w porównaniu do komercyjnych silników, takich jak OmniPage lub ABBYY. Każdy test porównawczy to pokazuje. Te firmy prowadzą OCR do życia i bardzo poważnie podchodzą do szybkości, dokładności i innych czynników.

+0

Przypuszczam, to rzeczywiście logiczne. Przypuszczałem Google pójdzie na wydajność, ale może po prostu nie wymagają intensywnej prędkości i nie potrzebują do optymalizacji dla swoich potrzeb. Dziękuje za odpowiadanie. :) –

+3

jeden punkt, aby pamiętać, jest to, że wydaje się, że Google nie korzysta tesseract dla własnych aplikacji (przynajmniej nie ten sam kod, który widzimy), jak wydajność i dokładność ich osiągnięcia w nich jest w innym pole do gry do tesserakt . Wydaje się, że jest to bardziej projekt strony lub 20% dla kilku swoich programistów. – ngb