文字识别

本章节为您介绍如何使用 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 服务,并在自定义后端中请求进行远程识别。您需要继承并编写 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 仍然无法解决您的问题,您还可以尝试使用图像特征匹配接口进行图像匹配。