Pythonで画像から日本語を読み取る!EasyOCRの基本的な使い方と実践サンプルコード

easyocr

「画像に含まれる日本語のテキストを抽出したいけど、何から始めればいいかわからない…」

Pythonを使ってOCR(光学的文字認識)に挑戦しようとしたとき、多くの方が環境構築の複雑さや日本語への対応でつまずいてしまいます。

この記事では、そんな悩みを解決するPythonライブラリEasyOCRを紹介します。

この記事であなたが手に入れられること

  • EasyOCRを自分のPCにインストールする方法
  • たった数行で画像から日本語を読み取るシンプルなコード
  • 読み取った結果から、必要なテキスト情報だけを取り出す方法
  • 英語と日本語が混在した画像に対応する実践的なコード

この記事を最後まで読めば、あなたもPythonで手軽に日本語OCRを試せるようになります。

EasyOCRが日本語OCRの「はじめの一歩」に最適な理由

EasyOCRは、その名の通り「手軽さ」が最大の魅力です。

数あるOCRライブラリの中でも、特にEasyOCRが初心者の「はじめの一歩」として推奨されるのには、以下のような理由があります。

  1. シンプルなインストール: 従来のOCRライブラリ(例えばTesseract)で日本語を扱う際に必要だった、言語モデルのダウンロードやパス設定といった煩雑な作業が不要です。
  2. 直感的なコード: PyTorchという強力な深層学習フレームワークをベースにしていますが、ユーザーはそれを意識することなく、非常に短いコードでOCRを実行できます。
  3. 多言語対応: 初期設定で日本語を含む80以上の言語に対応しており、コードを少し変更するだけで様々な言語の読み取りを試せます。

もちろん、業務レベルで非常に高い精度が求められる場面では、商用のOCR APIなどを検討する必要があるかもしれません。しかし、「まずは自分の手元でOCRを動かしてみたい」という方にとって、EasyOCRは最高の選択肢と言えるでしょう。


2. 動作環境の準備:EasyOCRのインストール手順

EasyOCRを動かすために、まずは必要なライブラリをインストールしましょう。手順は大きく分けて2つです。

2-1. 最初にPyTorchをインストール

EasyOCRは、内部でPyTorchというライブラリを利用しています。そのため、先にPyTorchをインストールしておくことが推奨されています。

公式サイトにアクセスし、ご自身の環境(OS、パッケージ管理ツール、CUDAの有無など)に合ったインストールコマンドを取得して実行するのが最も確実です。

PyTorch公式サイトのインストールガイド

例えば、Windowsでpipを使い、CUDA(NVIDIAのGPU)を使わない場合のコマンドは以下のようになります。

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

2-2. pipコマンドでEasyOCRをインストール

PyTorchの準備ができたら、あとはpipコマンドでEasyOCR本体をインストールするだけです。

pip install easyocr

これだけで環境構築は完了です。非常に簡単ですね。


3. 【基本編】まずは動かそう!日本語OCRの基礎コード

それでは、実際にEasyOCRを使って画像から日本語を読み取ってみましょう。ここでは、以下のようなシンプルな画像 sample-jp.png を用意したと仮定して進めます。

3-1. 日本語モデルを指定してReaderを準備する

EasyOCRを使う最初のステップは、どの言語を読み取るかを指定してReaderオブジェクトを作成することです。日本語を読み取る場合は、言語リストに'ja'(Japanese)を指定します。

import easyocr

# 日本語と英語の言語モデルを指定してReaderを初期化
# 初回実行時はモデルのダウンロードが自動的に行われます
reader = easyocr.Reader(['ja', 'en']) 

easyocr.Reader()の引数に、使いたい言語の略称をリスト形式で渡します。ここでは日本語'ja'と、念のため英語'en'も指定しています。初回実行時には、これらの言語モデルが自動でダウンロードされるため、少し時間がかかります。

3-2. readtext()で画像から文字情報を取得する

次に、readtext()メソッドを使って、画像のパスを渡すだけでOCRが実行されます。

import easyocr

# Readerの準備
reader = easyocr.Reader(['ja', 'en'])

# 画像ファイルを指定してOCRを実行
image_path = 'sample-jp.png'
result = reader.readtext(image_path)

# 結果を出力
for detection in result:
    print(detection)

3-3. 実行結果の読み解き方(座標・テキスト・信頼度)

上記のコードを実行すると、コンソールに以下のような結果が出力されます。

([[39, 20], [262, 20], [262, 82], [39, 82]], 'こんにちは', 0.852)
([[28, 110], [376, 110], [376, 168], [28, 168]], 'EasyOCRの世界へ', 0.798)

