【スポンサーリンク】

タイピングゲームの画面から文字を読み取るPythonプログラムの作り方

  • Pythonを使用して、タイピングゲームの画面から問題文を自動的に読み取るプログラムを作成します。
  • 画面上の指定領域をキャプチャし、画像処理とTesseract-OCRを使用して文字認識を行います。
  • 文字認識の精度は画面状態に依存しますが、キャプチャした画像を確認しながら調整することができます。
\記事が役に立ったらシェアしてね/
【スポンサーリンク】

1. Pythonで

タイピングゲームの練習をする際、問題文を自動で記録したいと思いました。
今回は、Pythonを使って画面上の文字を読み取ってみました。

必要な環境
  • Mac(またはWindows/Linux)
  • Python 3.x
  • ターミナル(コマンドライン)の基本的な使い方

2. 準備するもの

以下のツールとライブラリが必要です:

  1. Homebrew(Macのパッケージ管理ツール)
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
  1. Tesseract-OCR(文字認識エンジン)
brew install tesseract
brew install tesseract-lang
  1. 必要なPythonライブラリ
pip3 install opencv-python
pip3 install pyautogui
pip3 install pytesseract
pip3 install pillow

3. プログラムの作成

以下のプログラムをtyping_capture.pyという名前で保存します:

import cv2
import numpy as np
import pyautogui
import pytesseract
from PIL import Image
import time

def get_window_position():
    """マウスクリックで領域を選択する"""
    print("問題文が表示される領域の左上隅にマウスを移動して3秒待ちます...")
    time.sleep(3)
    x1, y1 = pyautogui.position()
    print(f"左上の座標を記録: ({x1}, {y1})")

    print("次に右下隅にマウスを移動して3秒待ちます...")
    time.sleep(3)
    x2, y2 = pyautogui.position()
    print(f"右下の座標を記録: ({x2}, {y2})")

    return (min(x1, x2), min(y1, y2), 
            abs(x2 - x1), abs(y2 - y1))

def get_game_text(region):
    try:
        screenshot = pyautogui.screenshot(region=region)
        frame = np.array(screenshot)
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)
        gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        _, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY_INV)

        cv2.imwrite('captured_area.png', frame)
        cv2.imwrite('processed_area.png', binary)

        text = pytesseract.image_to_string(binary, lang='jpn')
        return text.strip()

    except Exception as e:
        print(f"エラーが発生しました: {e}")
        return ""

def main():
    print("認識したい領域を選択します")
    region = get_window_position()
    print(f"選択された領域: x={region[0]}, y={region[1]}, width={region[2]}, height={region[3]}")

    print("\n文字認識を開始します。Ctrl+Cで終了。")

    last_text = ""
    try:
        while True:
            text = get_game_text(region)
            if text and text != last_text:
                print(f"検出テキスト: {text}")
                last_text = text
            time.sleep(0.5)
    except KeyboardInterrupt:
        print("\n終了しました")

if __name__ == "__main__":
    main()

4. プログラムの実行方法

  1. 画面収録の許可設定
  • システム環境設定 → セキュリティとプライバシー → プライバシー
  • 左側メニューから「画面収録」を選択
  • ターミナルアプリにチェックを入れる
  1. プログラムの実行
   python3 typing_capture.py
  1. 領域の選択
  • プログラムを実行したら、タイピングゲームの問題文が表示される領域の左上にマウスを移動
  • 3秒待つと座標が記録される
  • 次に右下に移動して3秒待つ
  • 自動的に文字認識が開始される
  1. プログラムの終了
  • Ctrl+Cを押すと終了

5. プログラムの動作の仕組み

  1. 領域の選択
  • マウスの位置を使って、読み取りたい画面の範囲を指定します
  1. 画面キャプチャ
  • 指定した範囲の画面をキャプチャします
  • キャプチャした画像はcaptured_area.pngとして保存されます
  1. 画像処理
  • キャプチャした画像をグレースケール化
  • 白黒の二値化処理を行い、文字認識しやすくします
  • 処理後の画像はprocessed_area.pngとして保存されます
  1. 文字認識
  • Tesseract-OCRを使って、画像から文字を読み取ります
  • 日本語対応の文字認識を行います
  1. 結果の表示
  • 認識した文字列が変化したときのみ、新しい文字列を表示します

6. トラブルシューティング

もし文字認識がうまくいかない場合:

  1. captured_area.pngを確認して、正しい領域をキャプチャできているか確認
  2. processed_area.pngを確認して、文字が明確に見えるか確認
  3. 必要に応じて領域の選択をやり直す

7. まとめ

このプログラムは、タイピングゲームの問題文を自動的に読み取り、記録します。
文字認識の精度は画面の状態や文字の見え方によって変わることがありますが、captured_area.pngprocessed_area.pngを確認しながら調整することで、より良い結果を得ることができます。

QRコードを読み込むと、関連記事を確認できます。

タイピングゲームの画面から文字を読み取るPythonプログラムの作り方
【スポンサーリンク】
タイトルとURLをコピーしました