文字识别¶
本章节为您介绍如何使用 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 仍然无法解决您的问题,您还可以尝试使用图像特征匹配接口进行图像匹配。