OCR na Linuxie
22.10.2014 | aktual.: 23.10.2014 11:27
W swoim ostatnim tekście napisałem, że w porównaniu z Windowsem, kwestia rozpoznawania tekstów nie wygląda na Linuxie za dobrze. W komentarzach pojawiły się nawet stwierdzenia, że na Linuxie nie ma niczego, co by potrafiło dobrze rozpoznać polski tekst. Postanowiłem zatem zrobić prosty test dwóch łatwych w użyciu narzędzi OCR.
Jak testowałem
Wkleiłem jedną stronę tekstu do Writera (320 słów) i zapisałem do PDFa w trzech różnych wersjach czcionkowych: Liberation Sans, Liberation Serif, Ubuntu Light. Następnie wydrukowałem te trzy strony, zeskanowałem (300 DPI) i zapisałem do pliku jpg. Następnie każdym z programów starałem się rozpoznać każdy z plików. Programy oceniałem przede wszystkim pod kątem jakości rozpoznania, ale także prędkości oraz łatwości instalacji i korzystania z programu. Rozpoznany tekst kopiowałem do Writera, aby wychwycić błędy autokorektą.
Lios
Instalacja: paczka deb ze strony twórcy lub oficjalne repo.
Obsługa: Dosyć intuicyjny GUI. Obsługa skanowania i kamerki. Możliwość ustawienia automatycznego interwału między skanowaniem wielu stron.
Formaty: JPG (PDF wydaje się nie działać - konwersja PDFa do obrazu trwa wieczność)
Silnik: W zależności od zainstalowanych w systemie.
LIBERATION SERIF (Cuneiform)
Czas: 6 sekund
Błędy: 10/320 - z czego kilkukrotnie znak myślnika zastąpiony tymi samymi krzaczkami (łatwe do poprawienia), w jednym miejscu brak kreski nad "ó", raz "óa" zamiast "da", raz "rn" zamiast "m". Ogólnie bardzo dobry wynik. Każda rozpoznana linijka kończy się znakiem końca paragrafu.
LIBERATION SANS (Cuneiform)
Czas: 5 sekund
Błędy: 6/320 - ogólnie błędy dokładnie tego samego typu (głównie myślniki).
UBUNTU LIGHT (Cuneiform)
Czas: 6 sekund
Błędy 9/320 - niemal identycznie jak Liberation Serif.
Silnik Tesseract wymaga instalacji języka polskiego z repo.
LIBERATION SERIF (Tesseract)
Czas: 10 sekund
Błędy: 4/320 - Tesseract dobrze radzi sobie z myślnikami. Popełnione błędy są drobne (wstawiona niepotrzebnie spacja wewnątrz wyrazu, zgubiona kropka w domenie). Tak naprawdę znalazłem tylko 1 ważniejszy błąd. Znakomita jakość rozpoznania. Jedyne czego się można czepić to te znaki końca paragrafu.
LIBERATION SANS (Tesseract)
Czas: 10 sekund
Błędy: 2/320 - Tym razem kropka w domenie dobrze rozpoznana. Jeden błąd to brak spacji między wyrazami. Jak widać czcionka nieszeryfowa jest "widziana" jeszcze lepiej.
UBUNTU LIGHT (Tesseract)
Czas: 8 sekund
Błędy:13/320 - z czego aż 12 błędów to brak spacji między wyrazami, a tylko 1 to błąd w pisowni samego wyrazu. Jak widać nieco mniej klasyczna czcionka Ubuntu sprawia pewne problemy.
UWAGI: Koniecznie trzeba zaznaczyć manualne ustawianie orientacji strony. Przyspiesza to kilkukrotnie proces rozpoznawania i pozwala uniknąć błędów niepotrzebnego obrócenia strony o 90 stopni.
Ocrfeeder
Instalacja: oficjalne repo.
Obsługa: Prosty i funkcjonalny GUI. Możliwość łatwego zaznaczenia obszaru, który chcemy rozpoznać i szybkiego przełączania się między silnikami rozpoznawania. Możliwość eksportu do ODT. Pożera spore ilości pamięci. Działa rozpoznawanie z PDFów.
Formaty: JPG i PDF
Silnik: W zależności od zainstalowanych w systemie.
Zastosowanie tych samych silników daje takie same efekty jak w przypadku Lios. Różnica jest jednyie w komforcie pracy z programami. Całościowo bardziej pasuje mi chyba OCRFeeder, ale LIOS z pewnością jest warty wypróbowania, zwłaszcza że już niebawem ma ukazać się wersja 2.0, która ma przynieść nowości.
Podsumowanie
Wygląda na to, że kwestia rozpoznawania tekstu na Linuxie wygląda co raz lepiej. Przetestowane przeze mnie 2 silniki dają bardzo dobre wyniki. Rozpoznane teksty są w pełni używalne i wymagają jedynie formatowania. Wydaje mi się, że na domowe potrzeby w zupełności to wystarczy. Z pewnością oba programy zapewniają tylko podstawową funkcjonalność, a rozpoznawanie złożonych dokumentów, zawierających tabele, elementy graficzne, byłoby bardzo uciążliwe. Pod tym względem Abby FineReader jest o dwie klasy lepszym narzędziem. Ma też swoją cenę.
Aktualizacja
Idąc za słuszną sugestią Januszka, wzbogacam test o rozpoznanie tekstu sfotografowanego. Obraz pozyskany skanerem ma najwyższą możliwą jakość. Sam byłem ciekaw jak wypadnie najlepszy silnik w trudniejszych warunkach. Zrobiłem więc koszmarne zdjęcie komórką, które zamieszczam poniżej, aby lepiej uzmysłowić czytelnikowi stopień komplikacji. Jak widać kadr jest niedoświetlony, aparat nie był do końca w zenicie, a dodatkowo całość lekko uchwycona ze skosu. Jutro, przy lepszym świetle, zrobię jeszcze dodatkowe zdjęcia i wzbogacę wpis nowymi wynikami.
Pierwsza próba rozpoznania tekstu była dosyć nieudana. Zaznaczenie ręcznie całej strony spowodowało pominięcie niektórych fragmentów. Dlatego w drugim podejściu podzieliłem cały tekst na 3 bloki i rozpoznawałem każdy z bloków oddzielnie.
Błędy 12/320 - przy czym zdecydowanie ucierpiał tekst na lewym marginesie, gdzie jest najciemniejszy fragment. Środkowa część zdjęcia została rozpoznana bardzo dobrze. Spodziewam się lepszych wyników przy lepszym świetle.
Zgodnie z przewidywaniami, zdjęcie wykonane aparatem fotograficznym z lampą błyskową zostało rozpoznane niemal idealnie. Zdjęcie zostało nieznacznie poprawione w programie graficznym - podniesiony został kontrast.
Błędy: 3/320 - "0" zamiast "o", brak spacji po myślniku, brak kropki w domenie.
W odpowiedzi na prośby z komentarzy, przetestowałem też zeskanowaną stronę z książki. Wybrałem programowanie, ponieważ na jednej stronie pojawia się kilka różnych czcionek, a w dodatku pojawiają się znaki specjalne, np. ampersandy, które dodatkowo mogą zmylić OCR'a. Jak być może widać za zdjęciu powyżej, tusz z drugiej strony kartki przebija nieco w miejscach nie zapełnionych tekstem. Wydaje mi się, że nie wpłynęło to jednak na jakość rozpoznania. Linie poziome z góry i dołu strony zostały automatycznie pominięte przy rozpoznawaniu. W jednym miejscu pojawił się ciąg krzaczków nie związany z żadnym wyrazem.
Błędy 10/320 plus wspomniane krzaczki do usunięcia. Moim zdaniem jest to całkiem niezły wynik.