# 文字辨識操作

本章節為您介紹如何使用 OCR 來輔助進行介面操作，在遊戲應用等情況下，常規的介面選擇器可能無法使用，此時您可以選擇使用 OCR 的方法進行操作。OCR 辨識方式僅支援檢查元素是否存在、點擊、截圖等操作。OCR 後端函式庫支援使用 paddleocr、easyocr 以及自訂 http 後端介面。

## 設定 OCR 後端

使用 OCR 辨識方式前，需要先設定 OCR 後端，您需要自行**提前安裝依賴套件**。

```{attention}
如果是叢集，即需要在同一台電腦上對多個裝置進行控制操作，請務必自行封裝為 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 仍然無法解決您的問題，您還可以嘗試使用影像特徵匹配的介面進行影像匹配。
```