Jak wykonać OCR z wiersza poleceń Linuksa za pomocą Tesseract

Możesz wyodrębnić tekst z obrazów w wierszu poleceń systemu Linux za pomocą silnika Tesseract OCR. Jest szybki, dokładny i działa w około 100 językach. Oto jak go używać.

Optyczne rozpoznawanie znaków

Optyczne rozpoznawanie znaków (OCR) to umiejętność przeglądania i znajdowania słów na obrazie, a następnie wyodrębniania ich jako edytowalnego tekstu. To proste zadanie dla ludzi jest bardzo trudne dla komputerów. Wczesne wysiłki były co najmniej niezgrabne. Komputery były często zdezorientowane, jeśli krój pisma lub rozmiar nie odpowiadał oprogramowaniu OCR.

Niemniej pionierzy w tej dziedzinie nadal cieszyli się wielkim szacunkiem. Jeśli zgubisz elektroniczną kopię dokumentu, ale nadal masz wersję drukowaną, OCR może odtworzyć elektroniczną, edytowalną wersję. Nawet jeśli wyniki nie były w 100 procentach dokładne, to i tak była świetna oszczędność czasu.

Po ręcznym posprzątaniu odzyskasz dokument. Ludzie wybaczali popełnione przez niego błędy, ponieważ rozumieli złożoność zadania stojącego przed pakietem OCR. Poza tym było to lepsze niż przepisywanie całego dokumentu.

Od tego czasu sytuacja znacznie się poprawiła. Aplikacja Tesseract OCR, której autorem jest Hewlett Packard, rozpoczęła się w latach 80. jako aplikacja komercyjna. Został otwarty w 2005 roku, a teraz jest obsługiwany przez Google. Posiada funkcje wielojęzyczne, jest uważany za jeden z najdokładniejszych dostępnych systemów OCR i można go używać za darmo.

Instalowanie Tesseract OCR

Aby zainstalować Tesseract OCR na Ubuntu, użyj tego polecenia:

sudo apt-get install tesseract-ocr

sudo apt zainstaluj tesseract-ocr w oknie terminala.

W Fedorze polecenie to:

sudo dnf install tesseract

sudo dnf zainstaluj tesseract w oknie terminala.

Na Manjaro musisz wpisać:

sudo pacman -Syu tesseract

sudo pacman -Syu tesseract w oknie terminala.

Korzystanie z Tesseract OCR

Zamierzamy postawić zestaw wyzwań przed Tesseract OCR. Nasz pierwszy obraz, który zawiera tekst, jest wyciągiem z punktu 63 preambuły Ogólne przepisy o ochronie danych. Zobaczmy, czy OCR może to przeczytać (i nie zasnąć).

wyciąg z motywu 63 RODO

To trudny obraz, ponieważ każde zdanie zaczyna się słabym numerem w indeksie górnym, co jest typowe w dokumentach legislacyjnych.

Musimy podać komendę tesseract kilka informacji, w tym:

Nazwa pliku obrazu, który ma zostać przetworzony.
Nazwa pliku tekstowego, który utworzy w celu przechowywania wyodrębnionego tekstu. Nie musimy podawać rozszerzenia pliku (zawsze będzie to .txt). Jeśli już istnieje plik o tej samej nazwie, zostanie nadpisany.
Możemy użyć opcji –dpi, aby powiedzieć tesseract, co to jest punktów na cal (dpi) rozdzielczość obrazu to. Jeśli nie podamy wartości dpi, tesseract spróbuje to rozgryźć.

Nasz plik obrazu nosi nazwę „recital-63.png”, a jego rozdzielczość wynosi 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

tesseract recital-63.png recital --dpi 150 w oknie terminala.

Wyniki są bardzo dobre. Jedynym problemem są indeksy górne – były zbyt blade, aby można je było poprawnie odczytać. Aby uzyskać dobre rezultaty, niezbędna jest dobra jakość obrazu.

Wyciąg z motywu 63.

tesseract zinterpretował liczby w indeksie górnym jako cudzysłowy („) i symbole stopni (°), ale rzeczywisty tekst został wyodrębniony idealnie (prawa strona obrazu musiała zostać przycięta, aby pasowała tutaj).

Ostatni znak to bajt z wartością szesnastkową 0x0C, która jest powrotem karetki.

Poniżej znajduje się inny obraz z tekstem w różnych rozmiarach, pogrubionym i kursywą.

Obraz z tekstem pogrubionym i kursywą o różnych rozmiarach.

Nazwa tego pliku to „bold-italic.png”. Chcemy utworzyć plik tekstowy o nazwie „bold.txt”, więc nasze polecenie brzmi:

tesseract bold-italic.png bold --dpi 150

tesseract bold-italic.png pogrubiony --dpi 150 w oknie terminala.

Ten nie sprawiał żadnych problemów, a tekst został wyodrębniony idealnie.

wyodrębniono tekst z bold-italic.png.

Używanie różnych języków

Obsługa Tesseract OCR około 100 języków. Aby użyć języka, musisz go najpierw zainstalować. Po znalezieniu na liście języka, którego chcesz używać, zanotuj jego skrót. Zamierzamy zainstalować obsługę języka walijskiego. Jego skrótem jest „cym”, co jest skrótem od „Cymru”, co oznacza walijski.

