Skip to content

2. 图像匹配&OCR

Aues6uen11Z edited this page Nov 5, 2024 · 2 revisions

在这里,所有的图像匹配和OCR操作都与一个模板类zafkiel.Template相关,它的初始化参数是这样的

def __init__(
        self,
        filename: str,
        record_pos: Optional[Tuple[float, float]] = None,
        keyword: Optional[Keyword] = None,
        resolution: Tuple[int, int] = (1280, 720),
        rgb: bool = False,
        template_path: str = 'templates',
        threshold: Optional[float] = None,
        target_pos: int = TargetPos.MID,
        scale_max: int = 800,
        scale_step: float = 0.005
):

其中比较重要的几个参数是

  • filename:模板图片的文件名
  • record_pos:模板图片中心相对于设备屏幕中心的位置,一般由AIrtestIDE自动生成
  • keyword:用于OCR对比的文字内容
  • resolution:当前设备/窗口的分辨率
  • rgb:是否开启颜色识别
  • template_path:模板图片目录相对于根目录的路径

图像匹配

设置好Template后,在屏幕上找图就很简单了,Zafkiel已经帮你做好了模板图还原、分辨率缩放、边界框适配、点击位置随机化等操作,只需要调用对应函数即可。例如

# 在屏幕上找到模板图对应位置,随机在范围内点击
find_click(Template(r"settings.png", record_pos=(-0.474, 0.334), resolution=(1471, 1044)))

exists()	# 判断模板图片是否出现在屏幕中
wait()		# 等待模板图片出现
...

详细内容请参考基本功能

OCR

识别匹配

最常见的一个场景是已经设置好了模板图片,但想根据OCR结果做匹配而非图片特征相似度,这时可以简单地在Template中添加一个keyword参数(Keyword类可以同时设置多种语言)

find_click(Template(r"phone.png", (-0.37, -0.279), (1471, 1044), Keyword('我的手机')))

默认情况下只有当模板图对应范围OCR识别为“我的手机”时才会点击,但还有更灵活的方法:

  • 设置local_search=False,在整个屏幕上进行OCR
  • 设置ocr_mode为1或2,1表示OCR结果包含“我的手机”即可,2表示OCR结果与“我的手机”相似即可,默认相似度阈值为0.75

识别

有时候,只是单纯想知道模板图位置上有什么文字,好进行后续处理,可以这样做

from zafkiel.ocr import Ocr

ocr = Ocr(Template(r"something.png", (-0.273, 0.231)))	# 可用于限定识别范围
text = ocr.ocr_single_line(screenshot())		# 传入当前屏幕截图

特殊格式

除了基础的Ocr类,还提供以下几种会对结果进行特殊处理的子类

zafkiel.ocr.Digit		# 只会返回数字
zafkiel.ocr.DigitCounter	# 识别计数器,例如`14/15`,返回(14, 1, 15)
zafkiel.ocr.Duration		# 识别时间,例如`18d 2h 13m 30s`、`13m 30s`,返回datetime.timedelta对象

更多内容

这里只介绍了比较常用的,更多内容请参考源码

Clone this wiki locally