LinuxでTesseractを使ってスキャンPDFをOCR処理する完全ガイド
スキャンしたPDFや画像PDFはテキストを選択・コピーできないため、編集や検索が困難です。OCR(光学文字認識)技術を使えば、スキャンPDFからテキストを抽出し、検索可能なPDFに変換できます。LinuxではTesseractが定番のOCRエンジンとして広く使われています。本記事では、Tesseractのインストールから日本語OCRの設定、精度向上のコツまでを詳しく解説します。ブラウザで使えるLazyPDFのOCR機能も紹介します。
TesseractとTesseract-OCRのインストール
TesseractはオープンソースのOCRエンジンで、Ubuntu、Debian、Fedoraなど主要なLinuxディストリビューションのパッケージリポジトリから簡単にインストールできます。日本語のOCRには日本語用の言語データ(jpn)を別途インストールする必要があります。インストール後はコマンドラインからすぐに使用開始できます。Tesseract 4以降はLSTMエンジンを使用しており、精度が大幅に向上しています。
- 1`sudo apt install tesseract-ocr` でTesseractをインストールします(Ubuntu/Debian系)。Fedora系は `sudo dnf install tesseract` を使います。
- 2日本語OCRに必要な言語データをインストールします: `sudo apt install tesseract-ocr-jpn`
- 3`tesseract --version` でインストールを確認し、`tesseract --list-langs` で日本語(jpn)が表示されることを確認します。
スキャンPDFをOCR処理する手順
TesseractはPDFを直接OCRできませんが、まずPDFを画像に変換してからOCRをかける流れになります。pdftoppmやGhostscriptで各ページをPNG画像に変換し、それをTesseractで処理します。tesseract-pdf(またはtesseractのpdf出力オプション)を使えば、OCR結果を検索可能なPDFとして保存することもできます。この方法でスキャンPDFを電子書類として活用できるようになります。
- 1まずPDFをPNG画像に変換します: `pdftoppm -png -r 300 input.pdf page` これにより `page-1.png`、`page-2.png` などのファイルが作成されます。
- 2Tesseractで日本語OCRを実行します: `tesseract page-1.png output -l jpn pdf` 出力ファイル `output.pdf` にOCR結果が埋め込まれます。
- 3複数ページを一括処理する場合はシェルスクリプトを使います: `for f in page-*.png; do tesseract $f ${f%.png}_ocr -l jpn pdf; done`
OCR精度を向上させるコツ
Tesseractの認識精度はスキャン画像の品質に大きく依存します。解像度が高いほど(300DPI以上が推奨)、認識率が向上します。画像の傾きや汚れもエラーの原因になります。前処理としてImageMagickを使って画像を二値化したり、コントラストを上げたりすることで精度が改善されることがあります。また、`--psm`(ページセグメントモード)オプションを適切に設定することも精度向上に効果的です。
- 1スキャン解像度を300DPI以上に設定します。pdftoppmなら `-r 300` を指定します。
- 2ImageMagickで画像を前処理します: `convert input.png -threshold 50% -sharpen 0x1 processed.png`
- 3Tesseractの `--psm 6` オプションで均一なテキストブロックとして認識させます: `tesseract processed.png output -l jpn --psm 6 pdf`
LazyPDFのブラウザOCRを使う方法
Tesseractのインストールや設定が難しい場合や、すぐにOCR処理を試したい場合は、ブラウザで使えるLazyPDFのOCR機能が便利です。LazyPDFはtesseract.jsを使用しており、ブラウザ上でローカル処理されるため、ファイルがサーバーにアップロードされません。日本語を含む多言語のOCRに対応しており、インストール不要で今すぐ使えます。
- 1LazyPDFのOCRページ(https://www.lazy-pdf.com/ja/ocr)にアクセスします。
- 2OCRしたいPDFまたは画像ファイルをアップロードします。
- 3言語設定で「日本語」を選択し、「OCRを実行」ボタンをクリックします。処理完了後、検索可能なPDFをダウンロードできます。
TesseractとLazyPDFのOCR比較
TesseractをコマンドラインでLinuxから使う場合、大量文書の自動処理や高度なカスタマイズが可能です。cronで定期実行するバッチ処理にも向いています。一方、LazyPDFのブラウザOCRはインストール不要で手軽に使えますが、大量処理には向いていません。また、LazyPDFはファイルをローカルで処理するため、機密文書でも安心して使えます。用途や文書量に応じて使い分けることをおすすめします。
よくある質問
Tesseractで日本語の手書き文字を認識できますか?
Tesseractは印刷されたテキストに最適化されており、手書き文字の認識は苦手です。手書きOCRには専用のAIモデルが必要で、精度も限られます。LazyPDFも同様に印刷テキスト向けです。
OCRの精度が低い場合はどうすればいいですか?
スキャン解像度を300DPI以上に上げる、画像の傾きを補正する、二値化処理を行うことで精度が向上します。また、`--psm` オプションを変えることで認識モードを調整できます。
LinuxでTesseractを使ってPDFをテキストファイルに変換できますか?
はい、`tesseract image.png output -l jpn txt` のように出力形式を `txt` に指定すれば、テキストファイルとして保存されます。PDFに埋め込む場合は `pdf` を指定します。
LazyPDFのOCRはオフラインでも使えますか?
LazyPDFはブラウザアプリのため、初回アクセス時にインターネット接続が必要ですが、処理自体はブラウザ内(ローカル)で行われます。Tesseractはオフラインで完全に動作します。