Tesseract OCRは、画像から文字を読み取るオープンソースのOCRエンジンです(スキャンPDFは先に各ページを画像に変換して渡します)。2026年10月時点の最新版は5.5.3(2026年7月24日公開)です。Windowsでは、古い解説記事にあるwingetのIDや配布ページから入れると、2024年6月の5.4.0が入る点に注意が要ります。
この記事では、OS別のインストール、日本語の学習データの入れ方、tesseractコマンドの書き方と出力形式、PythonやC#からの呼び出し、つまずきやすいエラーの直し方を順に扱います。コマンドの出力やエラーメッセージは、macOS上のTesseract 5.5.3で実行して確認したものです。仕組みや精度、PSMとOEMの選び方はTesseractとは?読み方・精度・商用利用とPSM/OEM設定を実務目線で解説にまとめています。
まとめ:Tesseract OCRを動かすまでの要点
- Windows:
winget install --id tesseract-ocr.tesseract -eで5.5.3が入る。旧IDUB-Mannheim.TesseractOCRは5.4.0.20240606のまま更新が止まっている。 - Mac:
brew install tesseractで5.5.3。同梱の言語は英語(eng)と向き検出(osd)だけなので、日本語は別に入れる。 - Ubuntu:標準リポジトリで入る版はOSの版で違う(24.04は5.3.4、26.04は5.5.0)。日本語は
tesseract-ocr-jpn。 - 日本語:横書きは
jpn、縦書きはjpn_vert。英数字が混じる文書は-l jpn+engと連結する。 - 基本の形:
tesseract 入力画像 出力名 -l jpn。末尾にpdfやtsvを足すと、検索可能PDFや座標付きの表形式で出せる。 - 入手元:本体は公式リリースかwinget、学習データは公式のtessdata系リポジトリからだけ取る。
OS別のインストール手順
MacとLinuxはパッケージマネージャーで入れます。Windowsは、公式リリースに付くインストーラーかwingetを使います。
Windows:公式インストーラーとwingetでの導入
Windows用インストーラーは、もともとドイツ・マンハイム大学図書館(UB Mannheim)が作り、自前の配布ディレクトリで配っていたものです。5.5.0(2024年11月)からは同じ系統のインストーラーがGitHubの公式リリースに添付されるようになり(5.5.1と5.5.2は添付なし)、最新の5.5.3ではtesseract-ocr-w64-setup-5.5.3.20260724.exe(約26MB・64bit版)が置かれています。wingetにはこのファイルを指すtesseract-ocr.tesseractというパッケージがあり、コマンド1行で入ります。
winget install --id tesseract-ocr.tesseract -e
UB Mannheimの案内ページ(GitHub Wiki)も2026年7月24日に更新され、今は公式リリースの5.5.3へリンクしています。一方、UB Mannheimの旧配布ディレクトリとwingetの旧ID UB-Mannheim.TesseractOCRは5.4.0.20240606が最後です。公式ドキュメントのDownloadsページは2026年10月時点でも「新しい版の公式Windowsインストーラーはない」という記述のままで、実態に追いついていません。
インストーラーを手で実行する場合は、次の4点が引っかかりやすいところです。日本語とPathの挙動は、5.5.3のインストーラーを生成するNSISスクリプト(nsis/tesseract.nsi)で確認できます。
- 日本語は導入時にダウンロードされる:「Additional language data (download)」の「Japanese」「Japanese (vertical)」にチェックを入れると、tessdata_fastリポジトリから取得します。オフラインでは失敗するので手動で配置します。
- 自動で選ばれるのは横書きだけ:Windowsのシステム言語が日本語(LANGID 1041)なら「Japanese」は最初からチェック済みになりますが、「Japanese (vertical)」は手動です。
- インストール先は既定か新しいフォルダにする:UB Mannheimの案内ページは、アンインストーラーがインストール先フォルダを丸ごと削除するため、既存のフォルダに入れないよう警告しています。
- 環境変数Pathは追加されない:スクリプトにPathを書き換える処理がありません。インストール先(全ユーザー向けなら
C:\Program Files\Tesseract-OCR)をPathに足すか、スタートメニューの「Console」ショートカットから起動します。
macOS:Homebrewでの本体と日本語データの導入
Homebrewのtesseractは5.5.3です。ただし同梱される学習データはengとosdの2つだけで、インストール直後のtesseract --list-langsにも2つしか出ません。
brew install tesseract
# 全言語をまとめて入れる場合
brew install tesseract-lang
# 日本語だけ足す場合
curl -L -o "$(brew --prefix)/share/tessdata/jpn.traineddata" \
https://github.com/tesseract-ocr/tessdata_fast/raw/main/jpn.traineddata
tesseract-langはtessdata_fastの4.1.0タグを丸ごと展開するので、日本語しか使わないならjpn.traineddata(約2.5MB)を置くほうが軽く済みます。Intel Macでは依存ライブラリのビルド済みパッケージが無い場合があり、その場合はbrew installがソースからのビルドになって時間がかかります。
Ubuntu・Debian:aptで導入するバージョンの違い
日本語の横書き・縦書きまで含めて、次の1行で入ります。
sudo apt install tesseract-ocr tesseract-ocr-jpn tesseract-ocr-jpn-vert
注意したいのは、標準リポジトリで入る本体の版がOSのリリースごとに違うことです。表は各ディストリビューションのパッケージの上流バージョンです。
| OS | tesseract-ocr | 日本語データ |
|---|---|---|
| Ubuntu 26.04 LTS | 5.5.0 | 4.1.0 |
| Ubuntu 24.04 LTS | 5.3.4 | 4.1.0 |
| Debian 13(trixie) | 5.5.0 | 4.1.0 |
| Debian 12(bookworm) | 5.3.0 | 4.1.0 |
日本語データの4.1.0はtessdata_fast系のモデルで、本体5.xでもそのまま使えます。パッケージ名はtesseract-ocr-jpn(横書き)、tesseract-ocr-jpn-vert(縦書き)、tesseract-ocr-script-jpan(日本語の文字体系モデル)の3つです。
インストール後の確認:バージョンと使える言語
tesseract --version
tesseract --list-langs
一覧にjpnが出ていれば日本語が使えます。出ていなければ、次の章の置き場所を確認します。
日本語を読ませるための学習データ
Tesseractは言語ごとの学習データ(.traineddata)を読み込んで認識します。ここでは日本語用の代表的なモデル3つを紹介します(ほかに縦書きの文字体系モデルscript/Japanese_vertもあります)。配布元のリポジトリは3系統あります。
jpn・jpn_vert・script/Japaneseの使い分け
jpn:日本語の横書き用。言語ごとの文字集合と辞書を持つ。普段はこれを使う。jpn_vert:縦書き用。新聞や書籍の縦組みを読むときに指定する。script/Japanese:言語でなく「日本語の文字体系」単位のモデル。-l script/Japaneseのようにパス付きで指定する。
縦書きの2行を合成した画像で試すと、tessdata_fastのjpnでは33文字中30文字を誤り、ほぼ読めませんでした。jpn_vertに替えると誤りは1文字です。縦組みの文書では、モデルの指定がそのまま読めるか読めないかを分けます。英数字の型番や記号が混じる文書は-l jpn+engのように+で連結します。
tessdata_fast・tessdata_best・tessdataの違い
同じjpn.traineddataでも、どのリポジトリから取るかで中身が違います。サイズは2026年10月1日に各リポジトリのmainブランチから取得したファイルのバイト数、処理時間はIntel Mac上のTesseract 5.5.3で、請求書風の合成画像(6行・300dpi)を-l jpn+engで読ませた1回分です。下の誤り文字数は、正解と結果をNFKC正規化して空白を除いたうえでの編集距離で、空白や丸数字の違いは数えていません。
| リポジトリ | jpnのサイズ | 対応エンジン | 処理時間 | 主な入手経路 |
|---|---|---|---|---|
| tessdata_fast | 約2.5MB | LSTMのみ | 1.4秒 | apt・Windowsインストーラー |
| tessdata_best | 約14.3MB | LSTMのみ | 7.1秒 | 手動配置 |
| tessdata | 約35.7MB | LSTMとlegacy | 3.0秒 | 手動配置 |
bestは最も高精度とされるモデルですが、この画像ではfastより誤りが多く(97文字中4文字。fastは2文字)、「請求 書 番 号」のように単語の間へ空白が入りました。この画像では、-c preserve_interword_spaces=1を付けると語間の空白が消えました。空白を一律に削る設定ではないので、文書ごとに出力を確かめます。tessdataリポジトリのファイルは、数字が「②0②⑥」のような丸数字で出ることがありました。まずはfastで試し、読めない文書に限ってbestに差し替えて比べる、という順番が無難です。legacyエンジン(--oem 0)はtessdataリポジトリのファイルでないと動かず、fastのファイルで指定すると「Tesseract (legacy) engine requested, but components are not present」で止まります。
学習データの置き場所:–tessdata-dir と TESSDATA_PREFIX
既定のフォルダ以外に置いた学習データを使うときは、コマンドで場所を渡します。公式マニュアルは環境変数TESSDATA_PREFIXより--tessdata-dirの指定を推奨しています。
# フォルダを直接指定(推奨)
tesseract scan.png out -l jpn --tessdata-dir ./tessdata_best
# 環境変数で指定(Linux・Mac)
export TESSDATA_PREFIX=/usr/local/share/tessdata
どちらも、jpn.traineddataが直下にあるフォルダを指します。ここで落とし穴が1つあります。pdfやtsvといった出力形式の指定は、指定したフォルダの中のconfigsフォルダから読み込まれます。学習データだけを置いた自作フォルダを--tessdata-dirで渡すと、「read_params_file: Can’t open pdf」と出てPDFが作られません。既定のtessdataフォルダからconfigsフォルダとpdf.ttfをコピーしておくと解消します。
tesseractコマンドの基本的な使い方
書式:入力・出力名・オプション・出力形式の順
tesseract 入力ファイル 出力名 [オプション...] [出力形式...]
出力名には拡張子を付けません。tesseract scan.png result -l jpnならresult.txtができます。出力名にstdoutか-を渡すとファイルを作らず画面に出るので、動作確認やパイプ処理に使えます。
tesseract scan.png stdout -l jpn+eng
-lを省くと英語(eng)で読みます。日本語の画像を言語指定なしで読ませると、「請求書番号」が「aK SBS」のような英字の羅列になりました。オプションは出力形式(configファイル)より前に書きます。tesseract --helpの表示にも「These options must occur before any configfile.」と明記されています。
tesseractコマンドの主なオプション一覧
| オプション | 役割 | 例 |
|---|---|---|
-l |
言語の指定 | -l jpn+eng |
--psm |
ページ分割モード(既定3) | --psm 6 |
--oem |
エンジン(1=LSTM、0=legacy) | --oem 1 |
--dpi |
入力画像の解像度を上書き | --dpi 300 |
--tessdata-dir |
学習データの場所 | --tessdata-dir ./tessdata |
-c |
内部パラメーターの設定 | -c preserve_interword_spaces=1 |
--loglevel |
ログの量(ALL〜OFF) | --loglevel ERROR |
--psmは、画像をどの単位(ページ全体・1ブロック・1行など)として区切って読むかを決めます。1枚の画像が1つの文字ブロックなら6、1行だけなら7を試します。14モードの意味と選び方はTesseractとは?読み方・精度・商用利用とPSM/OEM設定を実務目線で解説に表でまとめています。
出力形式の切り替え:txt・tsv・pdf・hocr・alto・page
コマンドの末尾に出力形式の名前を並べると、その形式でファイルが作られます。複数並べれば1回の実行でまとめて出せます。
tesseract scan.png result -l jpn pdf txt tsv hocr alto page
| 形式名 | 拡張子 | 中身と使いどころ |
|---|---|---|
| txt | .txt | テキストのみ(既定) |
| tsv | .tsv | 単語ごとの座標と信頼度 |
| 画像に透明テキストを重ねた検索可能PDF | ||
| hocr | .hocr | 座標付きHTML |
| alto | .xml | 図書館のデジタル化で使うALTO XML |
| page | .page.xml | PAGE XML |
帳票から特定の欄だけ抜き出したいときはtsvが向いています。1行目の見出しはlevel page_num block_num par_num line_num word_num left top width height conf textの12列で、単語ごとに座標と信頼度confが付きます。座標で欄を絞り、信頼度の低い単語だけ人が確認する、という後処理を組めます。
複数ファイルの一括処理
入力ファイルに「画像のパスを1行1つ書いたテキストファイル」を渡すと、全ページを1つの出力にまとめます。スキャンした複数ページを1冊の検索可能PDFにするときに使います。
# Linux・Mac(bash/zsh)
ls scans/*.png > list.txt
tesseract list.txt book -l jpn pdf
ページの順番はlist.txtの行の順です。lsは名前を文字列として並べるので、p1.png、p10.png、p2.pngの順になります。ファイル名をp001.pngのようにゼロ埋めしておくと、ページ順が崩れません。
1枚ずつ別ファイルに出したい場合は、シェルでループします。
# Linux・Mac(bash/zsh)
mkdir -p out
for f in scans/*.png; do
tesseract "$f" "out/$(basename "${f%.*}")" -l jpn
done
# Windows(PowerShell)
New-Item -ItemType Directory -Force out | Out-Null
Get-ChildItem .\scans\*.png | ForEach-Object {
tesseract $_.FullName ".\out\$($_.BaseName)" -l jpn
}
TesseractはPDFを直接読めません。スキャンPDFを処理するときは、先に画像へ変換します。PythonならPyMuPDF(fitz)とは|インストールから使い方・ライセンスまで解説【2026年版】で300dpiの画像に書き出してから渡すのが手軽です。
PythonやC#から呼び出す方法
Python:pytesseractでの文字列・座標の取得
pytesseract(PyPIの最新版は0.3.13・Python 3.8以上)は、インストール済みのtesseractコマンドを内部で呼び出すラッパーです。本体は別途インストールが要ります。
pip install pytesseract pillow
from PIL import Image
import pytesseract
# Windowsで Path を通していない場合だけ、本体の場所を指定する
# pytesseract.pytesseract.tesseract_cmd = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
img = Image.open("scan.png")
# 1. 文字列として取得
text = pytesseract.image_to_string(img, lang="jpn+eng", config="--psm 6")
print(text)
# 2. 単語ごとの座標と信頼度を取得する
# しきい値60は例示値。対象の文書で誤読と信頼度の関係を見て調整する
data = pytesseract.image_to_data(img, lang="jpn", output_type=pytesseract.Output.DICT)
for word, conf, x, y in zip(data["text"], data["conf"], data["left"], data["top"]):
if word.strip() and float(conf) < 60:
print(f"要確認: {word} (conf={conf}, x={x}, y={y})")
# 3. 検索可能PDFとして保存
pdf = pytesseract.image_to_pdf_or_hocr(img, lang="jpn", extension="pdf")
with open("scan.pdf", "wb") as f:
f.write(pdf)
# 使える言語の一覧
print(pytesseract.get_languages())
先ほどの請求書風の画像で実行すると、image_to_stringは「129,800円」を「129,800F」と誤読しました。image_to_dataの結果では「129,800」が信頼度47で要確認に挙がった一方、「12,980」のカンマをピリオドと読み違えた「12.980」は信頼度90で素通りしました。ほかの単語は78〜96です。信頼度は誤読の目安にとどまるので、金額や日付の欄は正規表現で書式も検証します。confの-1はブロックや行を表す行なので、word.strip()で除外しています。config引数にはコマンドラインのオプションをそのまま文字列で渡せます。処理が終わらない画像に備えるならtimeout=10のように秒数を指定すると、時間切れでRuntimeErrorが出ます。読み取り前の二値化や傾き補正は、二値化とは?しきい値の決め方と大津・適応的の使い分けをOpenCVの実装で解説やPillowとは?Pythonで画像を加工する使い方をコード付きで解説の手順で行います。
C#(.NET):NuGetのTesseractパッケージと同梱DLLの制約
C#から使う定番は、NuGetのTesseractパッケージ(GitHubのcharlesw/tesseract)です。最新版は2022年11月公開の5.2.0で、Tesseract本体5.2.0を同梱しています。
dotnet add package Tesseract --version 5.2.0
using Tesseract;
using var engine = new TesseractEngine(@"./tessdata", "jpn+eng", EngineMode.LstmOnly);
using var img = Pix.LoadFromFile("scan.png");
using var page = engine.Process(img, PageSegMode.Auto);
Console.WriteLine(page.GetText());
Console.WriteLine($"平均信頼度: {page.GetMeanConfidence():P1}");
このコードは、.NET SDK 10.0.401でnet10.0のコンソールプロジェクトにパッケージ5.2.0を追加し、ビルドが通ることまで確認しています。実行には次の前提があります。
- 同梱DLLはWindows用だけ:パッケージ内のネイティブライブラリは
x64/tesseract50.dllとx86/tesseract50.dll(とLeptonica 1.82.0)だけで、LinuxやMacのサーバーではそのまま動きません。 - Visual Studio 2019のC++ランタイムが要る:公式READMEが、同梱DLLの実行にVisual Studio 2019のx86・x64ランタイムを求めています。
- 学習データは自分で置く:
./tessdataにjpn.traineddataとeng.traineddataを置き、出力ディレクトリへコピーされるよう設定します。
同梱の本体は5.2.0です。Linuxで動かす場合や最新版を使いたい場合は、本体をOS側に入れてtesseractコマンドをプロセスとして呼ぶほうが確実です。
Tesseractを安全に入手・運用するための確認点
TesseractのOCR処理は手元のPCやサーバーの中で完結し、画像が外部へ送られることはありません。確認すべきなのは本体と学習データの入手元です。
- 本体は公式リリースから取る:Windowsは
github.com/tesseract-ocr/tesseract/releasesかwingetのtesseract-ocr.tesseract。wingetのマニフェストにはファイルのSHA256(BEE9E343…で始まる値)が記録されており、手でダウンロードした場合もPowerShellのGet-FileHashで照合できます。 - 学習データは公式のtessdata系リポジトリから取る:5.5.3では、細工された
.traineddataを読み込ませたときのメモリ破壊につながる不具合(境界チェックの欠如や整数オーバーフロー)が2件修正されました。出所の分からない学習データは読み込まないでください。修正内容はTesseract 5.5.3の公式リリースノートで確認できます。 - 古い版を把握する:旧配布経路の5.4.0、Ubuntu 24.04のapt版(5.3.4)、NuGetの
Tesseract(5.2.0)は、配布側が個別に取り込んでいない限りこの修正を含みません。外部から受け取った学習データを扱うなら5.5.3へ上げます。
よくあるエラーと直し方
Failed loading language ‘jpn’:学習データの配置確認
日本語の学習データが無い状態で-l jpnを指定すると、5.5.3では次のメッセージで止まります(終了コード1)。
Error opening data file /usr/local/share/tessdata/jpn.traineddata
Please make sure the TESSDATA_PREFIX environment variable is set to your "tessdata" directory.
Failed loading language 'jpn'
Tesseract couldn't load any languages!
Could not initialize tesseract.
1行目に、本体が探しに行ったパスがそのまま出ています。まずそのフォルダにjpn.traineddataがあるかを確かめ、無ければ置くか、置いた場所を--tessdata-dirで渡します。ファイルがあるのに失敗する場合は、ダウンロードの途中で切れた不完全なファイルや、使うエンジンと合わない学習データ(前述のlegacy指定など)を疑います。Windowsでインストール時に日本語を選び忘れた場合は、インストーラーを再実行して「Japanese」を追加するのが早道です。
‘tesseract’ は認識されていません:実行ファイルとPathの確認
Windowsのコマンドプロンプトで「内部コマンドまたは外部コマンド…として認識されていません」と出るのは、前述のとおりインストーラーがPathを追加しないためです。「システム環境変数の編集」からユーザー環境変数PathにC:\Program Files\Tesseract-OCRを足し、ターミナルを開き直します。pytesseractでTesseractNotFoundErrorが出る場合も原因は同じで、Pathを通すかtesseract_cmdにtesseract.exeのフルパスを書きます。
解像度情報が無い画像:Estimating resolution と –dpi
スクリーンショットのように解像度の情報を持たない画像を渡すと、5.5.3は警告を出さずに70dpiとみなし、文字の大きさから解像度を推定します。そのとき出るのが「Estimating resolution as 532」のような1行で、エラーではありません。逆に--dpiで70未満や2400超を指定すると、「Warning: User defined image dpi is outside of expected range (70 – 2400)!」と出ます。解像度情報が欠けている画像には、実際の解像度に合う値を--dpi 300のように渡します。この指定で画像の画素数は変わらないので、文字そのものが小さい場合は画像の拡大や高解像度での再スキャンを検討します。公式ドキュメントが推奨する解像度は300dpi以上です。
結果が空・崩れた文字列になるときの原因と対処
エラーは出ないのに結果が空や意味不明な文字列になる場合、まず次の3点を確認します。
- 言語の指定漏れ:
-lを省くと英語(eng)で読むため、日本語は英字の羅列になる。 - 縦書きを横書きモデルで読んでいる:
-l jpn_vertに切り替える。 - レイアウトの判定違い:表や短い1行の画像は既定の
--psm 3で領域を取り損ねる。--psm 6や--psm 7を試す。
この3点で直らなければ、画像側を疑います。公式のImproving the quality of the outputは、解像度の不足、ノイズ、傾き、文字の周りの余白の過不足などを失敗の原因に挙げています。手書きや低解像度の写真の文字は得意範囲の外です。日本語の帳票や縦書きが中心ならYomiTokuとは?使い方とYomiToku Studio(GUI)・商用利用の条件【v0.15.0】やNDLOCR-Lite Webの使い方|Web AI版との違い・精度・商用利用【2026年9月】のような日本語特化のOCRと、同じ画像で比べてから選んでください。
よくある質問
Tesseract OCRは無料で使えますか?
無料です。Apache License 2.0で公開されており、商用のシステムに組み込んで使うこともできます。再配布するときはライセンス文の同梱などの条件があります。
Windowsでコマンド操作をせずに使う方法はありますか?
Tesseract本体にはGUIがありません。画面から操作したい場合は、Tesseractをエンジンとして使うオープンソースのgImageReaderなどを使います。
tesseract-ocr-jpnだけ入れれば日本語は読めますか?
tesseract-ocr-jpnは学習データのパッケージで、本体のtesseract-ocrが入っていることが前提です。本体と一緒に入れれば横書きは読めます。縦書きの文書も扱うならtesseract-ocr-jpn-vertも入れ、-l jpn_vertで指定します。
UB Mannheim版の5.4.0から更新すべきですか?
5.4.0.20240606を使っているなら更新を勧めます。インストーラーは同じ系統で、配布先が公式リリースに移っただけです。先に「アプリと機能」でUB Mannheim版をアンインストールしてから、winget install --id tesseract-ocr.tesseract -eで入れ直すと、2つの版が混在しません。
pytesseractにPDFを直接渡してOCRできますか?
できません。PyMuPDFなどでページを300dpiの画像に変換してから渡し、検索可能PDFが欲しければimage_to_pdf_or_hocrでページごとに作って結合します。