人気ブログランキング
人気ブログランキング
Python PR

EasyOCRとTesseract OCRの比較と導入方法

記事内に商品プロモーションを含む場合があります

はじめに

OCR(光学文字認識)技術は、画像やPDFからテキストを抽出するために広く活用されています。今回は、人気のある2つのOCRライブラリ「EasyOCR」と「Tesseract OCR」について、それぞれの特徴や導入方法、基本的な使い方を詳しく紹介します。


1. EasyOCRとは?

1.1 EasyOCRの特徴

EasyOCRは、Python向けのOCRライブラリで、Facebook AI Researchが開発したディープラーニングモデルを活用しています。

以下のような特徴があります。

  • 対応言語が多い(80以上の言語をサポート)
  • 手書き文字や特殊フォントの認識が可能
  • 比較的高精度なOCR結果を得られる
  • インストールと使用が簡単
  • GPUを利用できるため、高速な処理が可能

1.2 EasyOCRのインストール方法

EasyOCRはpipを使って簡単にインストールできます。

pip install easyocr

GPUを使用する場合は、torchのバージョンに注意しながらインストールを行います。

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install easyocr

1.3 EasyOCRの基本的な使い方

EasyOCRを使用して画像内のテキストを抽出する方法は非常にシンプルです。

import easyocr

# OCRエンジンの初期化(日本語と英語をサポート)
reader = easyocr.Reader(['ja', 'en'])

# 画像内のテキストを認識
results = reader.readtext('sample_image.jpg')

# 認識結果の表示
for (bbox, text, prob) in results:
    print(f'Text: {text}, Confidence: {prob}')

1.4 EasyOCRの調整方法

EasyOCRの精度を向上させるには、以下の方法を試してみてください。

  • 画像の前処理を行う(ノイズ除去、コントラスト強調、リサイズ)
  • 異なる言語モデルを試す['ja', 'en'] のように適切な言語モデルを設定)
  • GPUを活用して高速化
  • テキストの閾値(threshold)を調整する
results = reader.readtext('sample_image.jpg', detail=1, paragraph=True, contrast_ths=0.5, adjust_contrast=0.7)

readtext()のパラメーター詳細

readtext()のパラメーターを適切に調整することで、認識精度を向上させることができます。

  • image (str or np.ndarray) : 画像ファイルのパスまたはNumPy配列
  • detail (int, デフォルト=1) : 0にするとテキストのみ、1にすると詳細な情報(バウンディングボックス、確信度)を返す
  • paragraph (bool, デフォルト=False) : Trueにすると段落単位でグループ化
  • contrast_ths (float, デフォルト=0.1) : コントラスト調整の閾値(高いほど強調)
  • adjust_contrast (float, デフォルト=0.0) : コントラスト調整の強度
  • text_threshold (float, デフォルト=0.7) : テキストと判断する閾値
  • low_text (float, デフォルト=0.3) : テキスト領域の検出感度
  • link_threshold (float, デフォルト=0.4) : 文字間のリンクの閾値(文字を一塊として認識する)
  • decoder (str, デフォルト=’greedy’) : ‘greedy’ または ‘beamsearch’ を指定可能

2. Tesseract OCRの調整方法

Tesseract OCRの精度を向上させるには、以下の方法を試してみてください。

  • 画像の前処理を行う(二値化、ノイズ除去、解像度の向上)
  • 適切なOCRエンジンモード(OEM)とページセグメンテーションモード(PSM)を指定する
  • 特定の言語モデルを指定する(カスタムトレーニングも可能)
  • 画像の解像度を適切に設定する(300 DPI 以上推奨)
import pytesseract
from PIL import Image
import cv2

# 画像の前処理
img = cv2.imread('sample_image.jpg')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
binarized = cv2.threshold(gray, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)

# OCRの実行
custom_config = r'--oem 3 --psm 6'
text = pytesseract.image_to_string(binarized, lang='jpn', config=custom_config)
print(text)

image_to_string()のパラメーター詳細

  • oem (OCR Engine Mode)
    • 0: レガシーエンジンのみ
    • 1: LSTMエンジンのみ
    • 2: 両方のエンジンを組み合わせる
    • 3: LSTMが優先
  • psm (Page Segmentation Mode)
    • 3: 単一ブロックの自動検出
    • 6: 単一ユニフォームテキスト行
    • 11: スパーステキスト

適切なパラメーターを設定し、画像の前処理を行うことでTesseract OCRの精度を大幅に向上させることができます。


ABOUT ME
den
完全独学でWEBデザインやpythonアプリ製作や流体解析を無謀にも挑戦している中年男。生成AIのおかげで独学が出来る世の中に感謝。 工場勤務の会社員で3児の父。 チャレンジを忘れず、妻に怒られても心はおれず。 有益な情報を発信し、これを見ている人の為になればと思っています。
関連記事一覧