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 ん I ⑧M 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」を利用することでし処理速度と、精度を両立できる可能性を秘めています。
この記事が気に入ったらサポートをしてみませんか?