【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
この記事が気に入ったらサポートをしてみませんか?