readtextメソッドの戻り値は、検出されたテキストごとの情報がリストになっています。各要素は、以下の3つの情報を含んでいます。

  1. バウンディングボックスの座標: [[左上], [右上], [右下], [左下]] の形式で、検出されたテキストが画像のどの位置にあるかを示します。
  2. 検出されたテキスト: 認識された文字列です。
  3. 信頼度(Confidence Score): 0から1の間の数値で、この認識結果がどれくらい確からしいかを示します。1に近いほど信頼性が高いことを意味します。

4. 【実践編】コピペで使える!EasyOCR活用サンプルコード集

基本的な使い方が分かったところで、もう少し実践的なコードを見ていきましょう。

4-1. 読み取った日本語テキストだけを抽出して表示する

座標や信頼度は不要で、読み取ったテキスト文字列だけが欲しい、という場面は非常に多いです。その場合は、結果をループで処理してテキスト部分だけを取り出します。

import easyocr

reader = easyocr.Reader(['ja', 'en'])
image_path = 'sample-jp.png'
result = reader.readtext(image_path)

# 検出結果からテキストだけを抽出してリストに格納
detected_texts = [detection[1] for detection in result]

# 抽出したテキストを改行で連結して表示
print('\n'.join(detected_texts))

実行結果

こんにちは
EasyOCRの世界へ

4-2. 複数行にわたる日本語の文章をOCRにかける

EasyOCRは、特別な設定なしで複数行のテキストも自動的に個別のブロックとして認識してくれます。先ほどのコードをそのまま使うだけで、各行のテキストがリストの要素として得られます。

4-3. 英語と日本語が混在した画像を読み取る方法

チラシやポスター、Webサイトのスクリーンショットなど、日本語と英語が混在している画像を扱うこともよくあります。

Readerを初期化する際に、['ja', 'en']のように両方の言語を指定しておけば、EasyOCRが自動的に言語を判別して読み取ってくれます。

import easyocr

# 日本語と英語を両方指定
reader = easyocr.Reader(['ja', 'en'])

# 日本語と英語が混在した画像 (sample-jp-en.png) を読み込む
result = reader.readtext('sample-jp-en.png')

for detection in result:
    print(f'Text: {detection[1]}, Confidence: {detection[2]:.2f}')

4-4. 信頼度(confidence)で結果をフィルタリングする

OCRの結果には、誤認識されたノイズのようなテキストが含まれることがあります。そうした信頼性の低い結果を除外したい場合は、信頼度(Confidence Score)を使ってフィルタリングするのが有効です。

import easyocr

reader = easyocr.Reader(['ja', 'en'])
result = reader.readtext('sample-jp.png')

# 信頼度が0.8以上の結果だけを抽出
high_confidence_texts = [
    detection[1] for detection in result if detection[2] > 0.8
]

print('\n'.join(high_confidence_texts))

実行結果

こんにちは

この例では、信頼度が0.8未満だった「EasyOCRの世界へ」というテキストが除外されました。この閾値(いきち)は、要件に応じて調整してください。


5. 日本語の読み取り精度について

EasyOCRは非常に手軽ですが、画像の品質によっては日本語の認識精度が落ちることもあります。

5-1. 精度向上の基本は画像の前処理

もし認識がうまくいかない場合は、OCRにかける前の「前処理」が有効な場合があります。

  • グレースケール化・二値化: 画像を白黒に変換することで、文字と背景のコントラストが明確になります。
  • ノイズ除去: 画像に含まれる不要な点や線を消します。
  • リサイズ: 小さすぎる文字は拡大することで認識しやすくなる場合があります。

これらの処理は、OpenCVなどの画像処理ライブラリと組み合わせて行います。

5-2. EasyOCRの限界と他の選択肢

EasyOCRは、手軽にOCRを試すための素晴らしいツールです。しかし、かすれた文字や特殊なフォント、複雑な背景を持つ画像など、厳しい条件下での日本語認識は得意ではありません。

もしEasyOCRで十分な精度が得られず、より高い精度が求められる場合は、以下のような他の選択肢を検討すると良いでしょう。

  • Google Cloud Vision API などのクラウドベースOCRサービス
  • Tesseract OCR を詳細に設定して利用する

6. まとめ:EasyOCRは日本語OCRを手軽に始める最良の選択肢

今回は、PythonライブラリのEasyOCRを使って、画像から日本語テキストを読み取る方法を解説しました。

  • EasyOCRはインストールとコードが非常にシンプル
  • Readerで言語を指定し、readtextでOCRを実行するだけ
  • 日本語と英語の混在にも対応可能
  • 結果には座標・テキスト・信頼度が含まれ、応用が効く

まずはEasyOCRでOCRの世界に触れてみて、その可能性を体験してみてください。

コメント

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