Tesseract (テッセラクト)は、さまざまなオペレーティングシステム上で動作する光学式文字認識エンジン。名称のTesseractとは四次元超立方体の意である。Apache Licenseの下でリリースされた自由ソフトウェアである。文字認識を行うライブラリと、それを用いたコマンドラインインターフェイスを持つ。

もともとは1980年代にプロプライエタリソフトウェアとしてヒューレット・パッカードが開発していたが、2005年にオープンソースとしてリリースされ、開発は2006年からGoogleが後援している。

2006年、Tesseractは当時入手可能な最も正確なオープンソースOCRエンジンの1つと見なされた。

## 歴史

Tesseractエンジンは、1985年から1994年にかけて、英国ブリストルとコロラド州グリーリーにあるヒューレット・パッカードラボでプロプライエタリソフトウェアとして開発されていた。1996年にさらに変更が加えられてWindowsへ移植され、1998年にCからC ++に移行した。コードの多くはCで記述されており、部分的にC++で記述されている。それ以来、すべてのコードは少なくともC++コンパイラでコンパイルするように変換されている。 次の10年間はほとんど変更がなかった。その後、2005年にヒューレット・パッカードとネバダ大学ラスベガス校(UNLV)によってオープンソースとしてリリースされた。 Tesseractの開発は2006年からGoogleが後援している。

## 特徴

Tesseractは、1995年の時点で文字認識精度が良い上位3つのOCRエンジンのうちの一つだった 。 TesseractはLinux、Windows、Mac OS Xで利用できるが、開発リソースの制限により、WindowsとUbuntuの開発者によってのみ厳格なテストが行われている。

バージョン2までのTesseractは、単純な1列のテキストのTIFF画像のみの入力が可能だった。初期のバージョンにはレイアウト分析が含まれていなかったため、複数列のテキスト、画像、数式を入力すると、文字化けした出力が生成された。バージョン3.00以降、Tesseractは出力テキストのフォーマット、 hOCR 位置情報、ページレイアウト分析に対応した。 また、Leptonicaライブラリの使用により、いくつかの新しい画像形式に対応した。 Tesseractでは、テキストが等幅かプロポーショナルかを検出することができる。

Tesseractの初期バージョンは、英語のテキストしか認識できなかった。 Tesseract v2は、さらに6つの西洋言語(フランス語、イタリア語、ドイツ語、スペイン語、ブラジルポルトガル語、オランダ語)を追加した。バージョン3は、表意文字(中国語と日本語)と右から左に書く言語(例:アラビア語、ヘブライ語)、およびその他の多くの言語に対応した。新しい言語には、アラビア語、ブルガリア語、カタロニア語、中国語(簡略化および伝統的)、クロアチア語、チェコ語、デンマーク語、ドイツ語(Frakturスクリプト)、ギリシャ語、フィンランド語、ヘブライ語、ヒンディー語、ハンガリー語、インドネシア語、日本語、韓国語、ラトビア語、リトアニア語、ノルウェー語、ポーランド語、ポルトガル語、ルーマニア語、ロシア語、セルビア語、スロバキア語(標準およびFrakturスクリプト)、スロベニア語、スウェーデン語、タガログ語、タミル語、タイ語、トルコ語、ウクライナ語、ベトナム語が含まれる。 2015年7月にリリースされたV3.04では、39の言語とスクリプトの組み合わせが追加され、サポート言語の総数が100を超えた。含まれる新しい言語コードは以下の通り:amh(Amharic)、asm(Assamese)、aze\_cyrl(キリル文字のアゼルバイジャナ)、bod(チベット語)、bos(ボスニア語)、ceb(Cebuano)、cym(ウェールズ語)、dzo(ゾンカ語)、fas(ペルシャ語)、gle(アイルランド語)、guj(グジャラティ語)、hat(ハイチ語、ハイチ語クレオール語)、iku(イヌクティット語)、jav(ジャワ語)、kat(ジョージ語)、kat\_old(旧グルジア語)、kaz(カザフ語)、khm(中央Khmer)、kir(Kyrgyz)、kur(Kurdish)、lao(Lao)、lat(Latin)、mar(Marathi)、mya(Burmese)、nep(Nepali)、ori(Oriya)、pan(Punjabi)、pus( Pashto)、san(Sanskrit)、sin(Sinhala)、srp\_latn(ラテン文字のセルビア語)、syr(Syriac)、tgk(Tajik)、tir(Tigrinya)、uig(Uyghur)、urd(Urdu)、uzb(Uzbek) 、uzb\_cyrl(キリル文字のウズベク語)、yid(イディッシュ)。

さらに、Tesseractは他の言語でも動作するようにトレーニングできる。

Tesseractは、アラビア語やヘブライ語などの右から左に書く言語、多くのインド系文字、および中国語・日本語・朝鮮語を非常にうまく処理できる。認識精度は、サントリーニでのDAS 2016における、レイ・スミスのTesseractチュートリアルのプレゼンテーションで示されている。

Tesseractはバックエンドでの使用に適しており、 OCRopusなどのフロントエンドを使用することで、レイアウト分析などの、より複雑なOCRタスクに使用できる。

入力する画像がOCR用に前処理されていない場合、Tesseractの出力の品質は非常に低くなる。画像(特にスクリーンショット)は、テキストのx-heightが少なくとも20ピクセルになるように拡大する必要があり、 回転と傾きを修正しないとテキストが全く認識されない。明るさの低頻度の変化をハイパスフィルター処理する必要がある。Tesseractの2値化段階でページの大部分が破壊され、暗い境界線を手動で削除する必要がある。そうしないと、文字が誤って認識されてしまう。

## バージョン4

バージョン4では、バージョン4.0からは、従来の認識エンジンに加えLSTMベースのニューラルネットワークによるOCRエンジンと、多くの追加言語およびスクリプト用のモデルが追加され、対応言語は合計で116言語となった。

さらに、37言語のスクリプトがサポートされているため、言語が記述されているスクリプトを使用して言語を認識することができる。

## ユーザーインターフェイス

Tesseractは、コマンドラインインターフェイスから実行する。 TesseractにはGUIが付属していないが、GUIを提供するプロジェクトが多数ある。 一般的な例の1つはOCRFeederである。

## 識者の反応

2007年7月のTesseractについての記事では、Linux Journalのアンソニー・ケイは「優れた仕事をする風変わりなコマンドラインツール」と述べている。当時、彼は「Tesseractは必要最低限のOCRエンジンだ。ビルドプロセスは少し風変わりで、エンジンにはいくつかの追加機能(レイアウト検出など)が必要だが、中核機能であるテキスト認識は、私がオープンソースコミュニティで試した他のどの機能よりも大幅に優れている。スキャナーとGIMPやNetpbmなどの画像ツールを使用するだけで、簡単に優れた認識率を得ることができる。」と述べた 。