Tesseractを使用してLinuxコマンドラインからOCRを実行する方法
公開: 2022-01-29Tesseract OCRエンジンを使用して、Linuxコマンドラインの画像からテキストを抽出できます。 高速で正確で、約100の言語で動作します。 使い方はこちらです。
光学式文字認識
光学式文字認識(OCR)は、画像内の単語を調べて見つけ、編集可能なテキストとして抽出する機能です。 人間にとってのこの単純な作業は、コンピューターにとって非常に困難です。 控えめに言っても、初期の努力は不格好でした。 書体やサイズがOCRソフトウェアの好みに合わない場合、コンピューターはしばしば混乱していました。
それにもかかわらず、この分野の先駆者たちは依然として高い評価を受けていました。 ドキュメントの電子コピーを紛失したが、印刷バージョンが残っている場合、OCRは電子編集可能なバージョンを再作成できます。 結果が100%正確でなかったとしても、これは時間の大幅な節約になりました。
手動で整理すれば、ドキュメントを元に戻すことができます。 人々は、OCRパッケージが直面しているタスクの複雑さを理解していたため、それが犯した間違いについて寛容でした。 さらに、ドキュメント全体を再入力するよりも優れていました。
それ以来、状況は大幅に改善されました。 ヒューレットパッカードによって書かれたTesseractOCRアプリケーションは、1980年代に商用アプリケーションとして開始されました。 2005年にオープンソースになり、現在はGoogleによってサポートされています。 多言語機能を備えており、利用可能な最も正確なOCRシステムの1つと見なされており、無料で使用できます。
TesseractOCRのインストール
UbuntuにTesseractOCRをインストールするには、次のコマンドを使用します。
sudo apt-get install tesseract-ocr
Fedoraでは、コマンドは次のとおりです。
sudo dnf install tesseract
Manjaroでは、次のように入力する必要があります。
sudo pacman -Syu tesseract
TesseractOCRの使用
TesseractOCRに一連の課題を提示します。 テキストを含む最初の画像は、一般データ保護規則のリサイタル63からの抜粋です。 OCRがこれを読み取ることができるかどうか(そして目を覚まし続けることができるかどうか)を見てみましょう。
各文が立法文書で一般的であるかすかな上付き文字番号で始まるため、これはトリッキーな画像です。
tesseract
コマンドに次のような情報を提供する必要があります。
- 処理する画像ファイルの名前。
- 抽出されたテキストを保持するために作成するテキストファイルの名前。 ファイル拡張子を指定する必要はありません(常に.txtになります)。 同じ名前のファイルがすでに存在する場合は、上書きされます。
-
--dpi
オプションを使用して、画像の1インチあたりのドット数(dpi)の解像度をtesseract
に伝えることができます。 dpi値を指定しない場合、tesseract
はそれを把握しようとします。
画像ファイルの名前は「recital-63.png」で、解像度は150dpiです。 そこから「recital.txt」というテキストファイルを作成します。
コマンドは次のようになります。
正八胞体リサイタル-63.pngリサイタル--dpi150
結果はとても良いです。 唯一の問題は上付き文字です。上付き文字は薄すぎて正しく読み取ることができませんでした。 良い結果を得るには、高品質の画像が不可欠です。
tesseract
は上付き文字を引用符(“)と度記号(°)として解釈しましたが、実際のテキストは完全に抽出されています(画像の右側はここに収まるようにトリミングする必要がありました)。
最後の文字は、16進値が0x0Cのバイトで、これはキャリッジリターンです。
以下は、太字と斜体の両方のさまざまなサイズのテキストを含む別の画像です。
このファイルの名前は「bold-italic.png」です。 「bold.txt」というテキストファイルを作成したいので、コマンドは次のとおりです。
tesseract bold-italic.png bold --dpi 150
これは問題なく、テキストは完璧に抽出されました。
異なる言語の使用
TesseractOCRは約100の言語をサポートしています。 言語を使用するには、最初にその言語をインストールする必要があります。 リストで使用したい言語を見つけたら、その略語に注意してください。 ウェールズ語のサポートをインストールします。 その略語は「cym」で、ウェールズ語を意味する「Cymru」の略です。
インストールパッケージは「tesseract-ocr-」と呼ばれ、言語の略語が最後にタグ付けされています。 Ubuntuにウェールズ語ファイルをインストールするには、以下を使用します。
sudo apt-get install tesseract-ocr-cym
テキスト付きの画像は下にあります。 ウェールズ国歌の最初の詩です。
TesseractOCRが課題に対応できるかどうかを見てみましょう。 -l
(言語)オプションを使用して、作業する言語をtesseract
に通知します。
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150
以下の抽出されたテキストに示されているように、 tesseract
は完全に対応します。 Da iawn 、TesseractOCR。
ドキュメントに2つ以上の言語が含まれている場合(たとえば、ウェールズ語から英語への辞書など)、プラス記号( +
)を使用して、次のようにtesseract
に別の言語を追加するように指示できます。
tesseract image.png textfile -l eng + cym + fra
PDFでのTesseractOCRの使用
tesseract
コマンドは画像ファイルを処理するように設計されていますが、PDFを読み取ることができません。 ただし、PDFからテキストを抽出する必要がある場合は、最初に別のユーティリティを使用して一連の画像を生成できます。 1つの画像は、PDFの1ページを表します。
必要なpdftppm
ユーティリティは、Linuxコンピュータにすでにインストールされているはずです。 この例で使用するPDFは、人工知能に関するAlanTuringの独創的な論文「ComputingMachineryandIntelligence」のコピーです。
-png
オプションを使用して、PNGファイルを作成することを指定します。 PDFのファイル名は「turing.pdf」です。 画像ファイルを「turing-01.png」、「turing-02.png」などと呼びます。
pdftoppm -png turing.pdfturing
単一のコマンドを使用して各画像ファイルでtesseract
を実行するには、forループを使用する必要があります。 「turing- nn.png 」ファイルごとに、 tesseract
を実行し、画像ファイル名の一部として「text-」と「turing- nn 」というテキストファイルを作成します。
for i inturing-??。png; tesseract "$ i" "text- $ i" -l eng; 終わり;
すべてのテキストファイルを1つに結合するには、 cat
を使用できます。
cat text-turing *> complete.txt
それで、それはどのように行われましたか? 以下に示すように、非常によくできています。 ただし、最初のページは非常に難しいように見えます。 さまざまなテキストスタイルとサイズ、および装飾があります。 ページの右端には垂直の「透かし」もあります。
ただし、出力は元の値に近くなります。 明らかに、フォーマットは失われましたが、テキストは正しいです。
縦の透かしは、ページの下部にぎこちない線として転写されました。 テキストは小さすぎてtesseract
で正確に読み取ることができませんでしたが、テキストを見つけて削除するのは簡単です。 最悪の結果は、各行の終わりに文字が迷うことでした。
不思議なことに、2ページ目の質問と回答のリストの先頭にある1文字は無視されています。 PDFのセクションを以下に示します。
以下に示すように、質問は残っていますが、各行の先頭にある「Q」と「A」が失われています。
ダイアグラムも正しく転記されません。 チューリングPDFから以下に示すものを抽出しようとするとどうなるか見てみましょう。
以下の結果からわかるように、文字は読み取られましたが、図の形式が失われました。
繰り返しますが、 tesseract
は下付き文字のサイズが小さいことに苦労し、それらは正しくレンダリングされませんでした。
公平に言えば、それでも良い結果でした。 わかりやすいテキストを抽出することはできませんでしたが、この例は課題があったため、意図的に選択されました。
必要なときに良い解決策
OCRは、毎日使用する必要のあるものではありません。 ただし、必要が生じた場合は、最高のOCRエンジンの1つを自由に使用できることを知っておくとよいでしょう。