Tesseract OCR VS EasyOCR

はじめに

AITuberとノベルゲームを共に楽しむために、ゲーム内のテキストを読み取り、AITuberが読み上げるシステムの構築を目指しています。
この記事では、Pythonで利用可能な複数のOCR(光学文字認識)ライブラリを試し、それぞれの認識精度と性能を比較してみました。

OCRライブラリの選定

今回検証したライブラリは以下の通りです:

  • Tesseract OCR: オープンソースで広く使われているOCRエンジン。

  • EasyOCR: ディープラーニングに基づく別の人気OCRツール。

認識テストに用いた画像

テスト画像1: ゲームスクリーンショットをトリミングのみ実施

ドキドキ文芸部より

テスト画像2:画像1を画像処理したデータ

白ピクセル以外を塗りつぶし

実装とテスト

Python環境でこれらのライブラリを実装し、同じノベルゲームのスクリーンショットを使ってテストを行いました。主な焦点は、認識精度と処理速度です。

Tesseract OCR

※日本語学習データをダウンロードしていない場合は、Githubより学習データをダウンロードし、Tesseract-OCR\tessdataにjpn.traineddataを投げ込んでおく必要があります。

Code:

import time
import pytesseract
from PIL import Image
processtime = time.time()

# Tesseractのパスを設定(Windowsの場合)
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'

# OCRを実行したい画像のパス
image_paths = ['screenshot.png','screenshot_white_black.png']

# 画像を開く
for item in image_paths:
    image = Image.open(item)
    # Tesseractを使用して画像からテキストを抽出
    text = pytesseract.image_to_string(image, lang='jpn')  # 'eng'は英語を示します。他の言語を使用する場合は適宜変更してください。
    # 抽出されたテキストを出力
    print(text)
    print(f"Time:{time.time()-processtime}")

Result:

国 ョ リ 国 誠 a 恐 圃 -

S 助 団 唇 思 び う \ 映 決 ③ 0 」

⑧ ⑥

) 颯 坪 に ④0 ん IM A 、 映 し ek い ④ 逢 ⑧

Time:0.6959872245788574
ヨ リ

` で

意 は 追 い つ い た か ら ね ! 」

Time:1.225987195968628

画像1 判定率0% / 処理時間:0.6s
画像2 判定率57% / 処理時間:1.2s

EasyOCR

Code:

import easyocr
import time

processtime = time.time()
# EasyOCRのリーダーを作成し、GPUを使用するように設定(GPUが利用可能な場合)
reader = easyocr.Reader(['ja','en'], gpu=True)

# OCRを実行したい画像のパス
image_paths = ['screenshot.png','screenshot_white_black.png']

# 画像を開く
for item in image_paths:
    results = reader.readtext(item)
    # 結果を出力
    for (bbox, text, prob) in results:
        print(f"Detected text: {text}, Confidence: {prob}")

    print(f"Time:{time.time()-processtime}")

Result:

Detected text: 留昌町, Confidence: 0.0005636956624874336
Detected text: 『@起令慶追-Dい症伽呂ね』』, Confidence: 0.0006256173518627475
Time:3.4588069915771484
Detected text: サヨリ, Confidence: 0.9992133658224639
Detected text: 「でも今度は追いついたからね!」, Confidence: 0.9358690380091483
Time:3.556983232498169

画像1 判定率0% / 処理時間:3.46s
画像2 判定率100% / 処理時間:3.56s

結論

検出精度については、EasyOCRが圧倒的かつ、簡単に導入することができます。しかし、TesseractOCRに比べ処理時間が3倍以上かかるのは、利用環境によっては致命的のため、処理速度が必要な場合は、TesseractOCRをつかう可能性が出てくると考えています。
今回のテストはPython3.11にて行っているため、候補に「PaddleOCR」を挙げませんでしたが、3.10以前の環境では「PaddleOCR」を利用することでし処理速度と、精度を両立できる可能性を秘めています。

この記事が気に入ったらサポートをしてみませんか?