はじめに
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の精度を大幅に向上させることができます。