文字識別

本章節為您介紹如何使用 OCR 輔助介面操作。在遊戲等應用中,常規介面選擇器可能無法使用,此時可選擇 OCR 方式。OCR 識別方式僅支援檢查元素是否存在、點擊、螢幕截圖等操作。OCR 後端函式庫支援 paddleocr、easyocr 以及自訂 HTTP 後端介面。

設定 OCR 後端

使用 OCR 識別方式前,需先設定 OCR 後端,您需要自行提前安裝相依套件

注意

如果是叢集,即需要在同一台電腦上控制多個裝置,請務必自行封裝為 OCR HTTP 介面。直接使用 paddleocr 或 easyocr 會佔用大量本機記憶體或計算資源,因為每個行程會重複載入。

使用 paddleocr 作為後端,用於識別的截圖品質為 80,並啟用 GPU 加速。

# 使用 paddleocr 作為後端,用於識別的截圖品質為 80,並啟用 GPU 加速。
d.setup_ocr_backend("paddleocr", quality=80, use_gpu=True, drop_score=0.85, use_space_char=True)

使用 easyocr 作為後端,用於識別的截圖品質為 80,識別簡體中文及英文。

# 使用 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 服務,並在自訂後端中請求進行遠端識別。您需要繼承並編寫 CustomOcrBackend,並按照要求的格式進行識別結果的格式化。您也可以在我們提供的 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(self.url, headers={"X-Auth": self.auth},
                                                    data=image)
        return r.json()

隨後將 OCR 識別後端服務設定為自訂的服務類別即可。

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

OCR 選擇器

目前 OCR 識別的選擇器支援以下幾種。

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.exists()

screenshot

擷取配對元素的螢幕截圖。

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

info

獲取配對到的 OCR 資訊。

element.info()

小撇步

如果 OCR 仍然無法解決您的問題,您還可以嘗試使用圖像特徵配對介面進行圖像比對。