軽量・高速OCRライブラリonnxocrの使い方を徹底解説!インストールから日本語認識まで

onnxocr

はじめに

「Pythonで手軽に使えるOCRライブラリを探している」「EasyOCRは便利だけど、もう少し動作が軽いと嬉しいな…」と感じていませんか?Pythonを使ったOCR(光学文字認識)は、画像からテキストを抽出するための非常に強力な技術ですが、ライブラリの選定や環境構築でつまずくことも少なくありません。

本記事では、そんなあなたにおすすめの**軽量・高速なPython向けOCRライブラリonnxocr**を徹底的に解説します。

この記事を最後まで読めば、onnxocrのインストール方法から、基本的な使い方、そして最も需要の高い日本語の文字認識を行う方法まで、一通りの知識を豊富なサンプルコード付きでマスターできます。ぜひこの機会に、新しいOCRライブラリをあなたの武器に加えましょう。


1. onnxocrとは?手軽で高速なPython向けOCRライブラリ

onnxocrは、その名の通りONNX Runtimeをバックエンドで利用することで、CPUでも驚くほど高速に動作する比較的新しいOCRライブラリです。まずはその特徴と、他の有名ライブラリとの違いを具体的に見ていきましょう。

ONNX RuntimeベースでCPUでもGPUでも高速動作

onnxocrの最大の特徴は、Microsoftが主導して開発した機械学習モデルの推論エンジン「ONNX Runtime」をベースにしている点です。

多くのAIライブラリがモデルの実行に大規模なフレームワーク(PyTorchやTensorFlowなど)を必要とするのに対し、ONNX Runtimeは推論処理に特化しているため非常に効率的です。これにより、特別な設定なしでもCPUで十分な速度が得られ、環境にNVIDIA製GPUがあれば、さらに処理を高速化することも可能です。

人気ライブラリEasyOCRとの違いは?

PythonのOCRライブラリとして有名なEasyOCRと比較されることが多いですが、onnxocrには明確なメリットがあります。

項目onnxocrEasyOCR
実行速度非常に高速 (ONNX Runtime)高速 (PyTorchベース)
依存関係少ない (onnxruntimeのみ)やや多い (PyTorchなど)
導入の手軽さ非常に手軽手軽だが依存関係で注意が必要な場合も
コミュニティ発展途上大規模で情報が多い

onnxocrの最大の強みは、依存パッケージが少なく、環境構築が非常に手軽である点です。シンプルなアプリケーションにOCR機能を組み込みたい場合や、実行環境をクリーンに保ちたい場合に、onnxocrは非常に有力な選択肢となります。

多言語に対応(もちろん日本語もOK)

onnxocrは、英語や日本語はもちろん、中国語、韓国語、ドイツ語など、多くの言語に対応した学習済みモデルを提供しています。わずかなコードの変更で、これらの言語を認識させることが可能です。


2. onnxocrのインストール方法

onnxocrのインストールは非常にシンプルで、Pythonのパッケージ管理ツールpipを使えば数分で完了します。

実行環境の前提

本記事では、以下の環境を前提としています。

  • Python 3.8以上
  • pipが利用可能な環境

CPU版のインストールコマンド

ほとんどの方は、まずCPU版でその手軽さと速度を試すのがおすすめです。以下のコマンドをターミナル(WindowsならコマンドプロンプトやPowerShell)で実行してください。

pip install onnxocr onnxruntime

このコマンド一つで、onnxocr本体と、その心臓部であるCPU版のonnxruntimeが同時にインストールされます。これだけで準備は完了です。


3. 【基本】onnxocrで画像を文字認識する簡単な使い方

インストールが完了したら、早速onnxocrを使ってみましょう。ここでは、シンプルな英語のテキストが書かれた画像をOCRする基本的な流れを、コードの役割を一つずつ解説しながら進めます。

1. ライブラリのインポート

まず、インストールしたonnxocrからOnnxOcrというメインのクラスをインポートします。

from onnxocr import OnnxOcr

2. onnxocrのインスタンスを作成

次に、OnnxOcrクラスのインスタンス(オブジェクト)を作成します。この時、引数を何も指定しないと、デフォルトの英語モデルが読み込まれます。 初回実行時には、モデルファイルが自動的にダウンロードされるため、少し時間がかかります。

# 英語モデルを読み込む
ocr = OnnxOcr()

3. 画像を読み込んでOCRを実行

文字認識したい画像ファイルのパスを指定し、.ocr()メソッドを実行します。これだけでOCR処理が実行されます。非常に直感的ですね。

# 'image.png'というファイル名の画像をOCRにかける
# この画像には "Hello, World!" と書かれているとします。
result = ocr.ocr('image.png')

4. 認識結果を確認する

.ocr()メソッドの戻り値(result)は、認識されたテキストブロックごとの情報が格納されたリストです。各要素は、さらに詳細な情報を持つ辞書形式になっています。

print(result)

出力結果の例:

[
  {
    'box': [[50, 20], [250, 20], [250, 80], [50, 80]],
    'text': 'Hello, World!',
    'score': 0.9985
  }
]
  • box: 認識されたテキストの四隅の座標 [左上, 右上, 右下, 左下] を示します。
  • text: 認識された文字列です。
  • score: 認識結果の信頼度(確信度)です。1.0に近いほど高精度です。

【全コード】コピペで試せるサンプルコード

