Jak wybrać między Tesseract a OpenCV? [Zamknięte]

94

Niedawno natknąłem się na Tesseract i OpenCV . Wygląda na to, że Tesseract to pełnoprawny silnik OCR, a OpenCV może być używany jako platforma do tworzenia aplikacji / usługi OCR.

Próbowałem użyć Tesseract na niektórych moich obrazach i jego dokładność wydaje się przyzwoita. Później natknąłem się na bardzo prosty samouczek dotyczący używania OpenCV do wykonywania OCR w Pythonie i byłem pod wrażeniem. W ciągu kilku minut skończyłem szkolenie systemu i jego dokładność była dobra. Ale oczywiście takie podejście oznacza, że ​​muszę intensywnie trenować swój system przy użyciu dużego zestawu treningowego.

Moje konkretne pytania są następujące:

  • Jak wybrać między Tesseract a użyciem OpenCV do zbudowania niestandardowej aplikacji OCR?
  • Dostępne są zestawy danych szkoleniowych dla Tesseract dla różnych języków. Czy OpenCV ma coś podobnego, abym nie musiał zaczynać od podstaw, aby osiągnąć OCR?
  • Który z nich jest lepszy w przypadku niedoszłej komercyjnej aplikacji?

Jakieś sugestie?

Legenda
źródło
8
Poniższe odpowiedzi są naprawdę świetne, ale jako osoba, która działała z OCR, mogę powiedzieć, że jakość rozpoznawania w Tesseract jest poniżej oczekiwań użytkownika aplikacji komercyjnej. Tesseract jest świetny, ale OCR jest trudny - takie rzeczy jak szkolenie online lub ulepszenia w locie są hmmm ... wciąż badaniami. Google, wielki sponsor TS w ostatnim czasie, zdecydował się zbudować własny silnik - OCROpus. I chociaż obiecał otworzyć kod źródłowy, podstawowy silnik rozpoznawania nie jest jeszcze dostępny - opublikowali tylko framework - to jest interfejs API do tesseraktu.
Sam,
3
@vasile: To jest bardzo pouczające. Nie byłem świadomy istnienia OCROpus. Dziękuję Ci. Czy miałbyś jakieś sugestie dotyczące alternatyw, jeśli moim końcowym celem jest napisanie OCR wizytówki (lub powiedzmy, która odczytuje rachunki ze stacji benzynowej, takie jak ten, który połączyłem: upload.wikimedia.org/wikipedia/en/3/34/ ... )? Pytam, ponieważ jestem po prostu ciekawy, jakie aplikacje mobilne wykorzystują do tego celu. Nie mam nic przeciwko robieniu OCR po stronie serwera. Kusiło mnie, aby użyć OpenCV po obejrzeniu tego fajnego demo: youtube.com/watch?v=OkcOfS1lTxs
Legend.
6
Istnieje wiele komercyjnych silników OCR, po prostu google, OCR accuracy testsa znajdziesz kilka wykresów. Mówiąc o aplikacjach mobilnych, większość z nich używa tesseract. Ale jeśli zechcesz pobrać niektóre z nich, zobaczysz, że wyniki są nieco inne niż obietnice. Zwykle robią demo wideo w dokładnie kontrolowanym środowisku i umieszczają je na youtube, ale na wolności, jeśli zeskanujesz stronę / przepis / kartę / cokolwiek, otrzymasz zabawne wyniki.
Sam,
1
@vasile: Dziękuję. Coś, co zajmie mnie dziś wieczorem. Naprawdę doceniam Twój czas.
Legenda,

Odpowiedzi:

77
  • Tesseract to silnik OCR. Jest używany, opracowany i finansowany przez Google specjalnie do odczytywania tekstu z obrazów, wykonywania podstawowej segmentacji dokumentu i operowania na określonych wejściach obrazu (pojedyncze słowo, wiersz, akapit, strona, ograniczone słowniki itp.).

  • Z drugiej strony OpenCV to biblioteka widzenia komputerowego, która zawiera funkcje, które pozwalają na wyodrębnianie niektórych cech i klasyfikację danych. Możesz stworzyć prosty moduł do segmentowania liter i klasyfikator, który wykonuje podstawowe OCR, ale nie jest to bardzo dobry silnik OCR (wcześniej zrobiłem go w Pythonie od zera. Jest naprawdę niedokładny dla danych wejściowych, które odbiegają od danych treningowych).

Jeśli chcesz uzyskać podstawową wiedzę o tym, jak trudne jest OCR, wypróbuj OpenCV. Tesseract służy do prawdziwego OCR.

Mikser
źródło
3
To zależy od twoich obrazów wejściowych. Tesseract działa najlepiej, gdy litery są wyraźne, ułożone w poziomą linię, rozstawione, niepołączone i idealnie czarno-białe. Przez około rok majstrowałem w społeczności zajmującej się skanowaniem / konserwacją książek dla majsterkowiczów i w wolnym czasie pracowałem nad oprogramowaniem, aby ułatwić ten proces. Najlepsze oprogramowanie tam (komercyjny lub nie) dla post-processing żadnych obrazów z tekstem jest skanowanie Tailor . Ma kilka opcji CLI, ale jeśli poświęcisz trochę czasu, aby zobaczyć, jak to działa, jest całkiem niesamowite.
Blender
2
Pracowałem trochę nad kodem źródłowym Scan Tailor i nie używa on wewnętrznie OpenCV, ale wiele z utworzonych algorytmów można bardzo łatwo przepisać za pomocą funkcji OpenCV. Jeśli twoje obrazy nie są wypaczone i nie są zdegradowane, tak naprawdę musisz po prostu zaimplementować adaptacyjną binaryzację i trochę prostego zwątpienia przed przesłaniem obrazu do Tesseract.
Blender,
1
Jeśli chodzi o twoje pytanie, wczoraj właśnie testowałem kilka losowych obrazów wejściowych. Wypróbowałem paragon ze stacji benzynowej: upload.wikimedia.org/wikipedia/en/3/34/ ... Rozpoznał 0jako 8(w sumie 20,00 $). Przyznaję, że cyfra była trudna do odszyfrowania, ale nie byłem pewien, co jeszcze można zrobić, aby dostosować Tesseract do takich sytuacji, a może wprowadzić komponent do nauki, jeśli będę miał aktywną bazę użytkowników.
Legenda,
5
Tesseract jest przeszkolony w zakresie czytania określonych zestawów czcionek. Te wielkie litery nie są jednymi z nich. Będziesz musiał złożyć Google ofiarę ze zwierząt i spróbować samemu wytrenować Tesseract: code.google.com/p/tesseract-ocr/wiki/TrainingTesseract3
Blender
1
Ponadto, zanim zaczniesz pisać własny silnik OCR do czytania tych listów, nie oczekuj, że będzie on dokładny. Napisałem jeden do automatyzacji Koła Fortuny, a przykładowe obrazy (zrzuty ekranu z gry online) były plikami JPEG. Artefakty z kompresji JPEG wystarczyły, aby schrzanić klasyfikator obrazu, chyba że dostarczyłem około 10-20 przykładowych obrazów każdego znaku.
Blender,
65

Jestem autorem wspomnianego samouczka rozpoznawania cyfr i powiedziałbym, że nie zastąpi to tesseraktu.

Tesseract to naprawdę dobry silnik OCR, może być najlepszym silnikiem OCR OpenSource.

Samouczek, o którym wspomniałeś, jest tylko próbą zrozumienia najprostszego działania OCR.

Tak więc, jeśli szukasz aplikacji OCR, polecam użycie OpenCV do wstępnego przetworzenia obrazu, a następnie zastosowanie silnika tesseract.

Abid Rahman K.
źródło
1
+1 Dziękuję. Przede wszystkim dziękuję za tutorial :) To była naprawdę ciekawa lektura. Czy znasz jakieś odniesienia / samouczki dotyczące korzystania z OpenCV razem z Tesseract? Nie mówisz o łączeniu, ale o rodzaju transformacji obrazu lub wstępnego przetwarzania, które należy wykonać, aby poprawić dokładność Tesseract?
Legend,
2
Chciałbym tylko powiedzieć, że chociaż Tesseract jest dobrym silnikiem OCR w porównaniu z innymi, nadal jest dość niedokładny, miałem około 40% skuteczności w rozpoznawaniu poprawnego tekstu. Miejmy nadzieję, że za kilka lat będzie lepiej.
GangstaGraham,
4
@GangstaGraham Wystarczy wyszkolić tesseract, aby uzyskać lepsze wyniki w ciągu kilku godzin lub dni, a nie lat. opensource.newmediaist.com/tesseract-training.html
walentynki
1
Używam PyTesseract do ekstrakcji tekstu w czasie rzeczywistym. Działa dobrze na komputerze z systemem Linux, ale działa bardzo wolno w środowisku Raspberry Pi ... Czy jest jakiś sposób na zainstalowanie lekkiej wersji? Na przykład przetwarzać tylko cyfry i wielkie litery alfabetu angielskiego?
Jurij Czernyszow
9

Te dwie możliwości mogą się uzupełniać. Jeśli czytasz artykuł o OpenCV: https://github.com/tesseract-ocr/docs/blob/master/tesseracticdar2007.pdf

Podkreśla, że ​​„Ponieważ firma HP niezależnie opracowała technologię analizy układu strony, która była używana w produktach (a zatem nie została wydana na potrzeby oprogramowania open source), Tesseract nigdy nie potrzebował własnej analizy układu strony. Dlatego Tesseract zakłada, że ​​jego dane wejściowe są zdefiniowano opcjonalne regiony tekstu wielokątnego. "

Tego typu zadanie może zostać wykonane przez OpenCV, a wynikowy obraz przekazać Tesseract. Próbkę tego typu kodu znajdziesz w repozytorium Git: https://github.com/Itseez/opencv_contrib/tree/master/modules/text/samples Przykłady używają interfejsów API Tesseract do konwersji obrazu na tekst.

user2957542
źródło
3

OpenCV to biblioteka CV , używana do analizy i ogólnego przetwarzania obrazów. Tesseract to biblioteka OCR , która jest wyspecjalizowanym podzbiorem CV poświęconym wyodrębnianiu tekstu z obrazów.

Z OpenCV.org

..... używane do wykrywania i rozpoznawania twarzy, identyfikowania obiektów, klasyfikowania ludzkich działań w filmach, śledzenia ruchów kamery, śledzenia poruszających się obiektów, wyodrębniania modeli 3D obiektów, tworzenia chmur punktów 3D z kamer stereo, łączenia obrazów w celu uzyskania wysokiej Rozdzielczość obrazu całej sceny, znajdowanie podobnych obrazów w bazie danych obrazów, usuwanie efektu czerwonych oczu ze zdjęć wykonanych przy użyciu lampy błyskowej, śledzenie ruchów oczu, rozpoznawanie scenerii i tworzenie znaczników, aby pokryć ją rozszerzoną rzeczywistością itp.

Z Tesseract Github :

..... może być używany bezpośrednio lub (w przypadku programistów) za pomocą interfejsu API do wyodrębniania tekstu pisanego, pisanego ręcznie lub drukowanego z obrazów. Obsługuje szeroką gamę języków.

Aniruddha Varma
źródło