Pakiet instalacyjny nosi nazwę „tesseract-ocr-”, a na końcu znajduje się skrót języka. Aby zainstalować plik języka walijskiego w Ubuntu, użyjemy:

sudo apt-get install tesseract-ocr-cym

sudo apt-get install tesseract-ocr-cym w oknie terminala.

Obrazek z tekstem znajduje się poniżej. To pierwsza zwrotka walijskiego hymnu narodowego.

obraz zawierający tekst pierwszej zwrotki walijskiego hymnu narodowego.

Zobaczmy, czy Tesseract OCR sprosta wyzwaniu. Użyjemy opcji -l (język), aby umożliwić tesseractowi znać język, w którym chcemy pracować:

tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150

tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150 w oknie terminala.

tesseract radzi sobie doskonale, jak pokazano w wyodrębnionym tekście poniżej. Da iawn, Tesseract OCR.

Wyodrębniony tekst walijski.

Jeśli dokument zawiera dwa lub więcej języków (na przykład słownik z walijskiego na angielski), możesz użyć znaku plus (+), aby nakazać tesseractowi dodanie kolejnego języka, na przykład:

tesseract image.png textfile -l eng+cym+fra

Korzystanie z Tesseract OCR z plikami PDF

Polecenie tesseract zostało zaprojektowane do pracy z plikami graficznymi, ale nie może czytać plików PDF. Jeśli jednak chcesz wyodrębnić tekst z pliku PDF, możesz najpierw użyć innego narzędzia do wygenerowania zestawu obrazów. Pojedynczy obraz będzie reprezentował jedną stronę pliku PDF.

Potrzebne narzędzie pdftppm powinien być już zainstalowany na komputerze z systemem Linux. Plik PDF, którego użyjemy w naszym przykładzie, to kopia przełomowego artykułu Alana Turinga na temat sztucznej inteligencji „Computing Machinery and Intelligence”.

PDF strony tytułowej

Używamy opcji -png, aby określić, że chcemy utworzyć pliki PNG. Nazwa naszego pliku PDF to „turing.pdf”. Nazwiemy nasze pliki graficzne „turing-01.png”, „turing-02.png” itd.:

pdftoppm -png turing.pdf turing

pdftoppm -png turing.pdf turing w oknie terminala.

Aby uruchomić tesseract na każdym pliku obrazu za pomocą jednego polecenia, musimy użyć pliku dla pętli. Dla każdego z naszych 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;

dla mnie w turingu - ??. png;  zrobić tesseract

Aby połączyć wszystkie pliki tekstowe w jeden, możemy użyć cat:

cat text-turing* > complete.txt

cat text-turing *> complete.txt w oknie terminala. ”  width = ”646 ″ height =” 57 ″ onload = ”pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”  onerror = ”this.onerror = null; pagespeed.lazyLoadImages.loadIfVisibleAndMaybeBeacon (this);”> </p>
<p> Jak to się stało?  Bardzo dobrze, jak widać poniżej.  Jednak pierwsza strona wygląda na dość wymagającą.  Ma różne style i rozmiary tekstu oraz dekoracje.  Na prawej krawędzi strony znajduje się również pionowy „znak wodny”. </p>
<p> Wydruk jest jednak zbliżony do oryginału.  Oczywiście formatowanie zostało utracone, ale tekst jest poprawny. </p>
<p> <img loading =

Pionowy znak wodny został przepisany jako bełkot u dołu strony. Tekst był zbyt mały, aby mógł być dokładnie odczytany przez tesserakt, ale łatwo byłoby go znaleźć i usunąć. Najgorszym wynikiem byłyby przypadkowe znaki na końcu każdego wiersza.

Co ciekawe, pojedyncze litery na początku listy pytań i odpowiedzi na stronie drugiej zostały zignorowane. Poniżej przedstawiono sekcję z pliku PDF.

Lista pytań i odpowiedzi z pliku PDF artykułu Turinga.

Jak widać poniżej, pytania pozostają, ale „Q” i „A” na początku każdej linii zostały utracone.

Pobrany tekst ze strony pytań i odpowiedzi w pliku PDF Turing.

Diagramy również nie zostaną poprawnie przepisane. Spójrzmy, co się stanie, gdy spróbujemy wyodrębnić ten pokazany poniżej z pliku PDF Turing.

Schemat

Jak widać w naszym wyniku poniżej, znaki zostały odczytane, ale format diagramu został utracony.

Wyodrębniono tekst z diagramu w pliku PDF Turing.

Ponownie tesseract zmagał się z niewielkim rozmiarem indeksów dolnych i były one wyświetlane nieprawidłowo.

Jednak szczerze mówiąc, był to nadal dobry wynik. Nie byliśmy w stanie wydobyć prostego tekstu, ale ten przykład został celowo wybrany, ponieważ stanowił wyzwanie.

Dobre rozwiązanie, gdy jest potrzebne

OCR nie jest czymś, czego będziesz potrzebować codziennie. Jednak gdy zajdzie taka potrzeba, dobrze jest wiedzieć, że masz do dyspozycji jeden z najlepszych silników OCR.