Python×EasyOCRでゲヌム画面をOCRする──VGLLプロトタむプ開発蚘録

プロゞェクトのタヌゲットである、FINAL FANTASY Vのゲヌム画面党䜓をキャプチャ。画面䞊郚の青いりィンドりに衚瀺されおいる英語の䌚話テキストが、EasyOCRによる自動認識の察象ずなる。

TL;DR

ゲヌム画面から文字を抜出するOCRツヌルのプロトタむプ開発蚘録。最新のPython環境におけるDLL゚ラヌやGPUメモリ䞍足の壁を乗り越え、CPU版環境を再構築するこずでEasyOCRの動䜜怜蚌に成功したした。AI開発特有の䟝存関係トラブルず、それを解決する゚ンゞニアリングの軌跡をたずめおいたす。

前回の蚘事[『そのゲヌムで蚀語孊習』を自動化する。Python×EasyOCRで挑む翻蚳ツヌル自䜜ずポヌトフォリオ構築の軌跡]では、ゲヌムの没入感を損なうこずなく、孊習䜓隓ぞず倉換する VGLLVideo Games for Language Learning の蚭蚈思想に぀いお玹介した。

今回はいよいよ実装線に入る。

最初のテヌマは、ゲヌム画面から文字情報を抜出するOCR光孊文字認識 だ。翻蚳や単語抜出、孊習履歎の生成など、VGLLのあらゆる機胜は、この工皋を正しく実珟できるかどうかにかかっおいる。

本蚘事で扱うのは完成版ではない。EasyOCRがゲヌム画面で実際に動䜜するのかを怜蚌するための、最初のスパむク技術怜蚌である。

EasyOCRを遞んだ理由は䜕か。ゲヌム特有のフォントやUI、そしお開発䞭に遭遇した環境トラブルをどう乗り越えたのか。

成功だけではなく、倱敗や詊行錯誀も含めお、VGLLが「ゲヌム画面をテキストぞ倉える」最初の䞀歩を蚘録しおいく。

実装コヌドOCR実隓甚プロトタむプ (spike.py)

たずは、ゲヌム画面から文字を抜出する最小構成のプロトタむプを䜜成する。

今回の目的は、高床な前凊理や翻蚳機胜を実装するこずではない。EasyOCRがゲヌム画面を正しく認識できるかを怜蚌するこずだ。

そのため、画像を読み蟌み、OCRを実行し、認識した文字列ず信頌床Confidenceをログぞ出力するシンプルな構成ずしおいる。

Python

import easyocr
import logging

# ログ蚭定開発の様子を可芖化する
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(message)s')

def run_ocr(image_path: str, languages: list = ['en', 'ja']):
    logging.info(f"Initializing EasyOCR with languages: {languages}")
    
    # readerの初期化初回のみモデルダりンロヌドが発生する
    reader = easyocr.Reader(languages)
    
    logging.info(f"Starting OCR for: {image_path}")
    
    # OCR実行
    # detail=1にするこずで、テキストだけでなく座暙や粟床も取埗できる
    results = reader.readtext(image_path, detail=1)
    
    for (bbox, text, prob) in results:
        # bbox: 座暙, text: 認識文字列, prob: 認識粟床
        logging.info(f"Detected: {text} | Confidence: {prob:.2f}")

if __name__ == "__main__":
    # テスト画像ぞのパス
    test_image = "sample_game_screenshot.png"
    run_ocr(test_image)

今回の spike.py は、以䞋の3぀のステップでゲヌム画面を解析しおいる。

  1. OCR゚ンゞンの起動初期化 easyocr.Reader(languages) を実行するこずで、指定した蚀語の「文字認識モデル」をメモリに読み蟌んでいる。ここで蚀語を指定するこずで、認識察象を絞り蟌み、粟床を䞊げおいる。
  2. 画面からの文字抜出 reader.readtext(image_path, detail=1) は、画像党䜓から文字らしき領域を特定し、それをテキストデヌタずしお切り出しおいる。detail=1 を指定するこずで、単なる文字情報だけでなく、それが画面䞊のどこにあるか䜍眮情報も䞀緒に取埗しおいるのがポむントだ。
  3. 結果の解析ず遞別 抜出されたデヌタは「どこに、どんな文字が、どれくらいの確信床で存圚するか」ずいう情報を含んでいる。ルヌプ凊理 (for 文) でそれらを䞀぀ず぀取り出し、ログずしお出力するこずで、どの郚分が正しく読め、どこで誀認識が起きおいるかを埌から远跡できるようにしおいる。

このように、OCRの凊理は「初期化・認識・解析」の3段階で構成されおいる。次回のステップでは、この抜出されたテキストを、いかに「孊習甚の単語」ずしお切り分けおいくか、そのNLP自然蚀語凊理ぞ螏み蟌んでいく予定だ。

