AzurLaneAutoScript icon indicating copy to clipboard operation
AzurLaneAutoScript copied to clipboard

button的匹配问题

Open Air111 opened this issue 1 year ago • 4 comments

你的功能请求是否与问题有关?

#3557 让我对基于平均颜色的匹配产生怀疑

一个页面有时需要识别几十个按钮,因此测试100次识别所需时间,使用perf_counter()计时:

start = time.perf_counter()
for _ in range(100):
    BUTTON.appear_on(image)
end = time.perf_counter()
print(end - start)

start = time.perf_counter()
for _ in range(100):
    BUTTON.match(image, offset=(0, 0))
end = time.perf_counter()
print(end - start)
  1. 小按钮GET_SHIPappear_on用时约1.5ms,match用时约6.5ms
  2. 中按钮EXERCISE_PREPARATIONappear_on用时约2ms,match用时约34ms
  3. 大按钮DAILY_ENTERappear_on用时约7.5ms,match用时约436ms

根据这个测试结果,我认为对于固定位置的按钮,也应该主要使用Template Matching在图像中查找对象,这应该不会明显影响运行时间。仅在少数情况下使用平均颜色匹配

由于我考虑的范围非常局限,衷心希望开发者解答一下,为什么目前在绝大多数情况下使用平均颜色匹配,这是基于什么考量?

解决方案

No response

其他内容

No response

Air111 avatar Mar 19 '24 07:03 Air111

还有appear_on是否期望仅用于匹配完全相同的情况,如果是那好像threshold设为2就可以覆盖精度带来的差异,如果要考虑背景颜色略有不同等情况,那threshold完全就是trade-off,感觉不如多用match

Air111 avatar Mar 19 '24 08:03 Air111

你自己都测试出来性能差了快100倍了,这也叫无影响吗?就是性能优化啊,有的脚本开着就吃10%~20%的cpu,alas只占的cpu基本<1%,运行速度还快,这就是狠抓优化的结果

颜色识别是照搬 PhotoShop 的魔棒,color_similar() 就是魔棒的算法,threshold 就是魔棒的容差设置

LmeSzinc avatar Mar 20 '24 07:03 LmeSzinc

但文档中不是说截图耗时约350ms(我自己没测),34ms对于截图耗时也就是一个小量,对于小图片真有必要提高这一点速度而舍弃准确度吗?还是说一般处理方式是出现问题再调?

Air111 avatar Mar 20 '24 07:03 Air111

现在的截图好像只需100ms左右,那确实要克制一点,不过真有那么多一个页面需要识别上百个按钮的情况?

Air111 avatar Mar 20 '24 08:03 Air111

最新的截图速度可低至10ms左右,这点准确度还是应该被牺牲掉(只要没有频繁出现问题)

Air111 avatar Mar 29 '24 07:03 Air111