Tesseract OCR のライブラリ
とラッパー。
主要な各言語向けのライブラリとラッパーの実用的で比較可能なリファレンスです。何をインストールするか、最小サンプル、ネイティブバインディングと CLI ラッパーのトレードオフを掲載します。
どのライブラリを使うべきか
お使いの言語の行を選び、以下のセクションをお読みください。
| 言語 | 推奨 | タイプ | 備考 |
|---|---|---|---|
| Python | pytesseract | CLI ラッパー | 最も簡単。Python ガイドを参照。tesserocr はインプロセスで高速。 |
| JavaScript / TypeScript | tesseract.js | WASM | ブラウザと Node で動作。PDF 非対応。 |
| C++ | TessBaseAPI | ネイティブ | コア API。最大の制御。 |
| Java | Tess4J | JNA バインディング | クラスパスにネイティブライブラリが必要。 |
| Go | gosseract | cgo バインディング | libtesseract-dev が必要。 |
| C# / .NET | Tesseract (.NET) | ネイティブラッパー | NuGet パッケージ。ネイティブバイナリ同梱。 |
| Rust | leptess | ネイティブバインディング | Leptonica + Tesseract にリンク。 |
| PHP | thiagoalessio/tesseract_ocr | CLI ラッパー | Composer パッケージ。 |
Python
最大のエコシステム。CLI ラッパーに加え、複数のネイティブバインディングがあります。
pytesseract— 標準の CLI ラッパー。簡単ですが呼び出しごとにプロセスを起動します。tesserocr— C++ API へのネイティブバインディング。インプロセスで高速、libtesseract-devが必要。pyocr— 複数のエンジンをサポートするラッパー。aiopytesseract— 並行処理向けの非同期ラッパー。
pip install pytesseract pillow
import pytesseract
from PIL import Image
print(pytesseract.image_to_string(Image.open("image.png")))JavaScript / TypeScript
tesseract.js は WebAssembly 経由でエンジンをブラウザと Node に提供します。
npm install tesseract.js
const Tesseract = require('tesseract.js');
Tesseract.recognize('image.png', 'eng', { logger: m => console.log(m) })
.then(({ data: { text } }) => console.log(text));注: tesseract.js は PDF ファイルに対応しておらず、認識モデルも変更しません。Node 専用なら node-tesseract-ocr がインストール済みの CLI をラップします。
C++
ネイティブの TessBaseAPI は参照となる統合で、ほとんどのバインディングがこれをラップしています。
#include <tesseract/baseapi.h>
#include <leptonica/allheaders.h>
tesseract::TessBaseAPI* api = new tesseract::TessBaseAPI();
api->Init(NULL, "eng");
Pix* image = pixRead("image.png");
api->SetImage(image);
char* text = api->GetUTF8Text();
printf("%s", text);
api->End(); pixDestroy(&image);libtesseract-dev と libleptonica-dev に対してビルドします(インストールを参照)。
Java
Tess4J は成熟した JNA ラッパーです。JavaCPP プリセットが代替になります。
// Maven: net.sourceforge.tess4j:tess4j
import net.sourceforge.tess4j.Tesseract;
Tesseract t = new Tesseract();
t.setDatapath("tessdata");
String text = t.doOCR(new java.io.File("image.png"));Go
gosseract は cgo で Tesseract C++ ライブラリにリンクします。
go get github.com/otiai10/gosseract/v2
import "github.com/otiai10/gosseract/v2"
client := gosseract.NewClient()
defer client.Close()
client.SetImage("image.png")
text, _ := client.Text()libtesseract-dev と libleptonica-dev(Linux)、または Homebrew パッケージ(macOS)が必要です。
C# / .NET
NuGet パッケージ Tesseract がネイティブライブラリをラップし、バイナリを同梱します。
// dotnet add package Tesseract
using Tesseract;
using var engine = new TesseractEngine(@"./tessdata", "eng", EngineMode.Default);
using var img = Pix.LoadFromFile("image.png");
using var page = engine.Process(img);
Console.WriteLine(page.GetText());その他の言語
ほとんどすべてのエコシステムにコミュニティのバインディングがあります。
- Rust —
leptess(ネイティブバインディング)、rusty-tesseract(CLI ラッパー)。 - PHP —
thiagoalessio/tesseract_ocr(Composer、CLI ラッパー)。 - Ruby —
rtesseract(CLI ラッパー)。 - C — Tesseract の C API(
tesseract/capi.h)。
CLI ラッパー vs ネイティブバインディング
パフォーマンスでは、言語よりもこの選択が重要です。
| 要素 | CLI ラッパー | ネイティブバインディング |
|---|---|---|
| セットアップ | 簡単 — エンジンをインストールするだけ | 開発用ヘッダー/ライブラリが必要 |
| 呼び出しごとの速度 | 遅い(呼び出しごとにプロセス) | 速い(インプロセス) |
| 制御 | CLI フラグと設定のみ | 完全な API(イテレータ、矩形、信頼度) |
| 例 | pytesseract、rtesseract、node-tesseract-ocr | tesserocr、Tess4J、gosseract、TessBaseAPI |
単発のスクリプトには CLI ラッパーが最短です。大量処理や低レイテンシが求められるサービスでは、ネイティブバインディングを選ぶか CLI でまとめて処理してください(パフォーマンスのヒントを参照)。
ライブラリ FAQ
どの Tesseract ライブラリを使うべきですか?
上の表でお使いの言語の行を確認してください。速度と制御にはネイティブバインディング、簡単さには CLI ラッパーを使います。
エンジンは別途インストールが必要ですか?
ほとんどのラッパーで必要です。インストール済みの Tesseract エンジンと言語データに依存します。エンジンの WebAssembly ビルドを同梱するのは tesseract.js だけです。
tesseract.js は PDF に対応していますか?
いいえ。画像を認識します。まず PDF のページを画像に変換するか、PDF 対応を追加するライブラリを使ってください。
どれが最速ですか?
tesserocr、Tess4J、gosseract のようなインプロセスのネイティブバインディングは、呼び出しごとのプロセス起動を避けられます。CLI ラッパーではページをまとめて multiprocessing を使ってください。
次のステップ
エンジンをインストールし、言語を選びましょう。