文字認識操作

このセクションでは、OCRを使用してUI操作を補助する方法について説明します。ゲームアプリケーションなどの状況では、通常のUIセレクターが使用できない場合があります。このような場合、OCRを使用する方法を選択できます。OCR認識方式は、要素の存在確認、クリック、スクリーンショットなどの操作のみをサポートしています。OCRバックエンドライブラリは、paddleocr、easyocr、およびカスタムHTTPバックエンドインターフェースの使用をサポートしています。

OCRバックエンドの設定

OCR認識方式を使用する前に、まずOCRバックエンドを設定する必要があります。ご自身で事前に依存ライブラリをインストールする必要があります。

注目

クラスタ環境、つまり1台のコンピュータで複数のデバイスを制御操作する必要がある場合は、必ずご自身でOCR HTTPインターフェースとしてラップしてください。paddleocrやeasyocrを直接使用すると、各プロセスが重複してロードするため、ローカルマシンの大量のメモリや計算リソースを消費します。

paddleocrをバックエンドとして使用し、認識用のスクリーンショット品質を80に設定し、GPUアクセラレーションを使用します。

d.setup_ocr_backend("paddleocr", quality=80, use_gpu=True, drop_score=0.85, use_space_char=True)

easyocrをバックエンドとして使用し、認識用のスクリーンショット品質を80に設定し、簡体字中国語と英語を認識します。

d.setup_ocr_backend("easyocr", ["ch_sim", "en"], quality=80)

setup_ocr_backend の追加パラメータは、そのインスタンスを初期化するためのパラメータであるべきです。上記のパラメータのスペルがわからない場合は、以下の公式のインスタンス化パラメータを見て、上記のものと比較してください。

paddleocr.PaddleOCR(use_gpu=True, drop_score=0.85, use_space_char=True)
easyocr.Reader(["ch_sim", "en"])

カスタムOCRバックエンドは、主に大量のデバイス制御やローカルマシンにGPUアクセラレーションがない場合などに使用されます。作成した認識機能をHTTPサービスとしてデプロイし、カスタムバックエンド内でリクエストを送信してリモート認識を行うことができます。ご自身で MyCustomOcrBackend を継承して作成し、要求されたフォーマットに従って認識結果をフォーマットする必要があります。また、私たちが提供する paddle_ocr_http_backend.py の中でレスポンスフォーマットの定義を見つけることができ、少し修正して直接このサービスをデプロイすることも可能です。

class HttpOcrBackend(CustomOcrBackend):
    def __init__(self, url, auth):
        self.auth = auth
        self.url = url
    def ocr(self, image: bytes):
        r = requests.post(url, headers={"X-Auth": self.auth},
                                                    data=image)
        return r.json()

その後、OCR認識のバックエンドサービスをカスタムサービスクラスに設定するだけです。

d.setup_ocr_backend(HttpOcrBackend, "http://server/ocr", "Secret")

OCRセレクター

現在、OCR認識セレクターは以下の種類のみをサポートしています。

text

完全なtextにマッチします。

element = d.ocr(text="私の")

textContains

テキストの部分一致でマッチします。

element = d.ocr(textContains="私の")

textMatches

テキストの正規表現でマッチします。

element = d.ocr(textMatches=".*?私の")

OCR操作

現在、OCR認識セレクターは以下の関連操作のみをサポートしています。

click

選択した要素をクリックします。

element.click()

click_exists

選択した要素が存在する場合にクリックします。

element.click_exists()

exists

要素が存在するかどうかを確認します。

element = d.ocr(textMatches=".*?私の")

screenshot

マッチした要素のスクリーンショットを撮ります。

element.screenshot(100, ).save("element.png")

info

マッチしたOCR情報を取得します。

element.info()

豆知識

OCRでも問題が解決しない場合は、画像特徴マッチングのインターフェースを使用して画像マッチングを試すこともできます。