\r\n\r\n
Tesseract OCR エンジンを使って、Linux のコマンドラインから画像からテキストを抽出することができます。高速かつ正確で、約100の言語で使用できます。その使い方をご紹介します。
OCR(Optical Character Recognition)とは、画像中の文字を見て見つけ、それを編集可能なテキストとして抽出する機能です。人間にとって、この単純な作業が、コンピュータにとっては非常に難しいのです。初期の取り組みは、はっきり言って不器用でした。フォントやサイズがOCRソフトの条件と合わない場合、コンピューターが混乱することがよくありました。
とはいえ、この分野のパイオニアは今でも高い評価を受けています。電子媒体を紛失してしまったが、印刷物は残っている場合、OCRで編集可能な電子媒体を再現することができます。たとえ結果が100%正確でなかったとしても、これは大きな時間節約になります。
手作業で仕分けすれば、書類は戻ってくる。OCRパッケージが直面するタスクの複雑さを理解しているからこそ、人々はその間違いを許してくれるのです。それに、文書全体を再入力するよりはましです。
その後、状況はかなり改善されました。ヒューレット・パッカード社が開発したOCRアプリケーション「Tesseract」は、1980年代に商用アプリケーションとしてスタートしました。2005年にオープンソース化され、現在はGoogleがサポートしている。多言語対応で、最も精度の高いOCRシステムの一つと言われており、****で紹介されています。
UbuntuにTesseract OCRをインストールするには、以下のコマンドを使用します。
sudo apt-get install tesseract-ocrFedoraの場合、コマンドは
sudo dnf install tesseractManjaroの場合、入力する必要があります。
sudo pacman -Syu tesseractTesseract OCRへの一連のチャレンジを紹介します。最初のテキストを含む画像は、General Data Protection Regulation Recital 63から抽出したものです。OCRがこれを読めるかどうか見てみよう(寝ないでね)。
立法文書によくある、各文章がかすれた上付き数字で始まるので、トリッキーな画像になっていますね。
テッセラクトコマンドに、以下のような情報を与える必要があります。
画像ファイルの名前は "Recitation 63.png" で、解像度は 150 dpi です。この画像から "Recitation.txt" というテキストファイルを作成したいと思います。
ご注文は以下の通りです。
tesseract recital-63.png recital --dpi 150ただ、上付き文字がぼやけすぎていて、正確には読めないのが難点です。良い結果を得るためには、良い画質が必要です。
tesseractは上付き数字を逆カンマ()や度記号(°)と解釈しているが、実際のテキストは完全に抽出されている(ここに合わせるために画像の右端をトリミングする必要がある)。
最後の文字は16進数で0x0Cのバイトで、これはキャリッジリターン文字である。
こちらも太字と斜体で文字サイズを変えた画像です。
このファイルの名前は「bold"-italic.png」です。「bold.txt」というファイルを作りたいので、コマンドは次のようになります。
tesseract bold-italic.png bold --dpi 150こちらは特に問題もなく、テキストを完璧に抽出することができました。
Tesseract OCRは、約100の言語をサポートしています。言語を使用するには、まずその言語をインストールする必要があります。リストの中から使いたい言語が見つかったら、略語をメモしておいてください。ウェールズへのサポートを導入する予定です。略称は「cym」で、ウェールズ語を意味する「Cymru」の略です。
インストールパッケージは「tesseract ocr-」と呼ばれ、末尾に言語の略称が記されています。Ubuntuにウェールズ語ファイルをインストールするために、以下を使用します。
sudo apt-get install tesseract-ocr-cym下の画像は、ウェールズ国歌の第1節をテキストにしたものです。
Tesseract OCRの挑戦を見てみましょう。ここでは、-l (language)オプションを使って、テッセラクトに使用する言語を知らせます。
tesseract hen-wlad-fy-nhadau.png anthem -l cym --dpi 150tesseractは、下の抽出されたテキストに示すように、完璧に処理しました。
文書に2つ以上の言語が含まれている場合(例:ウェールズ語から英語への辞書)、以下のようにプラス記号(+)を使ってテッセラクトに別の言語を追加するように指示することができます。
tesseract image.png textfile -l eng+cym+fraしかし、PDFからテキストを抽出する必要がある場合、別のユーティリティを使用して、最初に画像のセットを生成することができます。個々の画像は、PDFの個々のページを表すことになります。
必要な pdftppm ユーティリティは、Linux コンピュータにすでにインストールされているはずです。今回例に挙げるPDFは、アラン・チューリングの人工知能に関する代表的な論文 "Computers and Intelligence "のコピーです。
ここでは、-pngオプションで、pngファイルを作成することを指定しています。PDFファイル名は "turing.pdf"、画像ファイル名は "turing-01.png", "turing-02.png "とします。といった具合に。
pdftoppm -png turing.pdf turing各イメージファイルに対して1つのコマンドでtesseractを実行するには、forループを使用する必要があります。turing"-nn.png形式の各ファイルに対して、tesseractを実行し、"text-"と "turing nn "という名前のテキストファイルを作成する。「を画像ファイル名の一部として使用します。
for i in turing-??.png; do tesseract "$i" "text-$i" -l eng; done;すべてのテキストファイルを1つのテキストファイルにまとめるには、catを使用します。
cat text-turing* > complete.txtでは、どうすればいいのか?非常によく、以下を参照してください。しかし、最初のページは難しそうです。さまざまなテキストスタイルとサイズ、装飾を備えています。また、ページの右端には縦長の「透かし」が入っています。
しかし、出力は元の値に近い。明らかに書式が失われているが、テキストは正しい。
縦書きの透かしは、ページ下部の文字化けした線として転写されます。文字が小さすぎてテッセラクトが正確に読めませんが、簡単に見つけて削除することができます。最悪の結果は、間違った文字が各行の末尾に表示されることです。
不思議なことに、2ページ目の質問と回答のリストの冒頭にある個々の文字は無視される。PDFの中の部分を以下に示す。
下記のように、問題はそのままですが、各行の先頭にある "Q "と "A "が無くなっています。
Turing PDFから以下に示す内容を抽出しようとすると、どうなるか見てみましょう。
下記の結果でわかるように、文字は読み取れますが、グラフの書式は失われています。
ここでもまた、テッセラクトは小さなサイズの添え字と戦っており、正しく表示されない。
しかし、公平に見て、これはまだ良い結果だと思います。ストレートなテキストを抽出することができなかったのですが、それならばと、あえてチャレンジングな例を選びました。
OCRは毎日使うものではありません。しかし、いざというときに、最高のOCRエンジンが自由に使えるというのはありがたいことです。