はじめに
「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には明確なメリットがあります。
| 項目 | onnxocr | EasyOCR |
| 実行速度 | 非常に高速 (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 OnnxOcr2. 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 onnxruntime2. 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機能を試してみてください。


コメント