自炊した本をNotebookLMなどのAIツールで活用したり、タブレットでキーワード検索できるようにするためには、「PDFへの文字(テキスト)の埋め込み(OCR処理)」が不可欠です。
しかし、一般的な海外製のOCRエンジン(Tesseract等)は、日本語特有の「縦書き」や「2段組・3段組(マルチカラム)」、「ルビ(ふりがな)」が混在する書籍をスキャンすると、文字の読み取り順序が崩れてしまうことがよくあります。
そこでおすすめなのが、日本語文書に特化したオープンソースのレイアウト解析・AI-OCRエンジン**「YomiToku(ヨミトク)」**です。本記事では、YomiTokuのインストールから、単一ファイルの処理、そして大量の本を一括で文字埋め込みする複数ファイル一括処理のコマンドライン手法まで詳しく解説します。
1. YomiTokuが日本語自炊本に最適な理由
- 日本語のレイアウトを完全に理解: 小説の「縦書き」はもちろん、技術書や雑誌の「マルチカラム段組」を自動解析し、人間が読むのと同じ正しい順序でテキストを抽出します。
- 高精度な透明テキスト埋め込み: 元のスキャン画像の美しさを100%保ったまま、文字画像のちょうど真裏の位置に透明なテキストを重ねた「検索可能なPDF(サーチャブルPDF)」を出力できます。
- GPUアクセラレーション対応: NVIDIA製のグラフィックボード(GPU)を搭載したPCであれば、処理速度を劇的に向上させることができ、大量の書籍の一括処理も短時間で完了します。
2. 導入方法(セットアップ)
YomiTokuはPython環境で動作します。
① 必須環境のインストール
② YomiTokuのインストール
ターミナル(WindowsはPowerShellやコマンドプロンプト)を開き、以下のコマンドを実行します。
pip install yomitoku
3. 基本的なコマンドライン操作
YomiTokuはシンプルなCLI(コマンドラインインターフェース)を備えており、コマンド一発でPDFの文字埋め込みが可能です。
単一のPDFファイルを処理する
yomitoku path/to/input.pdf --format pdf --output-dir ./output/
--format pdf(または-f pdf):出力フォーマットにPDFを指定します。画像からテキスト位置を検出して透明テキストとして埋め込みます。--output-dir ./output/(または-o ./output/):処理されたPDFを格納するフォルダを指定します。
4. 複数PDFファイルの一括処理(バッチ処理)
何十冊もの本をまとめてスキャンした場合、1冊ずつコマンドを実行するのは非効率的です。YomiTokuの機能や簡単なスクリプトを使って、一括で文字埋め込みを行いましょう。
方法A:YomiToku標準のフォルダ入力機能を使う
YomiTokuは入力にファイル単体だけでなく「フォルダ(ディレクトリ)」を指定することも可能です。フォルダを指定すると、その中のPDFを一括処理してくれます。
yomitoku ./scanned_books/ --format pdf --output-dir ./ocr_books/ --device cuda
./scanned_books/:未処理のスキャンPDFが格納されているフォルダ。--device cuda:GPU(CUDA)を使用するオプション(CPUで処理する場合は不要ですが、GPUを使うと数倍高速に完了します)。
方法B:シェルスクリプトで1冊ずつ順番にループ処理する(Linux / macOS)
進捗ログを細かく確認しながら確実に一括処理を行いたい場合、以下のシェルスクリプト(batch_ocr.sh)を作成して実行します。
#!/bin/bash
# 入力・出力フォルダの設定
INPUT_DIR="./scanned_books"
OUTPUT_DIR="./ocr_books"
mkdir -p "$OUTPUT_DIR"
echo "=== YomiToku 一括OCR処理を開始します ==="
for file in "$INPUT_DIR"/*.pdf; do
# ファイルが存在するか確認
[ -e "$file" ] || continue
filename=$(basename "$file")
echo "処理中: $filename ..."
# YomiTokuを実行 (GPUを使用する場合は --device cuda を追加)
yomitoku "$file" -f pdf -o "$OUTPUT_DIR" --device cuda
echo "完了: $filename"
echo "----------------------------------------"
done
echo "=== すべてのPDFの一括処理が完了しました! ==="
方法C:PowerShellで一括処理する(Windows環境)
Windowsユーザーの場合は、PowerShellを使って一括処理スクリプト(batch_ocr.ps1)を作成します。
# 入力・出力フォルダの設定
$inputDir = "./scanned_books"
$outputDir = "./ocr_books"
# 出力フォルダがなければ作成
if (!(Test-Path $outputDir)) {
New-Item -ItemType Directory -Path $outputDir | Out-Null
}
Write-Host "=== YomiToku 一括OCR処理を開始します ===" -ForegroundColor Green
Get-ChildItem -Path $inputDir -Filter *.pdf | ForEach-Object {
Write-Host "処理中: $($_.Name) ..." -ForegroundColor Yellow
# YomiTokuを実行
yomitoku $_.FullName -f pdf -o $outputDir --device cuda
Write-Host "完了: $($_.Name)" -ForegroundColor Green
Write-Host "----------------------------------------"
}
Write-Host "=== すべてのPDFの一括処理が完了しました! ===" -ForegroundColor Green
5. 一括処理を快適に行うためのパラメータ調整
- GPUのVRAM不足(Out of Memory)対策:
解像度が高すぎるPDFやページ数が極端に多い本を一括で処理する際、GPUのメモリ(VRAM)が足りずにエラーになることがあります。その場合は
--device cpuを指定してCPU処理にするか、スキャン解像度を300dpi以下に抑えてファイル容量を小さくしてください。 - 処理の並列化: YomiTokuは1ファイルずつ丁寧にページを解析するため、一括処理には数分〜数十分の時間がかかります。就寝前や外出前にスクリプトを実行しておく「夜間バッチ処理」の運用が最もおすすめです。
6. メルカリでの「裁断済み本」まとめ買いとの組み合わせ
この一括OCR処理は、メルカリでの「裁断済み書籍」のまとめ買い&一括自炊と相性抜群です。
- メルカリで、同一ジャンル(例: プログラミング本、ビジネス書シリーズ)の「裁断済み書籍」をまとめて安く仕入れます。
- スキャナーで一気にスキャンし、PCのフォルダに未処理のPDFを溜めます。
- 上記のスクリプトを実行し、夜の間にすべてのPDFに YomiToku で高精度なテキストを埋め込みます。
- スキャンし終わった本はまとめてメルカリに再出品して売却。
これにより、最も安価かつ最小限の手間で、検索性・AI親和性に優れた最高品質の電子書籍ライブラリを一気に構築することができます。