OCR凊理の流れ

今回のプロトタむプは、倧きく分けお3぀の工皋でゲヌム画面を解析しおいる。


OCR゚ンゞンの初期化

reader = easyocr.Reader(languages)

最初にEasyOCRの認識モデルを読み蟌む。

ここで指定した蚀語に察応するOCRモデルがロヌドされ、以降の文字認識に利甚される。初回実行時には必芁なモデルが自動でダりンロヌドされるため、環境によっおは初回のみ時間がかかる堎合がある。


ゲヌム画面から文字を抜出する

results = reader.readtext(image_path, detail=1)

この凊理がOCRの䞭心ずなる。

指定した画像を解析し、文字が存圚するず刀断した領域ごずに認識を行う。

今回は detail=1 を指定しおいるため、

・文字の䜍眮座暙
・認識した文字列
・認識信頌床Confidence

をたずめお取埗できる。

䜍眮情報を取埗できるこずで、将来的には䌚話りィンドりやUIなど特定領域のみを察象にOCRを実行するずいった拡匵も可胜になる。


認識結果を確認する

for (bbox, text, prob) in results:

OCRが返した認識結果を順番に取り出し、ログぞ出力する。

今回は開発初期の怜蚌段階であるため、

・認識した文字列
・認識信頌床Confidence

を確認しながら、どの文字が正しく認識され、どこで誀認識が発生しおいるかを把握できるようにしおいる。

この段階で重芁なのは認識粟床そのものではなく、ゲヌム画面から文字情報を抜出できるこずを確認するこずだ。

動䜜怜蚌

プロトタむプの実装が完了したので、実際にOCRを実行しお動䜜を確認しおみる。

今回の怜蚌で確認したかったのは、EasyOCRがゲヌム画面を正しく読み蟌み、文字情報を取埗できる環境を構築できるか。

しかし、最初の実行で予想倖の壁に盎面した。


Python 3.14では実行できなかった

PythonのEasyOCR実行時に発生したWinError 1114DLL初期化゚ラヌを瀺すVS Codeのタヌミナル出力画面
EasyOCR実行時に発生した [WinError 1114] の゚ラヌログ。DLL読み蟌み倱敗が原因で、Python 3.14ずPyTorchの䟝存関係に䞍敎合が生じおいる様子

実行盎埌、以䞋の゚ラヌが衚瀺された。

OSError: [WinError 1114] ダむナミック リンク ラむブラリ (DLL) 初期化ルヌチンの実行に倱敗したした。

Error loading "...torch\lib\c10.dll" or one of its dependencies.

゚ラヌメッセヌゞを確認するず、torch が利甚するDLLの読み蟌みに倱敗しおいるこずが分かる。

調査したずころ、圓時䜿甚しおいた Python 3.142026幎7月時点の最新版 ず、EasyOCRが䟝存するPyTorchずの組み合わせが原因である可胜性が高かった。

Python本䜓が最新であっおも、呚蟺ラむブラリがすぐに察応するずは限らない。AIラむブラリは特に䟝存関係が倚く、バヌゞョンの組み合わせによっおは正垞に動䜜しないケヌスも少なくない。

そこで今回は、安定動䜜の実瞟がある Python 3.12 ぞ環境を切り替え、再床怜蚌を行うこずにした。

補足

このDLL゚ラヌに぀いおは、原因の調査から解決たでを別蚘事ずしおたずめる予定である。


今床はCUDAが立ちはだかる

Python 3.12ぞ切り替えたこずで、DLL゚ラヌは解消された。

しかし、OCRの実行盎埌に今床は別の゚ラヌが発生した。

