【Android自動化】OCRを使用して画像内の文字を認識し、座標を取得する関数【Python】

この関数は、デバイスの解像度を使用し、画像内の特定のテキストを認識、そのテキストの中央の座標を返すために設計されています。以下はこの関数の詳細な説明です。

関数の定義

def recognize_text_with_coordinates(image_path, target_text, screen_width, screen_height):
  • image_path:テキストを認識する対象の画像ファイルのパス。

  • target_text:認識したいテキスト。

  • screen_width:表示スクリーンの幅。

  • screen_height:表示スクリーンの高さ。

画像の読み込みと基本情報の取得

    image = cv2.imread(image_path)
    img_height, img_width = image.shape[:2]
  • cv2.imread(image_path):OpenCVを使用して画像を読み込みます。

  • image.shape[:2]:画像の高さと幅を取得します。

OCRの実行

    data = pytesseract.image_to_data(image, lang='jpn', output_type=pytesseract.Output.DICT)
  • pytesseract.image_to_data:Tesseract OCRを使用して画像内のテキストを認識し、結果を辞書形式で取得します。lang='jpn'は日本語のテキスト認識を指定しています。

テキストの認識と座標の取得

    n_boxes = len(data['text'])
    for i in range(n_boxes):
        if int(data['conf'][i]) > 60:  # 確信度が60以上のテキストのみを対象とする
            if data['text'][i] == target_text:
                (x, y, w, h) = (data['left'][i], data['top'][i], data['width'][i], data['height'][i])
                # 画像の解像度に基づいて座標をスケーリング
                x = x * (screen_width / img_width)
                y = y * (screen_height / img_height)
                return (int(x + w // 2 * (screen_width / img_width)), int(y + h // 2 * (screen_height / img_height)))  # バウンディングボックスの中央座標を返す
  • n_boxes:認識されたテキストの数を取得します。

  • ループ内で各テキストの確信度をチェックし、60以上のものだけを対象にします。

  • 認識されたテキストがtarget_textと一致する場合、そのテキストの座標情報(左上の座標x, yと幅w, 高さh)を取得します。

  • 画像の解像度に基づいて座標をスケーリングし、スクリーンの解像度に合わせて調整します。

  • バウンディングボックスの中央の座標を計算し、返します。

テキストが見つからない場合

    return None
  • target_textが画像内で見つからない場合はNoneを返します。

使用例

画像認識では自動化が困難な場合等に、このテキスト認識をし
デバイスの解像度、スクリーンショットを使用しタップ座標を正確に取得
その後タップするという流れを作る為の関数となります

ここから先は

867字

¥ 300

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