要点
OCR(光学文字認識)は、文字に見えるピクセルを実際のテキストに変換します。印刷された文字を写した鮮明な写真やスクリーンショットならほぼ完璧で、手書き文字、装飾的なフォント、ぼやけたメニューの写真ではほぼ役に立ちません。このサイトのエンジンは Tesseract で、12 の言語パックとともにブラウザ内で動作し、画像は端末から出ません。悪い結果の大半はエンジンではなく画像に原因があり、ボタンを押す前に直せます。
エンジンの仕組み
Tesseract は 1985 年に Hewlett-Packard で開発が始まり、2005 年にオープンソース化され、2006 年から Google がメンテナンスしています。バージョン 4(2018 年)では、1 文字ずつ判定する分類器が、1 行をまとめて読む LSTM ニューラルネットワークに置き換えられました。旧エンジンが苦手だった、くっついた文字やプロポーショナルフォントに対応できるのはこのためです。処理の流れは、ページ上のテキスト領域を見つけ、行に分割し、各行をネットワークに通し、最後に言語モデル(辞書と文字の並びの統計)が似た形の文字(l、1、I、0、O)を判定する、というものです。正しい言語を選ぶことが重要なのは、この最後のステップがあるからです。英語のモデルでドイツ語を読むと、straße を strasse に、あるいはもっとひどい形に「修正」してしまいます。
ブラウザでは、エンジンは WebAssembly にコンパイルされ(約 4 MB)、言語パックは 1 つあたり 0.7〜3 MB で、初回使用時にダウンロードされてキャッシュされます。中国語と日本語のパックが大きいのは、覚えるべき文字が何千もあるからです。
結果を左右するもの
解像度。 Tesseract が求める文字の高さは約 30 ピクセルで、20 を下回るとネットワークが推測で読み始めます。ページをスマートフォンで撮った写真なら問題ありませんが、幅 400 ピクセルのサムネイルでは足りません。小さな画像をどうしても OCR にかけるなら、先に 2 倍に拡大してください。情報は増えませんが、行の検出処理に余裕ができます。
コントラストと均一さ。 白地に黒い文字で、照明が均一であること。デスクライトの下で撮ったページの写真は中央が明るく四隅が灰色になります。エンジンは 1 つのしきい値で画像を二値化するので、ページの片側が消えてしまいます。均一な光の下で撮るか、スキャンしてください。
傾き。 エンジンは数度の傾きなら補正します。斜めから撮ったページは台形になり、行が収束していきます。OCR の前に画像回転と画像切り抜きで本文部分だけにしてください。切り抜けば、机の縁、自分の指、隣のページも取り除けます。これらはどれも、意味不明な文字列を 1 行ずつ生みます。
レイアウト。 1 段組みの本文は簡単です。2 段組みもたいてい検出されます。表、フォーム、画像の周りに回り込んだ文字、余白のキャプションは、エンジンが決めた順序で出力され、数字の列は揃いが崩れます。表の場合は、ページ全体ではなく必要なセルだけを OCR にかけてください。
フォント。 一般的な書籍用フォントや画面用フォントは非常によく読めます。長体、装飾体、筆記体、袋文字は苦手です。学習データに含まれていないフォントの文字は 1 文字ずつ形で読まれ、言語モデルの修正がかえって結果を悪くします。
手書き文字。 事実上非対応です。Tesseract は印刷された活字で学習されています。フォームに書かれたブロック体の大文字なら読めることもありますが、筆記体は読めません。手書き文字認識は別系統のモデルで、このツールが行う処理ではありません。
言語と混在
テキストの言語を選び、可能ならその 1 つだけにしてください。3 言語を選ぶと 1 文字ごとの候補が 3 倍になり、認識が遅くなるうえに精度も下がります。英語の製品名を含む中国語の文書のような混在テキストは、2 言語を同時に使うべきケースです(中国語 + 英語)。エンジンは単語ごとに切り替えます。使える言語は 12 で、英語、簡体字中国語、繁体字中国語、日本語、韓国語、スペイン語、フランス語、ドイツ語、ポルトガル語、ロシア語、イタリア語、ベトナム語です。
スキャンした PDF
スキャナーから作られた PDF は、各ページの画像です。コピーできるテキストはそこにありません。200〜300 dpi でページを画像に書き出し、それを OCR にかけてください。72 dpi(画面解像度)で書き出すと文字の高さが 10 ピクセルになり、意味不明な結果になります。
「99%」が実際に意味すること
きれいなページで OCR がうまくいった場合、誤読は 100 文字に 1 文字ほどです。500 語のページなら誤りは 30 個で、その多くが数字、名前、句読点に集中します。すらすら読んで校正することができない部分です。テキストを重要な場所で使う前に、すべての数値を原本と照合してください。OCR が作るのは下書きであって、正確な書き起こしではありません。