-
Notifications
You must be signed in to change notification settings - Fork 1
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结果做匹配而非图片特征相似度,这时可以简单地在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对象
这里只介绍了比较常用的,更多内容请参考源码