PythonでOCR

昔から tesseract というオープンソースのOCRエンジンが有名です。Pythonからは pytesseract で使えます。しかし、さすがに古くなってしまいました。性能もいまいちです。ここではより新しい方法をいくつか紹介します。

これら以外に、VLM(視覚機能を持ったLLM)をLM Studioなどでローカルで動かしておいて、そこにコピペまたはドラッグ&ドロップするという手もあります。OCR+翻訳+解説までやってくれるので便利です。

EasyOCR

EasyOCR はたいへん優れたOCRエンジンです。Apple Silicon もサポートされています。コマンドラインでも使えます。

pip install easyocr でインストールできます。

import easyocr

reader = easyocr.Reader(['en']) # en, ja, ...
result = reader.readtext('filename.png', detail=0)

print(" ".join(result))

初回実行時にモデル(パラメータのファイル)がダウンロードされます:

Downloading detection model, please wait. This may take several minutes depending upon your network connection.

Downloading recognition model, please wait. This may take several minutes depending upon your network connection.

モデルはデフォルトでは ~/.EasyOCR/ の下に入りますが、環境変数 EASYOCR_MODULE_PATH を設定しておけばそちらに入ります。

Surya

Surya という新しいOCRツールがあるようです。pip install surya-ocr でインストールできます。

MacのOCR機能を使う

Macはたいへん優れたOCR機能を持っています。画像ファイルをマウスでテキスト範囲指定してコピーできます。この機能をコマンドラインで使う方法が macOS のデフォルト状態でコマンドラインからOCR処理を行う という記事で解説されています。

MacのOCR機能をPythonで使うための ocrmac というパッケージがあります。pip install ocrmac でインストールできます。コマンドラインでも使えます。Pythonからは例えば次のようにして使います。

from ocrmac import ocrmac

annotations = ocrmac.OCR('filename.png', language_preference=['ja-JP','en-US']).recognize()
print(" ".join([a[0] for a in annotations]))

同様のものとして macocr というものも見つけました。Python以外では macOCRmacOCR が検索で見つかります(試していません。前者のmacOCRは 【2025年版】無料オープンソースのOCRソフトウェア10選を徹底比較!(PDFや画像からテキスト情報を抽出) でも紹介されています。この記事には kraken というものも紹介されています)。

YomiToku

YomiToku は日本語文書画像解析に特化したPythonパッケージです。非商用での個人利用・研究目的での利用は自由です。

今のところPython 3.13まで対応しているようです(Python 3.14は不可)。pip install yomitoku でインストールできます。コマンド yomitoku がインストールされます。

yomitoku 入力ファイル -f md -o results -v --figure

とすれば results というフォルダを作ってその中にMarkdown形式で出力します。-v は解析結果を可視化した画像を出力するオプションです。--figure は検出した図、画像を出力ファイルにエクスポートするオプションです。

base.py を次のようにすればオプション -d mps でMacのGPU(mps)が使えるようになります(すでにpull requestがあるようですので近々このようになるはずです)。

    @device.setter
    def device(self, device):
        if "cuda" in device:
            if torch.cuda.is_available():
                self._device = torch.device(device)
            else:
                self._device = torch.device("cpu")
                logger.warning("CUDA is not available. Use CPU instead.")
        elif "mps" in device: # for apple silicon
            if torch.mps.is_available():
                self._device = torch.device("mps")
            else:
                self._device = torch.device("cpu")
                logger.warning("MPS is not available. Use CPU instead.")
        else:
            self._device = torch.device("cpu")

GLM-OCR

GLM-OCR をご覧ください。

NDLOCR-Lite

国立国会図書館の NDLOCR-Lite が公開されました。デスクトップアプリケーションもありますが、ここではコマンドで実行してみます。私の普段使いのPython 3.14ではうまくいかず、3.13にして試しました。頻繁に更新されるようなので -e を付けてインストールすると git pull がすぐ反映されます。

git clone https://github.com/ndl-lab/ndlocr-lite
cd ndlocr-lite
uv tool install --python 3.13 -e .

これで ~/.local/bin/ndlocr-lite がインストールされますので、パスを通しておけばどこでも実行できます。

使い方の例:

ndlocr-lite --sourceimg x.png --output outdir --viz True

または(srcdir に複数の画像が入っているとき)

ndlocr-lite --sourcedir srcdir --output outdir --viz True

出力先のディレクトリ(上の例では outdir)はあらかじめ作っておきます。結果の視覚化 --viz True はなくてもかまいません。


Last modified: