OCRopus to otwartoźródłowy zestaw narzędzi przeznaczonych do optycznego rozpoznawania znaków, analizy układu stron oraz przetwarzania zeskanowanych dokumentów. Projekt odegrał istotną rolę w rozwoju nowoczesnych technologii OCR, szczególnie w obszarze rozpoznawania całych wierszy tekstu za pomocą sieci neuronowych. Jego modułowa architektura umożliwiała osobne wykonywanie kolejnych etapów przetwarzania dokumentu: od przygotowania obrazu i binaryzacji, przez wykrywanie wierszy, aż po rozpoznanie treści oraz wygenerowanie wyników w formacie zachowującym informacje o układzie strony.
Warto już na początku zaznaczyć, że OCRopus nie jest typową aplikacją z prostym interfejsem graficznym, do której wystarczy przeciągnąć plik PDF i nacisnąć przycisk „rozpoznaj”. Jest to przede wszystkim zbiór programów, modeli i skryptów używanych z poziomu wiersza poleceń. Twórcy projektu sami opisywali OCRopus jako kolekcję programów do analizy dokumentów, a nie gotowy, kompletny system OCR przeznaczony dla każdego użytkownika. W praktyce oznaczało to konieczność samodzielnego przygotowania przepływu pracy, dobrania odpowiedniego modelu oraz niekiedy wytrenowania własnej sieci rozpoznającej.
OCRopus pozostaje ważnym projektem z historycznego i technologicznego punktu widzenia. Wprowadzone w nim rozwiązania wpłynęły na kolejne systemy rozpoznawania tekstu, w tym narzędzia przeznaczone do digitalizacji starych druków, dokumentów archiwalnych oraz tekstów zapisanych alfabetami innymi niż łaciński. Chociaż starsze repozytorium OCRopy zostało zarchiwizowane w kwietniu 2026 roku i jest obecnie dostępne wyłącznie w trybie odczytu, techniki rozwijane w ramach OCRopus nadal można odnaleźć w projektach pochodnych i późniejszych systemach OCR.
Co to jest OCRopus?
OCRopus jest rodziną silników oraz narzędzi służących do automatycznego odczytywania tekstu z obrazów dokumentów. Nazwa projektu odnosi się do technologii OCR, czyli Optical Character Recognition – optycznego rozpoznawania znaków.
Podstawowym zadaniem systemu OCR jest przekształcenie obrazu zawierającego litery, cyfry i inne symbole w tekst, który może być:
- wyszukiwany,
- kopiowany,
- edytowany,
- analizowany przez programy,
- indeksowany w bazach danych,
- używany do tworzenia dostępnych dokumentów cyfrowych.
OCRopus nie ograniczał się jednak wyłącznie do samego rozpoznawania znaków. Jego architektura obejmowała również analizę struktury dokumentu, lokalizowanie wierszy tekstowych, normalizowanie obrazów oraz przygotowywanie danych treningowych.
Oficjalna strona projektu przedstawia OCRopus jako kolekcję silników OCR opartych na sieciach neuronowych, pierwotnie rozwijaną przez Thomasa Breuela przy udziale studentów, badaczy i przedsiębiorstw. Projekt przechodził wiele zmian technologicznych – od rozwiązań napisanych w języku C i C++, przez popularną wersję Pythonową OCRopy, po późniejsze eksperymenty wykorzystujące PyTorch.
Do czego służy OCRopus?
OCRopus został stworzony przede wszystkim z myślą o złożonym przetwarzaniu dokumentów. Może być wykorzystywany do automatycznego rozpoznawania tekstu między innymi ze:
- skanów książek,
- gazet i czasopism,
- dokumentów urzędowych,
- archiwalnych wydruków,
- maszynopisów,
- formularzy,
- dokumentacji technicznej,
- historycznych materiałów bibliotecznych,
- stron zapisanych krojem Fraktur,
- obrazów zawierających regularne wiersze tekstu.
System był szczególnie interesujący dla bibliotek, archiwów, uczelni i zespołów zajmujących się humanistyką cyfrową. Możliwość trenowania własnych modeli pozwalała dostosowywać rozpoznawanie do specyficznego kroju pisma, języka, alfabetu lub rodzaju dokumentu.
OCRopus mógł również stanowić część większego systemu digitalizacji. W takim zastosowaniu nie działał samodzielnie, lecz był łączony ze skanerami, narzędziami do przetwarzania obrazu, systemami kontroli jakości, bazami metadanych oraz oprogramowaniem generującym przeszukiwalne pliki PDF.
Historia projektu OCRopus
Historia OCRopus pokazuje, jak rozwijały się technologie rozpoznawania tekstu od klasycznych metod segmentacyjnych do sieci neuronowych rozpoznających całe wiersze.
Początki rozwiązań rozwijanych przez Thomasa Breuela
Korzenie projektu sięgają wcześniejszego systemu hwrec, który był silnikiem rozpoznawania pisma opracowanym w języku C. Według oficjalnej historii projektu rozwiązanie to było wykorzystywane przez amerykańskie Biuro Spisu Ludności już w 1995 roku. Stosowało klasyfikację znaków za pomocą sieci neuronowych, dynamiczne algorytmy segmentacji oraz dekodowanie wykorzystujące automaty skończone.
Następnie powstał OCRopus 1, napisany głównie w języku C++. System rozwijał między innymi algorytmy geometrycznej analizy układu dokumentów.
OCRopus 2 i OCRopy
Kolejnym etapem był OCRopus 2, powszechnie znany jako OCRopy lub ocropy. Była to wersja przeniesiona do środowiska Pythona. Wprowadzała między innymi normalizację wierszy tekstu przed rozpoznawaniem oraz mechanizm rozpoznawania wykorzystujący sieci LSTM. Oficjalna strona określa OCRopy jako najszerzej wykorzystywaną wersję OCRopus i podstawę kilku projektów pochodnych.
To właśnie z OCRopy najczęściej kojarzone są polecenia takie jak:
ocropus-nlbin,ocropus-gpageseg,ocropus-rpred,ocropus-rtrain,ocropus-hocr.
Każde z nich odpowiadało za osobny etap przygotowania lub rozpoznawania dokumentu.
OCRopus 3
OCRopus 3 był próbą przeniesienia wcześniejszych rozwiązań do środowiska PyTorch. Wersja ta oferowała między innymi obsługę procesorów graficznych, trenowalną analizę układu strony, wykrywanie obrotu dokumentu i modele językowe działające na poziomie znaków.
Projekt opierał się jednak na bardzo starej wersji PyTorch 0.3 i według oficjalnej strony nie jest zgodny z nowszymi wydaniami biblioteki. Z tego względu twórcy wprost odradzają jego używanie.
OCRopus 4
OCRopus 4 miał być nowocześniejszą wersją systemu, wykorzystującą PyTorch i głębsze modele do segmentacji strony oraz rozpoznawania tekstu. Wśród zapowiadanych funkcji znajdowały się:
- rozpoznawanie na poziomie słów lub całych wierszy,
- bezpośrednia praca na obrazach w skali szarości,
- eliminacja wcześniejszej normalizacji linii,
- uczenie samonadzorowane,
- przetwarzanie danych za pomocą WebDataset,
- nowocześniejsze modele segmentacji stron.
Rozwój kolejnych generacji OCRopus pokazuje stopniowe przejście od ręcznie projektowanych etapów przetwarzania do modeli uczących się większej części procesu bezpośrednio z danych.
Jak działa OCRopus?
Działanie klasycznej wersji OCRopy można przedstawić jako kilkuetapowy potok przetwarzania. Każdy etap przyjmuje określony typ danych i generuje wynik używany przez następny moduł.
Najczęściej stosowany przebieg obejmował:
- przygotowanie obrazu dokumentu,
- binaryzację,
- analizę układu strony,
- wydzielenie poszczególnych wierszy,
- normalizację obrazów wierszy,
- rozpoznawanie tekstu,
- zapis wyników,
- wygenerowanie dokumentu hOCR lub innego formatu wynikowego.
Modułowość była jedną z największych zalet projektu. Użytkownik mógł zastąpić wybrany etap własnym skryptem, zmienić metodę binaryzacji albo wykorzystać inny silnik rozpoznawania.
Przygotowanie obrazu do rozpoznawania
Jakość OCR w ogromnym stopniu zależy od jakości materiału wejściowego. Nawet najlepszy model może popełniać wiele błędów, jeśli skan jest rozmazany, przekrzywiony, zbyt ciemny albo zawiera mocne cienie.
Przed rozpoczęciem rozpoznawania należało więc zadbać o:
- właściwą rozdzielczość skanu,
- usunięcie szumu,
- wyrównanie strony,
- korektę obrotu,
- poprawę kontrastu,
- ograniczenie cieni przy grzbiecie książki,
- usunięcie niepotrzebnych marginesów,
- zachowanie czytelności cienkich elementów liter.
Dokumentacja OCRopy wskazywała, że standardowe ustawienia były dostosowane przede wszystkim do binarnych obrazów dokumentów o rozdzielczości około 300 dpi, z czarnym tekstem na białym tle. Rozpoznawanie samych wierszy było stosunkowo odporne na różnice rozdzielczości, natomiast analiza układu strony silnie od niej zależała.
Binaryzacja za pomocą ocropus-nlbin
Binaryzacja polega na przekształceniu obrazu kolorowego lub zapisanego w skali szarości w obraz składający się zasadniczo z dwóch wartości: czerni i bieli.
W OCRopy odpowiadało za to między innymi polecenie:
ocropus-nlbin
Zadaniem programu było oddzielenie tekstu od tła i przygotowanie obrazu, który mógł zostać łatwiej przeanalizowany przez kolejne moduły.
Binaryzacja nie jest zwykłym ustawieniem jednego progu jasności. W dokumentach archiwalnych tło może być nierówne, pożółkłe, poplamione albo prześwietlone. Dlatego skuteczny algorytm powinien uwzględniać lokalne zmiany jasności.
Dobrze przeprowadzona binaryzacja:
- usuwa znaczną część zabrudzeń,
- ogranicza wpływ nierównego oświetlenia,
- zachowuje kształt liter,
- poprawia wykrywanie wierszy,
- zmniejsza liczbę błędnie interpretowanych elementów.
Zbyt agresywna binaryzacja może jednak usuwać cienkie kreski, kropki nad literami i znaki interpunkcyjne. Zbyt łagodna pozostawia natomiast plamy i artefakty, które mogą zostać rozpoznane jako znaki.
Analiza układu strony
Po przygotowaniu obrazu konieczne jest zrozumienie jego struktury. Program musi ustalić, gdzie znajdują się akapity, kolumny, marginesy, nagłówki, ilustracje oraz wiersze tekstu.
W klasycznym potoku OCRopy wykorzystywano do tego polecenie:
ocropus-gpageseg
Program analizował stronę i dzielił ją na osobne linie tekstowe. Każda wykryta linia mogła zostać zapisana jako odrębny obraz i przekazana do modułu rozpoznającego.
Poprawna segmentacja strony jest niezbędna, ponieważ silnik rozpoznawania wierszy zakłada zwykle, że otrzymuje obraz zawierający pojedynczy ciąg tekstowy. Jeśli fragment obejmuje dwa wiersze, część ilustracji albo sąsiednią kolumnę, wynik może stać się całkowicie nieczytelny.
Problemy z wieloma kolumnami
Dokumenty wielokolumnowe są trudniejsze niż zwykłe strony książkowe. System musi prawidłowo ustalić kolejność czytania i nie może połączyć fragmentów pochodzących z różnych kolumn.
Problematyczne bywają także:
- tabele,
- przypisy,
- tekst obiegający ilustrację,
- pionowe nagłówki,
- numery stron,
- ozdobne inicjały,
- marginalia,
- elementy graficzne.
W takich przypadkach automatyczna analiza układu może wymagać ręcznej korekty lub zastosowania bardziej nowoczesnego modelu segmentacyjnego.
Rozpoznawanie całych wierszy tekstu
Jedną z najważniejszych cech OCRopy było rozpoznawanie całych linii tekstu zamiast niezależnej klasyfikacji pojedynczych znaków.
W starszych systemach OCR obraz był często dzielony na osobne litery. Każdy znak należało zlokalizować i sklasyfikować. Problem pojawiał się wtedy, gdy litery dotykały się, były uszkodzone albo miały nieregularne odstępy.
OCRopy wykorzystywał podejście oparte na sieciach LSTM, które analizowały sekwencję cech obrazu i generowały ciąg znaków. Dzięki temu nie było konieczne wcześniejsze dokładne rozcinanie wiersza na pojedyncze litery.
Rozpoznawanie realizowało między innymi polecenie:
ocropus-rpred
Program otrzymywał obrazy linii i model językowo-graficzny zapisany w odpowiednim formacie. Następnie generował przewidywany tekst dla każdego wiersza.
Czym są sieci LSTM w OCRopus?
LSTM, czyli Long Short-Term Memory, jest odmianą rekurencyjnych sieci neuronowych zaprojektowaną do przetwarzania sekwencji.
W przypadku OCR sekwencją jest obraz czytany od lewej do prawej albo od prawej do lewej. Sieć analizuje kolejne fragmenty wiersza i uwzględnia kontekst wcześniejszych elementów.
Takie podejście jest korzystne, ponieważ wygląd znaku może zależeć od jego sąsiedztwa. Litera znajdująca się pomiędzy innymi znakami bywa łatwiejsza do rozpoznania niż ten sam symbol oglądany całkowicie niezależnie.
Sieci LSTM dobrze radziły sobie z:
- różnymi odstępami między literami,
- częściowo połączonymi znakami,
- zmienną szerokością liter,
- uszkodzeniami druku,
- nierówną linią bazową,
- tekstem historycznym,
- fontami trudnymi do jednoznacznego segmentowania.
Współczesne systemy OCR często wykorzystują nowsze architektury, w tym transformery i modele uwagi, jednak zastosowanie LSTM w OCRopy było ważnym krokiem w rozwoju rozpoznawania tekstu.
Normalizacja wierszy
Przed przekazaniem obrazu wiersza do sieci OCRopy wykonywał jego normalizację. Celem było ujednolicenie wysokości znaków, wyrównanie linii bazowej oraz ograniczenie wpływu lokalnych zniekształceń.
Normalizacja miała poprawić stabilność rozpoznawania, ponieważ model otrzymywał dane w podobnej formie niezależnie od drobnych różnic w skanie.
Oficjalny opis OCRopus 2 wskazuje właśnie solidną normalizację wierszy jako jedną z charakterystycznych funkcji wersji OCRopy. Późniejszy OCRopus 4 miał natomiast eliminować potrzebę takiego osobnego etapu i rozpoznawać tekst bezpośrednio z obrazów w skali szarości.
Format hOCR
OCRopus mógł generować wyniki w formacie hOCR. Jest to format oparty na HTML, pozwalający zapisać nie tylko treść dokumentu, ale również informacje o jego strukturze i położeniu elementów.
W pliku hOCR można zapisać między innymi:
- tekst,
- współrzędne wierszy,
- położenie słów,
- granice akapitów,
- układ strony,
- informacje o pewności rozpoznania,
- kolejność czytania.
Dzięki temu możliwe jest późniejsze połączenie tekstu z obrazem strony i utworzenie przeszukiwalnego pliku PDF. Użytkownik widzi wówczas oryginalny skan, ale pod warstwą graficzną znajduje się niewidoczny tekst, który można zaznaczać lub wyszukiwać.
Za przygotowanie wyjścia hOCR w klasycznym potoku odpowiadało polecenie:
ocropus-hocr
Dokumentacja OCRopy pokazuje czterostopniowy przykład obejmujący binaryzację, segmentację strony, rozpoznawanie linii oraz wygenerowanie pliku HTML.
Przykładowy przepływ pracy OCRopus
Klasyczny schemat przetwarzania jednej lub wielu stron mógł wyglądać następująco:
- zeskanowanie dokumentu,
- zapis stron jako obrazy PNG,
- binaryzacja za pomocą
ocropus-nlbin, - analiza strony przy użyciu
ocropus-gpageseg, - rozpoznanie linii za pomocą
ocropus-rpred, - wygenerowanie pliku hOCR,
- przekształcenie wyniku do PDF lub tekstu,
- ręczna korekta błędów.
Repozytorium projektu zawierało narzędzia nie tylko do rozpoznawania, ale również do trenowania, edycji danych wzorcowych, obliczania poziomu błędów oraz analizowania pomyłek modelu.
Instalacja OCRopus
Instalacja starszej wersji OCRopy może być obecnie trudna. Projekt powstawał dla środowiska programistycznego, które znacznie różni się od współczesnych systemów.
Dokumentacja zawierała instrukcje oparte między innymi na:
- systemach Linux,
- Pythonie 2.7,
- starszych wydaniach NumPy i SciPy,
- ręcznym pobieraniu modeli,
- instalacji za pomocą
setup.py, - wirtualnych środowiskach lub Condzie.
Repozytorium OCRopy podawało na przykład konfigurację środowiska Conda wykorzystującego Python 2.7. Tak stara wersja języka nie jest już wspierana, co oznacza problemy ze zgodnością, bezpieczeństwem i instalacją bibliotek.
Dlaczego instalacja może się nie udać?
Najczęstsze problemy to:
- brak zgodnych wersji bibliotek,
- nieobsługiwany Python 2,
- nieaktualne adresy modeli,
- błędy kompilacji,
- różnice pomiędzy dystrybucjami Linuksa,
- brak aktywnie utrzymywanej dokumentacji,
- przestarzałe skrypty instalacyjne,
- problemy z obsługą kart graficznych.
Z tego powodu uruchamianie OCRopy bezpośrednio na współczesnym systemie może wymagać użycia kontenera, maszyny wirtualnej albo środowiska z zamrożonymi, starszymi zależnościami.
Czy OCRopus jest nadal rozwijany?
Odpowiedź zależy od tego, którą część rodziny projektów OCRopus mamy na myśli.
Najbardziej znane repozytorium OCRopy zostało zarchiwizowane 27 kwietnia 2026 roku. Repozytorium jest dostępne w trybie tylko do odczytu, co oznacza, że nie przyjmuje standardowych zmian i nie powinno być traktowane jako aktywnie utrzymywany projekt produkcyjny.
Oficjalna strona nadal opisuje różne generacje OCRopus, w tym OCRopus 4, ale użytkownik planujący nowe wdrożenie powinien dokładnie sprawdzić aktualny stan każdego repozytorium, datę ostatnich zmian, zgodność z bibliotekami oraz aktywność zespołu.
W przypadku długoterminowego projektu produkcyjnego użycie nieutrzymywanego oprogramowania wiąże się z ryzykiem:
- luk bezpieczeństwa,
- problemów z instalacją,
- braku poprawek,
- niezgodności z systemem operacyjnym,
- trudności z zatrudnieniem specjalistów,
- braku wsparcia dla nowych formatów,
- konieczności samodzielnego utrzymywania kodu.
OCRopus a OCRopy
Nazwy OCRopus i OCRopy są często używane zamiennie, ale warto je rozróżnić.
OCRopus oznacza całą rodzinę projektów i kolejne generacje systemu.
OCRopy lub ocropy odnosi się przede wszystkim do Pythonowej wersji OCRopus 2, która przez wiele lat była najbardziej rozpoznawalną implementacją.
W praktyce wiele poradników mówiących o „instalacji OCRopus” dotyczy właśnie OCRopy i poleceń rozpoczynających się od przedrostka ocropus-.
OCRopus a Tesseract
Tesseract jest jednym z najbardziej znanych otwartych silników OCR. OCRopus i Tesseract mają podobny cel, ale różnią się filozofią użytkowania.
Łatwość zastosowania
Tesseract może być stosunkowo łatwo uruchomiony pojedynczym poleceniem. Otrzymuje obraz i generuje rozpoznany tekst lub dokument wyjściowy.
OCRopy wymagał zwykle przygotowania potoku obejmującego osobne etapy binaryzacji, segmentacji i rozpoznawania.
Z punktu widzenia początkującego użytkownika Tesseract jest zatem zazwyczaj prostszy.
Modułowość
OCRopus został zaprojektowany z silnym naciskiem na modułowość. Poszczególne komponenty można było wymieniać, analizować i rozwijać osobno.
Było to szczególnie cenne dla badaczy oraz zespołów eksperymentujących z analizą dokumentów.
Trenowanie modeli
Oba systemy umożliwiają trenowanie własnych modeli, jednak procedury, formaty i wymagania są odmienne. OCRopy zdobył popularność w środowiskach zajmujących się historycznymi drukami ze względu na możliwość trenowania modeli całych wierszy.
Zależności pomiędzy projektami
Historia obu systemów częściowo się łączy. Oficjalna strona OCRopus podaje, że Tesseract zawiera mocno zmodyfikowany port w języku C++ mechanizmu rozpoznawania linii wywodzącego się z OCRopy.
Nie oznacza to jednak, że współczesny Tesseract jest jedynie wersją OCRopus. Są to odrębne projekty z własną architekturą, społecznością i sposobem rozwoju.
OCRopus a Kraken
Kraken to projekt wywodzący się z OCRopy, przeznaczony w dużej mierze do rozpoznawania dokumentów historycznych i materiałów zapisanych różnymi systemami pisma.
Według oficjalnej strony OCRopus Kraken jest systemem pochodnym zoptymalizowanym pod kątem materiałów historycznych oraz alfabetów innych niż łaciński.
Kraken może być lepszym wyborem, gdy projekt obejmuje:
- starodruki,
- rękopisy,
- pisma od prawej do lewej,
- nietypowe alfabety,
- zbiory biblioteczne,
- dokumenty wymagające własnych modeli.
Współczesne wdrożenie powinno być jednak poprzedzone porównaniem aktualnych wersji, dokumentacji i potrzeb konkretnego zbioru.
OCRopus a Calamari OCR
Calamari OCR również wyrósł z rozwiązań OCRopy i Kraken. Skupia się na rozpoznawaniu linii tekstowych za pomocą sieci neuronowych i może wykorzystywać kilka modeli do poprawiania stabilności wyników.
Oficjalna strona OCRopus wymienia Calamari jako powiązany system rozpoznawania linii oparty na OCRopy i Kraken.
Calamari był często rozważany w projektach digitalizacji dokumentów historycznych, zwłaszcza gdy zespół dysponował własnymi danymi treningowymi.
OCRopus a PaddleOCR i inne współczesne narzędzia
Współczesne frameworki OCR często łączą wykrywanie tekstu, rozpoznawanie, analizę kierunku pisma oraz przetwarzanie dokumentów w jednym środowisku.
Przykładami są:
- PaddleOCR,
- EasyOCR,
- docTR,
- Tesseract,
- Kraken,
- Calamari,
- rozwiązania chmurowe Google, Microsoft i Amazon.
Nowsze systemy mogą zapewniać:
- aktywnie utrzymywane biblioteki,
- gotowe modele wielojęzyczne,
- łatwiejszą instalację,
- wykorzystanie GPU,
- wykrywanie tekstu na zdjęciach,
- analizę formularzy i tabel,
- integrację z Pythonem,
- interfejsy API,
- modele transformatorowe.
OCRopus pozostaje jednak istotnym punktem odniesienia. Jego architektura i podejście do rozpoznawania wierszy wywarły wpływ na wiele kolejnych projektów.
Trenowanie własnego modelu OCRopus
Jedną z najważniejszych możliwości OCRopy było trenowanie modelu na własnych danych.
Takie rozwiązanie miało sens, gdy gotowy model nie radził sobie z:
- nietypowym krojem pisma,
- starym drukiem,
- niestandardowym alfabetem,
- językiem zawierającym rzadkie znaki,
- słabą jakością skanów,
- specyficznym rodzajem dokumentów.
Dane treningowe
Typowy zbiór treningowy składał się z par:
- obrazu pojedynczego wiersza,
- pliku tekstowego zawierającego jego poprawną transkrypcję.
Obraz i transkrypcja musiały być ze sobą dokładnie zgodne. Jeden brakujący znak, pominięty odstęp lub błędnie przepisana litera obniżały jakość danych.
Repozytorium zalecało przechowywanie materiałów w postaci par plików graficznych oraz plików tekstowych, aby można było wykorzystać je do ponownego trenowania modeli w przyszłości.
Jakość transkrypcji
Model uczy się dokładnie tego, co znajduje się w danych wzorcowych. Jeśli transkrypcje są niespójne, sieć również będzie generowała niespójne wyniki.
Trzeba wcześniej ustalić zasady dotyczące:
- zachowania oryginalnej pisowni,
- modernizowania ortografii,
- zapisu znaków specjalnych,
- ligatur,
- myślników,
- podziałów wyrazów,
- wielkich liter,
- spacji,
- uszkodzonych fragmentów.
W projektach naukowych warto stworzyć formalną instrukcję transkrypcji i stosować ją we wszystkich danych.
Dane syntetyczne
OCRopy zawierał również narzędzie ocropus-linegen, które mogło generować sztuczne obrazy tekstu na podstawie pliku tekstowego i wybranego fontu. Dokumentacja wskazywała, że wygenerowane w ten sposób dane można było wykorzystać do trenowania systemu.
Dane syntetyczne pozwalają szybko zwiększyć wielkość zbioru, ale zwykle nie odwzorowują wszystkich cech rzeczywistych skanów. Dlatego najlepsze efekty daje łączenie materiałów syntetycznych z prawdziwymi obrazami dokumentów.
Ocena jakości OCR
Samo uruchomienie systemu nie wystarcza. Trzeba również zmierzyć jakość wyników.
Najczęściej stosowanymi miarami są:
CER
CER, czyli Character Error Rate, oznacza współczynnik błędów znakowych. Uwzględnia:
- brakujące znaki,
- dodatkowe znaki,
- zamiany jednego znaku na inny.
Im niższy CER, tym lepszy wynik.
WER
WER, czyli Word Error Rate, mierzy błędy na poziomie całych słów. Jest bardziej wymagający, ponieważ jeden błędny znak może spowodować uznanie całego wyrazu za niepoprawny.
Dokładność układu
W projektach obejmujących gazety, tabele lub wielokolumnowe strony należy mierzyć również poprawność segmentacji i kolejności czytania.
Tekst może być rozpoznany bez większych błędów znakowych, ale zapisany w niewłaściwej kolejności. W takim przypadku dokument nadal może być mało użyteczny.
Typowe błędy OCRopus
System może mylić znaki o podobnym kształcie, na przykład:
l,Ioraz1,Ooraz0,rnorazm,coraze,- przecinek i kropkę,
- dywiz i pauzę,
- znaki diakrytyczne.
Błędy mogą również dotyczyć:
- pomijania spacji,
- dodawania przypadkowych symboli,
- łączenia dwóch wierszy,
- gubienia fragmentów na marginesach,
- niewłaściwego rozpoznawania kapitalików,
- indeksów górnych i dolnych,
- fontów maszynowych,
- tekstu zapisanego wyłącznie wielkimi literami.
Dokumentacja OCRopy wskazywała, że dostępne modele miały trudności między innymi z tekstem zapisanym samymi wielkimi literami, niektórymi symbolami specjalnymi, fontami maszynowymi oraz indeksami górnymi i dolnymi.
Jak poprawić wyniki OCRopus?
Największą poprawę jakości można osiągnąć nie przez zmianę pojedynczego parametru, lecz przez optymalizację całego potoku.
Lepszy materiał wejściowy
Należy skanować dokumenty w odpowiedniej rozdzielczości i unikać kompresji niszczącej szczegóły liter. Zdjęcie wykonane telefonem powinno być ostre, równomiernie oświetlone i zrobione możliwie prostopadle do strony.
Dostosowanie binaryzacji
Dla pożółkłych dokumentów lub stron z przebijającym drukiem mogą być potrzebne inne parametry niż dla współczesnej, czystej książki.
Poprawa segmentacji
Jeśli system źle wykrywa wiersze, nawet idealny model tekstowy nie pomoże. Czasami warto ręcznie oznaczyć obszary tekstowe albo zastosować zewnętrzne narzędzie do segmentacji.
Własny model
Model wytrenowany na dokumentach podobnych do zbioru docelowego może osiągać znacznie lepsze rezultaty niż model ogólny.
Korekta po rozpoznaniu
Tekst można przetwarzać za pomocą słowników, reguł językowych i modeli korekcyjnych. Trzeba jednak zachować ostrożność w przypadku materiałów historycznych, ponieważ automatyczna korekta może zmieniać oryginalną pisownię.
Zastosowanie OCRopus w digitalizacji archiwów
W archiwach i bibliotekach OCR jest używany nie tylko do tworzenia tekstu do czytania. Jego najważniejszą funkcją może być umożliwienie przeszukiwania milionów stron.
Po rozpoznaniu treści użytkownik może wyszukiwać:
- nazwiska,
- miejscowości,
- daty,
- nazwy instytucji,
- wydarzenia,
- terminy branżowe,
- fragmenty cytatów.
Nawet niedoskonały OCR może więc znacząco zwiększyć dostępność zbiorów.
OCRopus był atrakcyjny dla instytucji cyfryzujących dokumenty ze względu na otwarty kod, możliwość modyfikacji oraz trenowanie modeli dla konkretnych kolekcji.
OCRopus w humanistyce cyfrowej
Humanistyka cyfrowa wykorzystuje narzędzia informatyczne do badania języka, literatury, historii i kultury.
Po przekształceniu skanów w tekst możliwe jest:
- liczenie częstotliwości słów,
- analiza zmian językowych,
- wyszukiwanie nazw własnych,
- badanie tematów pojawiających się w prasie,
- porównywanie wydań książek,
- tworzenie korpusów historycznych,
- automatyczne rozpoznawanie osób i miejsc.
Trzeba jednak pamiętać, że błędy OCR mogą wpływać na wyniki badań. Dlatego w projektach naukowych należy dokumentować jakość rozpoznania i przeprowadzać kontrolę reprezentatywnej próbki.
Zalety OCRopus
Najważniejsze zalety projektu obejmują:
- otwarty kod źródłowy,
- modułową architekturę,
- możliwość trenowania własnych modeli,
- rozpoznawanie całych linii,
- przydatność w dokumentach historycznych,
- dostęp do narzędzi analitycznych,
- możliwość modyfikowania poszczególnych etapów,
- wpływ na rozwój kolejnych systemów OCR.
OCRopus był szczególnie wartościowy dla użytkowników, którzy chcieli zrozumieć cały proces rozpoznawania dokumentu, a nie jedynie korzystać z zamkniętej usługi.
Wady i ograniczenia OCRopus
Do najważniejszych ograniczeń należą:
- trudna instalacja starszych wersji,
- zależność od nieaktualnego Pythona,
- brak prostego interfejsu graficznego,
- konieczność samodzielnego budowania potoku,
- ograniczone gotowe modele,
- potrzeba przygotowania danych treningowych,
- problemy z nietypowym układem stron,
- zarchiwizowanie popularnego repozytorium,
- brak gwarancji długoterminowego wsparcia.
OCRopus może być więc wartościowym narzędziem badawczym i źródłem wiedzy, ale nie zawsze jest najlepszym wyborem dla nowego projektu komercyjnego.
Dla kogo OCRopus może być interesujący?
OCRopus może zainteresować przede wszystkim:
- badaczy historii OCR,
- programistów zajmujących się analizą dokumentów,
- specjalistów digitalizujących archiwa,
- zespoły tworzące modele dla starych druków,
- studentów uczenia maszynowego,
- osoby badające sieci LSTM,
- twórców własnych systemów rozpoznawania tekstu,
- instytucje posiadające starsze wdrożenia OCRopy.
Początkujący użytkownik, który chce jedynie odczytać tekst z kilku skanów, prawdopodobnie łatwiej osiągnie cel za pomocą aktywnie utrzymywanego programu OCR lub aplikacji z interfejsem graficznym.
Czy warto używać OCRopus obecnie?
OCRopus warto rozważyć, gdy:
- istniejący projekt już korzysta z OCRopy,
- zespół posiada zgodne modele,
- konieczne jest odtworzenie starszego środowiska,
- celem jest analiza historycznych technologii OCR,
- projekt badawczy wymaga porównania różnych architektur,
- potrzebne są określone narzędzia dostępne w repozytorium.
Do nowego systemu produkcyjnego lepiej zazwyczaj wybrać rozwiązanie aktywnie rozwijane, wspierające współczesne wersje Pythona, kontenery, akcelerację GPU i aktualne modele.
Decyzja powinna uwzględniać:
- jakość na docelowych dokumentach,
- koszt trenowania,
- dostępność specjalistów,
- bezpieczeństwo,
- łatwość wdrożenia,
- licencję,
- możliwość dalszego utrzymywania,
- obsługiwane języki,
- wymagane formaty wynikowe.
OCRopus jako ważny etap rozwoju technologii OCR
Znaczenie OCRopus nie ogranicza się do tego, czy obecnie da się łatwo zainstalować jego starszą wersję. Projekt był ważnym etapem przejścia od klasycznych systemów dzielących tekst na pojedyncze znaki do sieci rozpoznających całe wiersze.
Wprowadzał praktyczne wykorzystanie:
- rekurencyjnych sieci neuronowych,
- modeli LSTM,
- normalizacji linii tekstu,
- modularnych potoków dokumentowych,
- trenowania na danych wzorcowych,
- otwartych formatów wynikowych,
- narzędzi do analizy błędów.
Wiele współczesnych systemów działa inaczej i wykorzystuje nowsze architektury, ale ich rozwój opiera się na doświadczeniach zdobytych przez wcześniejsze projekty.
Bezpieczeństwo i utrzymanie starszej instalacji
Uruchamianie zarchiwizowanego programu wymaga szczególnej ostrożności. Nie należy instalować starych zależności bezpośrednio w głównym systemie, zwłaszcza jeśli środowisko przetwarza dokumenty pochodzące z nieznanych źródeł.
Bezpieczniejsze rozwiązania to:
- kontener odizolowany od systemu,
- maszyna wirtualna,
- środowisko bez dostępu do internetu,
- ograniczone uprawnienia użytkownika,
- skanowanie plików wejściowych,
- regularne kopie danych,
- oddzielenie procesu OCR od pozostałej infrastruktury.
W organizacji należy również ustalić, kto odpowiada za utrzymywanie kodu i poprawianie ewentualnych problemów, skoro oryginalne repozytorium nie jest już aktywnie rozwijane.
Licencja OCRopus
Repozytorium OCRopy udostępniono na licencji Apache 2.0. Jest to liberalna licencja otwartego oprogramowania, która pozwala między innymi używać, modyfikować i rozpowszechniać kod pod warunkiem spełnienia jej wymagań. Informacja o licencji Apache 2.0 znajduje się bezpośrednio w zarchiwizowanym repozytorium projektu.
Przed komercyjnym wykorzystaniem należy jednak sprawdzić nie tylko licencję samego kodu, ale również:
- licencje modeli,
- licencje danych treningowych,
- prawa do skanowanych dokumentów,
- zależności programistyczne,
- fonty użyte do tworzenia danych syntetycznych.
Otwarta licencja programu nie oznacza automatycznie, że wszystkie pobrane modele i materiały można wykorzystywać bez ograniczeń.
Przyszłość rozpoznawania dokumentów
Współczesne systemy OCR coraz częściej wykraczają poza zwykłe odczytywanie znaków. Analizują strukturę dokumentu, tabele, formularze, podpisy, pola danych, relacje pomiędzy elementami i znaczenie treści.
Nowoczesny system może jednocześnie:
- wykrywać obszary tekstowe,
- rozpoznawać litery,
- ustalać kolejność czytania,
- klasyfikować dokument,
- wyodrębniać nazwy i daty,
- analizować tabelę,
- przypisywać wartości do konkretnych pól,
- generować ustrukturyzowany plik JSON.
OCRopus koncentrował się głównie na analizie obrazu dokumentu i rozpoznawaniu tekstu, ale jego modularna filozofia dobrze wpisuje się w dzisiejsze podejście do budowania całych potoków przetwarzania informacji.
OCRopus jako narzędzie edukacyjne
Mimo ograniczeń OCRopus może nadal pełnić funkcję edukacyjną. Kod i dokumentacja pozwalają zrozumieć, że OCR nie jest pojedynczym algorytmem, lecz połączeniem wielu operacji.
Analizując projekt, można nauczyć się:
- czym jest binaryzacja,
- jak wykrywa się wiersze,
- dlaczego segmentacja wpływa na wynik,
- jak przygotować dane treningowe,
- jak działa rozpoznawanie sekwencji,
- jak obliczać błędy znakowe,
- dlaczego modele wymagają dopasowania do domeny,
- jak zapisywać strukturę strony.
Dla studenta informatyki lub uczenia maszynowego projekt może być wartościowym przykładem praktycznej ewolucji systemu rozwijanego przez wiele lat.
Najważniejsze wnioski dotyczące OCRopus
OCRopus to nie pojedyncza aplikacja, lecz rodzina otwartych narzędzi do rozpoznawania tekstu i analizy dokumentów. Najbardziej znana wersja, OCRopy, wykorzystywała język Python, normalizację wierszy oraz sieci LSTM.
Jej działanie opierało się na kilku etapach:
- binaryzacji obrazu,
- analizie układu strony,
- wydzielaniu wierszy,
- rozpoznawaniu tekstu,
- generowaniu wyników hOCR.
System oferował dużą swobodę, ale wymagał również wiedzy technicznej. Nie był gotową aplikacją dla osób oczekujących jednego przycisku i natychmiastowego wyniku.
Obecnie największe znaczenie OCRopus polega na jego wpływie na rozwój otwartych technologii OCR. Popularne repozytorium OCRopy jest zarchiwizowane, dlatego uruchamianie go w nowych wdrożeniach wymaga ostrożności i świadomego zarządzania starymi zależnościami.
OCRopus pozostaje ważnym elementem historii rozpoznawania dokumentów, źródłem rozwiązań wykorzystywanych w projektach pochodnych oraz interesującym przykładem połączenia analizy obrazu, sieci neuronowych i modularnego przetwarzania tekstu.