ここまでの流れを一つにまとめた、コピー&ペーストでそのまま試せるサンプルコードです。sample_en.pngという名前で、英語のテキストが書かれた画像を準備して実行してみてください。

# onnxocrライブラリからOnnxOcrクラスをインポート
from onnxocr import OnnxOcr

# 1. onnxocrのインスタンスを作成(デフォルトは英語モデル)
print("英語モデルを読み込んでいます...")
ocr = OnnxOcr()
print("モデルの読み込み完了。")

# 2. OCRを実行したい画像のパスを指定
image_path = 'sample_en.png'

# 3. OCRを実行
print(f"'{image_path}'のOCR処理を開始します...")
result = ocr.ocr(image_path)
print("OCR処理完了。")

# 4. 認識結果を分かりやすく表示
print("\n--- OCR認識結果 ---")
if result:
    for item in result:
        print(f"テキスト: {item['text']}, 信頼度: {item['score']:.4f}")
else:
    print("テキストが検出されませんでした。")

4. 【応用】onnxocrで日本語をOCRする方法

onnxocrの真価が発揮されるのが、この手軽な日本語認識機能です。英語の場合とのコードの違いは、インスタンス作成時のたった1行だけです。

日本語対応モデルの利用方法

OnnxOcrのインスタンスを作成する際に、lang引数に'japan'と指定します。これにより、ライブラリは自動的に日本語の学習済みモデルをダウンロードして使用します。

# 日本語モデルを指定してインスタンスを作成
ocr_japanese = OnnxOcr(lang='japan')

日本語OCRのサンプルコード

それでは、日本語のテキストが書かれた画像(例: sample_jp.png)を使って、実際に文字認識を行うサンプルコードを見てみましょう。

# onnxocrライブラリからOnnxOcrクラスをインポート
from onnxocr import OnnxOcr

# 1. 日本語モデルを指定してインスタンスを作成
print("日本語モデルを読み込んでいます...")
ocr_japanese = OnnxOcr(lang='japan')
print("モデルの読み込み完了。")

# 2. OCRを実行したい画像のパスを指定
image_path_jp = 'sample_jp.png'

# 3. OCRを実行
print(f"'{image_path_jp}'のOCR処理を開始します...")
result_jp = ocr_japanese.ocr(image_path_jp)
print("OCR処理完了。")

# 4. 認識結果を分かりやすく表示
print("\n--- 日本語OCR認識結果 ---")
if result_jp:
    # 認識されたテキストを上から順に並べ替える(y座標の左上の値でソート)
    sorted_results = sorted(result_jp, key=lambda x: x['box'][0][1])
    
    for item in sorted_results:
        print(f"テキスト: {item['text']}, 信頼度: {item['score']:.4f}")
else:
    print("テキストが検出されませんでした。")

縦書きや複雑なレイアウトの注意点

onnxocrは縦書きの日本語もある程度認識できますが、行の順序が意図通りに取得できない場合があります。その場合は、上記コードのように、取得した座標情報(box)を元に、y座標(縦書きならx座標)で結果を並べ替えるといった後処理を加えることで、正しい文章の順序を復元できます。


5. onnxocrをさらに活用するためのTips

ここでは、より実践的にonnxocrを使いこなすための便利なテクニックをいくつか紹介します。

信頼度(スコア)で結果をフィルタリングする

OCRの結果には、ノイズや誤認識も含まれることがあります。そんな時は、結果に含まれる信頼度(score)を使って、一定の品質以下の結果を除外するのが有効です。

Python

# 信頼度が0.85以上の結果だけを抽出する
high_score_results = [item for item in result_jp if item['score'] >= 0.85]

print("\n--- 高信頼度の結果のみ表示 ---")
for item in high_score_results:
    print(f"テキスト: {item['text']}")

この一手間を加えるだけで、最終的なテキストの品質を大きく向上させることができます。

GPUを使って処理を高速化する

もしお使いのPCにNVIDIA製のGPUが搭載されているなら、GPU版のonnxruntimeをインストールするだけで、処理を劇的に高速化できます。(特に大量の画像を処理する場合に有効です)

1. 既存のCPU版をアンインストール

pip uninstall onnxruntime

2. GPU版をインストール

pip install onnxruntime-gpu

注意点: GPU版の利用には、対応するCUDAやcuDNNドライバの事前インストールが必要です。環境構築は少し複雑になりますが、速度向上の恩恵は絶大です。Pythonコード自体は変更する必要がなく、onnxruntime-gpuがインストールされていれば自動でGPUが使用されます。


まとめ

本記事では、軽量・高速なPython向けOCRライブラリonnxocrについて、その魅力からインストール方法、基本的な使い方、そして日本語OCRの実践方法までを詳しく解説しました。

  • onnxocrはONNX Runtimeベースで依存関係が少なく軽量・高速に動作する
  • pipコマンド一つで誰でも簡単にインストールできる
  • 数行のシンプルなコードで画像内の文字を簡単に抽出できる
  • 日本語のOCRもlang='japan'と指定するだけで手軽に実現可能
  • 信頼度でのフィルタリングや座標を使った並べ替えで、より実用的な結果を得られる

onnxocrは、その手軽さとパフォーマンスから、個人の開発プロジェクトやシンプルなスクリプト、Webアプリケーションのバックエンドまで、非常に幅広い用途で活躍するポテンシャルを秘めています。

ぜひ本記事を参考に、あなたのプロジェクトでonnxocrを使ったOCR機能を試してみてください。

コメント

タイトルとURLをコピーしました