Jak udělat OCR z příkazového řádku Linuxu pomocí Tesseract

Chcete-li z obrázků v Linuxu extrahovat text, můžete využít nástroj Tesseract OCR, který se spouští z příkazové řádky. Je rychlý, efektivní a podporuje okolo sta jazyků. V následujícím textu se dozvíte, jak ho používat.

Rozpoznávání znaků (OCR)

Optické rozpoznávání znaků (OCR) je technologie, která umožňuje analyzovat a identifikovat text na obrázku, a následně ho převést do podoby, kterou lze editovat. Pro člověka je to poměrně snadný úkol, ale pro počítače představuje značnou výzvu. První pokusy v této oblasti byly často neohrabané a nepřesné. Počítače měly problémy, pokud se použitý font, jeho velikost nebo styl lišily od toho, co software OCR očekával.

Nicméně, i přes tyto překážky, byli průkopníci OCR obdivováni. Pokud jste ztratili digitální verzi dokumentu, ale měli jste k dispozici tištěnou kopii, OCR vám mohl pomoci vytvořit digitální, editovatelnou verzi. Ačkoli výsledky nebyly stoprocentně přesné, stále to představovalo významnou úsporu času.

S trochou ruční korekce jste mohli dokument rychle obnovit. Lidé byli ochotni tolerovat chyby, protože chápali složitost celého procesu. Bylo to rozhodně lepší než přepisovat celý text ručně.

Technologie OCR se od té doby značně vylepšily. Aplikace Tesseract OCR, původně vyvinutá společností Hewlett Packard, začala v 80. letech jako komerční produkt. V roce 2005 byla uvolněna jako open-source software a v současnosti je podporována společností Google. Tesseract je známý svou přesností, podporou více jazyků a je k dispozici zcela zdarma.

Instalace Tesseract OCR

Pro instalaci Tesseract OCR v systému Ubuntu, použijte následující příkaz v terminálu:

sudo apt-get install tesseract-ocr

V systému Fedora zadáte:

sudo dnf install tesseract

V systému Manjaro použijte tento příkaz:

sudo pacman -Syu tesseract

Použití Tesseract OCR

Pro demonstraci schopností Tesseract OCR si připravíme několik testovacích obrázků. Prvním je výňatek z bodu odůvodnění 63 dokumentu Obecného nařízení o ochraně osobních údajů. Uvidíme, zda si s tím OCR poradí.

Je to poměrně obtížný obrázek, protože každá věta začíná horním indexem, což je typické pro právní dokumenty.

Při spouštění příkazu tesseract je potřeba zadat následující parametry:

  • Název obrázkového souboru, který chceme zpracovat.
  • Název textového souboru, do kterého se uloží extrahovaný text. Příponu souboru nemusíme uvádět (automaticky se vytvoří .txt). Pokud soubor se stejným názvem existuje, bude přepsán.
  • Pomocí volby `–dpi` můžeme Tesseractu sdělit rozlišení obrázku v bodech na palec (dpi). Pokud tuto hodnotu neposkytneme, Tesseract se ji pokusí zjistit sám.

Náš obrázek se jmenuje „recital-63.png“ a má rozlišení 150 dpi. Chceme z něj vytvořit textový soubor s názvem „recital.txt“.

Příkaz tedy bude vypadat následovně:

tesseract recital-63.png recital --dpi 150

Výsledky jsou velmi dobré. Jediný problém představují horní indexy, které byly příliš nevýrazné na to, aby je software správně přečetl. Pro dosažení dobrých výsledků je klíčová kvalita vstupního obrázku.

Tesseract interpretoval horní indexy jako uvozovky (“) a symboly stupňů (°), ale samotný text extrahoval bezchybně (pravá strana obrázku musela být oříznuta, aby se vešla do tohoto prostoru).

Posledním znakem je bajt s hexadecimální hodnotou 0x0C, který reprezentuje návrat vozíku.

Následuje další obrázek s textem o různé velikosti, tučným i kurzívou.

Tento soubor se jmenuje „bold-italic.png“. Chceme vytvořit textový soubor s názvem „bold.txt“, proto zadáme:

tesseract bold-italic.png bold --dpi 150

V tomto případě nebyl s extrakcí textu žádný problém, vše proběhlo perfektně.

Použití různých jazyků

Tesseract podporuje přibližně 100 jazyků. Pokud chcete používat konkrétní jazyk, musíte si ho nejprve nainstalovat. V seznamu si najděte jazyk, který potřebujete a zapamatujte si jeho zkratku. My si nainstalujeme podporu pro velštinu, jejíž zkratka je „cym“, což je odvozeno od slova „Cymru“, což je velšský výraz pro Wales.

Instalační balíček má název „tesseract-ocr-“ následovaný zkratkou jazyka. Pro instalaci velšského jazykového balíčku v Ubuntu zadáme:

sudo apt-get install tesseract-ocr-cym

Níže se nachází obrázek s textem, který obsahuje první sloku velšské národní hymny.

Uvidíme, jak si Tesseract OCR s touto výzvou poradí. Použijeme volbu `-l` (jazyk) a sdělíme Tesseractu, jaký jazyk chceme použít:

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

Tesseract si s touto úlohou skvěle poradil, jak můžete vidět v extrahovaném textu níže. Da iawn, Tesseract OCR.

Pokud váš dokument obsahuje dva nebo více jazyků (například velšsko-anglický slovník), můžete Tesseractu sdělit jazyky oddělené znaménkem plus (+), například:

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

Použití Tesseract OCR s PDF

Příkaz tesseract je primárně určen pro práci s obrázky, takže přímo s PDF soubory nepracuje. Pokud potřebujete extrahovat text z PDF dokumentu, můžete ho nejprve převést na sérii obrázků pomocí jiného nástroje. Jeden obrázek bude reprezentovat jednu stránku PDF.

Nástroj `pdftoppm`, který potřebujete, by měl být již nainstalován ve vašem Linuxovém systému. Pro náš příklad použijeme kopii klíčové studie Alana Turinga o umělé inteligenci, nazvané „Výpočetní stroje a inteligence“.

Pomocí volby `-png` určíme, že chceme generovat obrázky ve formátu PNG. Naše PDF se jmenuje „turing.pdf“. Výstupní obrázky pojmenujeme „turing-01.png“, „turing-02.png“ a tak dále:

pdftoppm -png turing.pdf turing

Chceme-li spustit tesseract na všech vygenerovaných obrázcích najednou, musíme použít cyklus for. Pro každý z našich souborů „turing-nn.png“ spustíme tesseract a vytvoříme textový soubor s názvem „text-“ plus název souboru obrázku (např. „text-turing-01.png“):

for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;

Pro sloučení všech textových souborů do jednoho můžeme použít příkaz cat:

cat text-turing* > complete.txt

Svislý vodoznak byl převeden jako řádek nesmyslných znaků v dolní části stránky. Text byl příliš malý na to, aby ho tesseract správně přečetl, ale bylo by ho snadné najít a smazat. Nejhorším výsledkem jsou zbloudilé znaky na konci každého řádku.

Je zajímavé, že jednotlivá písmena na začátku seznamu otázek a odpovědí na druhé straně byla ignorována. Část původního PDF je zobrazena níže.

Jak vidíte v extrahovaném textu, otázky zůstaly, ale „Q“ a „A“ na začátku každého řádku byly vynechány.

Diagramy také nebudou převedeny správně. Podívejme se, co se stane, když se pokusíme extrahovat níže zobrazený diagram z Turingova PDF.

Jak můžete vidět na výstupu, znaky byly přečteny, ale formát diagramu byl zničen.

Tesseract měl opět problémy s malou velikostí indexů a ty byly zobrazeny nesprávně.

Upřímně řečeno, výsledek byl i tak dobrý. Nepodařilo se nám extrahovat text bez ztráty formátování, ale tento příklad byl záměrně zvolen pro jeho náročnost.

Dobré řešení, když ho potřebujete

OCR není něco, co budete potřebovat každý den. Nicméně, je dobré vědět, že když to bude nutné, máte k dispozici jeden z nejlepších OCR nástrojů.