# 文字認識操作

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

## OCRバックエンドの設定

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

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

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

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

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

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

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

```python
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` の中でレスポンスフォーマットの定義を見つけることができ、少し修正して直接このサービスをデプロイすることも可能です。

```python
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認識のバックエンドサービスをカスタムサービスクラスに設定するだけです。

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

## OCRセレクター

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

### text

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

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

### textContains

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

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

### textMatches

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

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

## OCR操作

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

### click

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

```python
element.click()
```

### click_exists

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

```python
element.click_exists()
```

### exists

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

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

### screenshot

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

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

### info

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

```python
element.info()
```

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