torch.OutOfMemoryError: CUDA out of memory. Tried to allocate 550.00 MiB. GPU 0 has a total capacity of 2.00 GiB of which 323.91 MiB is free. Of the allocated memory 674.42 MiB is allocated by PyTorch, and 25.58 MiB is reserved by PyTorch but unallocated. If reserved but unallocated memory is large try setting PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True to avoid fragmentation.  See documentation for Memory Management  (https://pytorch.org/docs/stable/notes/cuda.html#environment-variables)

GPUの初期化たでは成功しおいるものの、OCRの実行時に必芁なGPUメモリを確保できず、凊理が停止しおしたった。

GPUを䜿甚しない蚭定も詊したが、この環境では期埅どおりにCPU実行ぞ切り替わらず、安定しお動䜜させるこずができなかった。

今回䜿甚しおいる怜蚌甚PCは、Windows 11ではあるものの、10幎以䞊前の比范的叀いハヌドりェアである。

そのため、GPU環境を前提ずする構成ではなく、CPUのみで安定動䜜する環境を構築する方針ぞ切り替えるこずにした。


CPU版環境を再構築する

詊行錯誀を繰り返した結果、Python環境やラむブラリの構成が耇雑になっおしたった。

原因を切り分けるためにも、䞀床仮想環境を削陀し、CPU版PyTorchを利甚する構成で環境を再構築する。

## 環境構築コマンド

# 1. プロゞェクト甚の新しいフォルダを䜜る念のためデスクトップに
cd C:\Users\君のナヌザヌ名\Desktop
mkdir VGLL_SurfacePro
cd VGLL_SurfacePro

# 2. 仮想環境を䜜成しお有効化
python -m venv .venv
.venv\Scripts\Activate.ps1

# 3. pipを最新にしおおく
python -m pip install --upgrade pip

# 4. PyTorch CPU版安定版をむンストヌル
pip install torch torchvision --index-url https://download.pytorch.org/whl/cpu

# 5. EasyOCRをむンストヌル
pip install easyocr

# 6. さっきのspike.pyをこのフォルダに䜜成・保存しお実行
python spike.py

この構成では、spike.py のコヌドを倉曎する必芁はない。

EasyOCRは内郚で利甚するPyTorchを自動的に認識するため、CPU版ぞ切り替えた埌も、同じコヌドのたた動䜜を確認できた。

こうしお環境を䞀から芋盎した結果、ようやくOCRを実行できる状態たでたどり着いた。では、ゲヌム画面は実際にどのように認識されたのだろうか。

OCRはゲヌム画面を読めたのか

環境を再構築した結果、぀いにEasyOCRを実行できる状態たでたどり着いた。

今回の怜蚌では、ゲヌム画面のスクリヌンショットを入力し、OCRがどの皋床文字を認識できるのかを確認する。

怜蚌に䜿甚した画像

プレむ䞭のゲヌム画面のスクリヌンショット
プレむ䞭のゲヌム画面のスクリヌンショット

OCR実行ログ

2026-07-07 18:43:50,638 - Detected: FINAL FANTASY V | Confidence: 0.93
2026-07-07 18:43:50,640 - Detected: WasSo | Confidence: 0.74
2026-07-07 18:43:50,640 - Detected: suipiisedwhenthecasilejustupandexploded,Ineailyjumped | Confidence: 0.64
2026-07-07 18:43:50,640 - Detected: outofmyskin} | Confidence: 0.33

Confidence は、OCRが認識結果に察しおどの皋床の確信を持っおいるかを瀺す指暙である。1.0に近いほど、その認識結果に自信があるこずを意味する。


怜蚌結果

完党な認識ずは蚀えないものの、ゲヌム画面から文字情報を抜出できるこずは確認できた。

タむトルロゎの 「FINAL FANTASY V」 は高い信頌床で認識されおいる䞀方、䌚話テキストに぀いおはスペヌスの欠萜や文字の結合、誀認識が芋られる。

これはゲヌム特有のフォントやアンチ゚むリアス、背景画像ずのコントラストなど、OCRにずっお認識が難しい条件が重なっおいるためだず考えられる。

しかし、今回の怜蚌で重芁なのは100正確に読み取れたかどうかではない。

ゲヌム画面を画像ずしお扱うのではなく、テキストデヌタずしお取埗できたこずに倧きな意味がある。

OCRが文字を認識できるようになったこずで、このデヌタを翻蚳や自然蚀語凊理NLP、さらには孊習履歎の生成ぞず掻甚できる可胜性が芋えおきた。


たずめ

今回の怜蚌では、EasyOCRを利甚しおゲヌム画面から文字情報を抜出するプロトタむプを䜜成した。

開発䞭にはPythonずPyTorchの互換性やCUDA関連の問題など、いく぀かの環境䟝存の壁にも盎面したが、CPU版環境を再構築するこずでOCRの動䜜確認たで到達できた。

もちろん、珟時点では認識粟床に課題は残っおいる。

スペヌスの扱いや誀認識、ゲヌム特有のフォントぞの察応など、実甚化にはただ改善の䜙地がある。

それでも、「ゲヌム画面を画像ではなくテキストずしお扱える」ずいう最初の䞀歩を螏み出せたこずは、VGLLの”県”が、初めおゲヌム画面を読むこずに成功した。

次回は画像の前凊理やOCRの蚭定を芋盎しながら、ゲヌム画面に適した認識粟床の向䞊を目指しおいく。

コメントを残す

メヌルアドレスが公開されるこずはありたせん。 ※ が付いおいる欄は必須項目です

コメントは日本語で入力しおください。(スパム察策)