Zipファイルで圧縮された漫画画像を一括で読み込み、OCRを実行してテキストデータを出力するPython CLIツール。
Apple Silicon (M1/M2/M3/M4) のMPS (Metal Performance Shaders) を活用し、ローカル環境で高速に推論を行います。
- ✅ Zipファイルから漫画画像を一括処理
- ✅ 複雑なコマ割りや自由なセリフ配置に対応したテキスト領域(吹き出し)の自動検出
- ✅ 漫画の読み順に基づいたテキスト抽出 (ただし、意図しない順番になるケースもあります)
- ✅ ページごとのセリフ読み取り精度が高いOCR処理
- ✅ JSON形式とテキスト形式での出力
- ✅ Apple Silicon (MPS) による高速OCR処理
- Python 3.10+
- 推奨環境:
- Apple Silicon Mac (M1/M2/M3/M4) - MPS対応(最速)
- Windows/Linux with NVIDIA GPU - CUDA対応(高速)
- その他の環境でもCPUで動作します(やや遅い)
- PyTorch(GPU対応版を推奨)
このツールは、PyPIで公開されている manga-ocr パッケージと、テキスト検出用の comic-text-detector を組み合わせたラッパーツールです。
UV を使用すると、簡単にツールをインストールできます。
# このリポジトリからインストール
uv tool install git+https://github.com/kazuki-ookura/manga-ocr.git
# セットアップヘルパーを実行(サブモジュールとモデルファイルのダウンロード)
manga-ocr-setup以下の手順でセットアップを行ってください。
まず、このリポジトリと、submoduleとして含まれている comic-text-detector を一緒にクローンします。
# submoduleも含めてクローン(推奨)
git clone --recursive https://github.com/kazuki-ookura/manga-ocr.git
cd manga-ocr
# もし --recursive をつけずにクローンしてしまった場合
# git submodule update --init --recursive次に、テキスト検出モデルをダウンロードし、正しい位置に配置します。
以下のリンクからモデルファイル(comictextdetector.pt)をダウンロードしてください。
ダウンロードしたファイルを vendor/comic-text-detector/data/ ディレクトリに配置します。
# dataディレクトリが存在しない場合は作成
mkdir -p vendor/comic-text-detector/data
# ダウンロードしたファイルを配置(例: ダウンロードフォルダからの移動)
mv ~/Downloads/comictextdetector.pt vendor/comic-text-detector/data/重要: このモデルファイル(約76MB)はテキスト検出に必須です。配置しないとテキスト領域の検出が行われません。
# 仮想環境を作成(推奨)
python3 -m venv venv
source venv/bin/activate
# プロジェクトをインストール
pip install -e .または、setup.sh スクリプトを使用してセットアップすることもできます:
./setup.sh注意: manga-ocr-setup コマンドを使用すると、サブモジュールとモデルファイルのセットアップを自動的に行えます:
manga-ocr-setup# 基本的な使用
manga-ocr comic.zipセットアップ完了後、以下のコマンドでツールを実行します。
# 基本的な使用
python3 -m src.cli comic.zip- JSON形式のみ出力:
manga-ocr comic.zip --output-format json # または開発環境: python3 -m src.cli comic.zip --output-format json - 出力ディレクトリを指定:
manga-ocr comic.zip -o ./results # または開発環境: python3 -m src.cli comic.zip -o ./results - 詳細ログ付きで実行:
manga-ocr comic.zip --verbose # または開発環境: python3 -m src.cli comic.zip --verbose - CPUを強制使用:
manga-ocr comic.zip --device cpu # または開発環境: python3 -m src.cli comic.zip --device cpu - エラー時に処理を中断:
manga-ocr comic.zip --no-skip-errors # または開発環境: python3 -m src.cli comic.zip --no-skip-errors
処理が完了すると、以下のファイルが生成されます:
{zip_filename}_output.json: JSON形式の構造化データ{zip_filename}_output.txt: 人間が読みやすいテキスト形式
# 実際の使用例(UV/pipでインストール済みの場合)
manga-ocr '漫画タイトル.zip' --verbose
# または開発環境の場合
python3 -m src.cli '漫画タイトル.zip' --verbose
# 出力例:
# 画像ファイルを 218 個見つけました
# 処理を開始します(デバイス: mps)...
# 処理完了: 218 ページを処理しました
# 出力ファイル:
# - 漫画タイトル_output.json
# - 漫画タイトル_output.txt- comic-text-detector: テキスト検出機能を使用するために必須です。インストール手順の「2. comic-text-detectorのセットアップ」を参照してください。
- モデルファイル:
comic-text-detectorのモデルファイル(comictextdetector.pt)が必須です。インストール手順の「4. モデルファイルの配置」を参照してください。 - 初回実行: 初回実行時、
manga-ocrがモデルをダウンロードするため時間がかかります。 - 処理時間: 画像数やサイズによって処理時間が異なります。大量の画像がある場合は時間がかかります。
- MPSサポート: OCR処理はMPSを使用して高速に実行されます。テキスト検出はCPUで実行されます(詳細は
docs/PERFORMANCE.mdを参照)。 - 読み取り可能な文字: 効果音など、通常の漫画セリフフォントではない装飾的な文字は、OCRエンジンの特性上、正確に読み取ることができません。
問題が発生した場合は、docs/TROUBLESHOOTING.md を参照してください。
- トラブルシューティング:
docs/TROUBLESHOOTING.md- よくある問題と解決方法 - パフォーマンス:
docs/PERFORMANCE.md- デバイス使用、MPS、パフォーマンスについて - 開発計画:
docs/20_PLAN/roadmap.md- 開発状況と実装計画
MIT License
ツールの基本的な動作を示すための簡単なデモです。
以下のような、単純なコマ割りとセリフを含む3ページの漫画画像(page1.png〜page3.png)を用意し、demo.zipとして圧縮します。
まず、demo_images_png ディレクトリ内の画像を demo.zip という名前で圧縮します。
zip -j demo.zip demo_images_png/page1.png demo_images_png/page2.png demo_images_png/page3.png次に、生成された demo.zip に対して、以下のコマンドを実行します。
# UV/pipでインストール済みの場合
manga-ocr demo.zip
# または開発環境の場合
python3 -m src.cli demo.zip実行後、demo_output.txt に以下の内容が出力されます。
[page1.png]
こんにちは
これは
Manga OCRの
デモです。
[page2.png]
これは
2ページ目です、
読み順は
どうなるかな?
[page3.png]
最後の
ページです
テストは
うまく
いくかな?
- 1ページ目と3ページ目では、漫画の基本的な読み順(右上→左下、段ごと)が正しく認識されています。
- 2ページ目では、縦長のコマが影響し、一部の読み順が人間の直感とは異なる結果になっています。
このように、本ツールは多くの基本的なレイアウトでセリフの順序を正しく認識できますが、複雑なコマ割りでは意図しない順序になる場合があることを示しています。