游戏测试 自动化来玩大家来找茬

Zhhh · 2018年01月05日 · 最后由 渐渐 回复于 2019年09月18日 · 5216 次阅读
本帖已被设为精华帖!

有人提了个意,做得不好请多指教

下面是大致过程

准备材料:
python
opencv
PIL

思路:
反色 灰度等放大一张图片的特征-》与另一张图片合并 让特征显现-》截取通用底色块-》合并的图片与底色块对比找不同

代码块基本都能百度到,贴主要的就不全贴了,

图片分两张 t1.png t2.png

反色:
将随意一张作为放大特征图

iTmp = cv.CreateImage(size,image.depth,image.nChannels)
for i in range(image.height):
    for j in range(image.width):
        iTmp[i,j] = (255-image[i,j][0],255-image[i,j][1],255-image[i,j][2])

其实反色也可以用 cv2 做的

合并:
注意两张图片尺寸大小要一样
img_add = cv2.addWeighted(img1, alpha1=0.1, img2, alpha2=0.1, gamma=0)

合并以后,显示出比较明显的特征点,我用箭头标出来了

截取通用底色:
发现这样合并后,非特征点处的底色都是一致的(不知道正不正确)
所以可以截取一小块作为对比色块,我的大小是 50*50

找不同:
img1 = 通用底色块
img2 = 每次循环把合并后的图片切成 50*50 的小方块
result = cv2.matchTemplate(img1,img2,method='cv2.TM_CCOEFF_NORMED')

这样对比的话,当 img2 切块的图片与底色块不符的话 就说明是不同的地方 就可以标记出来了

效果图:

自动点击:
既然已经标记出来,点击坐标的事情就可以交给 adb 来做了
adb shell input tap 250 250

pc 端也可以通过 python 开源库来完成
https://github.com/pepijndevos/PyMouse/wiki/Documentation

from pymouse import PyMouse
m = PyMouse()
m.move(200, 200)
m.click(500, 300, 1)

最后:

方法很简单 当是练手学习和记录。
找出来的特征点可能不会出现在正中间 所以点击有可能失败
可以细化这个搜索匹配的方法
不过暂时可以半自动化 看着图片人工点击 hahahaha

共收到 7 条回复 时间 点赞

这个有意思

恒温 将本帖设为了精华贴 01月05日 17:08

刚走了跳一跳,又来了大家来找茬, 哈哈~

Zhhh #8 · 2018年01月05日 Author

😂 跳一跳也写了一贴,这个是有人提了一句,就记录一下想法,中间还有很多没有完善 ,不过辅助玩个游戏倒是没问题了(手动眼斜)

不错不错,👍

贴主也可以试试用 Gemini,也可以做的这样的效果。

匿名 #7 · 2018年01月27日

有趣有趣

simple 专栏文章:[精华帖] 社区历年精华帖分类归总 中提及了此贴 12月13日 14:44
simple [精彩盘点] TesterHome 社区 2018 年 度精华帖 中提及了此贴 01月07日 12:08
恒温 回复

学习了~~

Zhhh 用 github 登陆,我成局外人了? 中提及了此贴 03月28日 19:58
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册