文字识别操作

本章节为您介绍如何使用 OCR 来辅助进行界面操作,在游戏应用等情况下,常规的界面选择器可能无法使用,此时您可以选择使用 OCR 的方法进行操作。OCR 识别方式仅支持检查元素是否存在、点击、截图、等操作。OCR 后端库支持使用 paddleocr、easyocr 以及自定义 http 后端接口。

设置 OCR 后端

使用 OCR 识别方式前,需要先设置 OCR 后端,您需要自行提前安装依赖库

注意

如果是集群,即需要在同一台电脑上进行多个设备进行控制操作,请务必自行封装为 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 仍然无法解决您的问题,您还可以尝试使用图像特征匹配的接口进行图像匹配。