Możesz wydobyć tekst z obrazów w terminalu systemu Linux, korzystając z silnika Tesseract OCR. Jest on szybki, precyzyjny i obsługuje około 100 języków. Oto instrukcje, jak go wykorzystać.
Optyczne rozpoznawanie znaków
Optyczne rozpoznawanie znaków (OCR) polega na analizowaniu obrazów w celu odnalezienia słów, a następnie przekształceniu ich w edytowalny tekst. Dla ludzi jest to łatwe zadanie, jednak dla komputerów stanowi duże wyzwanie. Wczesne próby były często nieudane, gdyż programy OCR miały problemy z różnymi czcionkami i rozmiarami tekstu.
Pomimo trudności, wczesne osiągnięcia w tej dziedzinie były cenione. Jeśli zgubisz elektroniczną wersję dokumentu, ale masz jego wydruk, OCR może pomóc w odtworzeniu edytowalnej wersji. Nawet przy pewnych niedokładnościach, było to znaczne ułatwienie w porównaniu do ręcznego przepisywania całego tekstu.
Obecnie technologia OCR znacznie się rozwinęła. Tesseract OCR, stworzony przez Hewlett Packard, zadebiutował w latach 80. jako oprogramowanie komercyjne, a w 2005 roku stał się projektem open-source, którym obecnie zajmuje się Google. Tesseract obsługuje wiele języków, jest jednym z najdokładniejszych dostępnych systemów OCR i można go używać bez opłat.
Instalacja Tesseract OCR
Aby zainstalować Tesseract OCR na systemie Ubuntu, użyj poniższego polecenia:
sudo apt-get install tesseract-ocr
Dla Fedorze polecenie to:
sudo dnf install tesseract
Na Manjaro polecenie to:
sudo pacman -Syu tesseract
Używanie Tesseract OCR
Zamierzamy postawić przed Tesseract OCR pewne wyzwanie. Naszym pierwszym obrazem, który zawiera tekst, jest wyciąg z pkt 63 preambuły Ogólnych przepisów o ochronie danych. Sprawdźmy, czy OCR poradzi sobie z jego odczytem.
To trudny obraz, ponieważ każde zdanie zaczyna się od słabo widocznych numerów w indeksie górnym, co jest typowe dla dokumentów prawnych.
Musimy podać Tesseractowi kilka informacji, w tym:
- nazwę pliku obrazu do przetworzenia,
- nazwę pliku tekstowego, który zostanie utworzony do przechowywania wyodrębnionych danych (nie musimy podawać rozszerzenia pliku, zawsze domyślnie będzie to .txt; jeśli plik o tej samej nazwie już istnieje, zostanie nadpisany),
- możemy użyć opcji –dpi, aby określić rozdzielczość obrazu w punktach na cal (dpi). Jeśli nie podamy wartości dpi, Tesseract spróbuje samodzielnie określić tę wartość.
Nasz plik obrazu nosi nazwę „recital-63.png” i ma rozdzielczość 150 dpi. Utworzymy z niego plik tekstowy o nazwie „recital.txt”.
Nasze polecenie wygląda następująco:
tesseract recital-63.png recital --dpi 150
Wyniki są zadowalające. Jedynym problemem były słabo widoczne indeksy górne, których Tesseract nie odczytał poprawnie. Aby uzyskać dobre rezultaty, ważna jest jakość obrazu.
Tesseract zinterpretował indeksy górne jako cudzysłowy („) i symbole stopni (°), ale reszta tekstu została wyodrębniona poprawnie (prawa strona obrazu została przycięta, aby zmieściła się tutaj).
Ostatni znak to bajt o wartości szesnastkowej 0x0C, który reprezentuje powrót karetki.
Nazwa tego pliku to „bold-italic.png”. Chcemy stworzyć plik tekstowy o nazwie „bold.txt”, więc nasze polecenie brzmi:
tesseract bold-italic.png bold --dpi 150
Tym razem proces przebiegł bez problemów, a tekst został wydobyty idealnie.
Używanie różnych języków
Tesseract OCR obsługuje około 100 języków. Aby użyć konkretnego języka, musisz go najpierw zainstalować. Po znalezieniu języka, który chcesz używać, zanotuj jego skrót. Zamierzamy zainstalować wsparcie dla języka walijskiego, którego skrót to „cym” (od „Cymru” – Walijczyk).
Paczka instalacyjna ma nazwę „tesseract-ocr-”, a na końcu znajduje się skrót języka. Aby zainstalować język walijski w Ubuntu, użyjemy:
sudo apt-get install tesseract-ocr-cym
Poniżej znajduje się obrazek z tekstem pierwszej zwrotki walijskiego hymnu narodowego.
Sprawdźmy, czy Tesseract OCR poradzi sobie z tym zadaniem. Użyjemy opcji -l (język), aby określić, w jakim języku chcemy pracować:
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
Tesseract doskonale poradził sobie z zadaniem, jak pokazuje poniższy wyodrębniony tekst. Da iawn, Tesseract OCR.
W przypadku dokumentów zawierających dwa lub więcej języków (jak w przypadku słownika walijsko-angielskiego), możesz użyć znaku plus (+) do wskazania Tesseractowi, że ma zintegrować dodatkowy język, na przykład:
tesseract image.png textfile -l eng+cym+fra
Użycie Tesseract OCR w plikach PDF
Polecenie Tesseract zostało stworzone z myślą o pracy z plikami graficznymi, więc nie jest w stanie bezpośrednio odczytać plików PDF. Jeśli chcesz wydobyć tekst z PDF-a, najpierw musisz użyć innego narzędzia do konwersji PDF na obrazy. Każdy obraz będzie reprezentował jedną stronę pliku PDF.
Narzędzie pdftoppm powinno być już zainstalowane w systemie Linux. W naszym przykładzie użyjemy pliku PDF, który zawiera znany artykuł Alana Turinga „Computing Machinery and Intelligence”.
Użyjemy opcji -png, aby wskazać, że chcemy utworzyć pliki PNG. Nasz plik PDF nosi nazwę „turing.pdf”, a utworzone pliki graficzne będą nosić nazwy „turing-01.png”, „turing-02.png” itd.:
pdftoppm -png turing.pdf turing
Aby uruchomić Tesseract na każdym z plików obrazów za pomocą jednego polecenia, musimy użyć pętli for. Dla każdego z plików „turing-nn.png” uruchamiamy Tesseract i tworzymy plik tekstowy o nazwie „text-” plus „turing-nn” jako część nazwy pliku obrazu:
for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;
Aby połączyć wszystkie pliki tekstowe w jeden, możemy użyć polecenia cat:
cat text-turing* > complete.txt
Jak poszło? Bardzo dobrze, co pokazuje poniższy wynik. Pierwsza strona okazała się dość wymagająca z różnorodnymi stylami i rozmiarami tekstu oraz dekoracjami. Na prawej krawędzi strony znajdował się również pionowy „znak wodny”.
Mimo to, tekst jest zbliżony do oryginału. Oczywiście formatowanie zostało utracone, ale treść jest poprawna.
Pionowy znak wodny został zniekształcony na dole strony. Tekst był zbyt mały, aby Tesseract mógł go poprawnie odczytać, ale łatwo byłoby go znaleźć i usunąć. Najgorsze były przypadkowe znaki na końcu każdego wiersza.
Interesujące jest to, że pojedyncze litery na początku listy pytań i odpowiedzi na drugiej stronie zostały pominięte. Poniżej przedstawiamy sekcję z pliku PDF.
Jak widać poniżej, pytania pozostały, ale „Q” i „A” na początku każdej linii zostały utracone.
Diagramy również nie zostały poprawnie przetworzone. Sprawdźmy, co się stanie, gdy spróbujemy wyodrębnić ten pokazany poniżej z pliku PDF Turinga.
Jak widać w naszym wyniku poniżej, znaki zostały odczytane, ale format diagramu został utracony.
Ponownie Tesseract miał problem z małymi indeksami dolnymi, które zostały źle odczytane.
Mimo to, były to nadal zadowalające rezultaty. Nie udało nam się wydobyć prostego tekstu, ale ten przykład był celowo wybrany jako wyzwanie.
Przydatne narzędzie w potrzebie
OCR nie jest codzienną potrzebą, ale gdy zajdzie taka konieczność, dobrze wiedzieć, że masz do dyspozycji jeden z najlepszych silników OCR.
newsblog.pl
Maciej – redaktor, pasjonat technologii i samozwańczy pogromca błędów w systemie Windows. Zna Linuxa lepiej niż własną lodówkę, a kawa to jego główne źródło zasilania. Pisze, testuje, naprawia – i czasem nawet wyłącza i włącza ponownie. W wolnych chwilach udaje, że odpoczywa, ale i tak kończy z laptopem na kolanach.