2018-01-02 微信跳一跳自动化测试

一、小程序:跳一跳
本质上是棋子坐标到新物件中心的距离ds与屏幕长按时间dt的比例关系

二、使用到的工具和用法
1、adb工具包
adb全名Andorid Debug Bridge. 顾名思义, 这是一个Debug工具。
用途:
(1)、截屏(保存为screenshot.png)
adb shell /system/bin/screencap -p /sdcard/screenshot.png
(2)、将截屏图片推送到电脑(temp.png)
adb pull /sdcard/screenshot.png E:\\testproject\\temp.png
(3)、模拟屏幕长按
adb shell input swipe x1 y1 x2 y2 dt
swipe模拟的是屏幕的滑动,x1,y1到x2,y2的滑动,延迟dt秒
2、python库
(1)子进程库subprocess
用途:执行上述adb命令
基本使用1:subprocess.Popen(args),其中args为命令行,这个是最基本的使用,还有很多参数,不细说了。注意如果其他参数都默认,该子线程将独立运行,即子线程间不等待。
基本使用2:subprocess.call(args),是上面的封装,多个子线程会按照顺序依次执行。
(2)图像处理库opencv
用途:从截图上识别棋子的坐标和新物件的中心坐标
步骤:
1、读取截屏图片,并做切割,主要是去除图片上下其他内容的影像

    image_name = 'temp.png'
    # 图片读取
    img = cv2.imread(image_name)
    # 图片切割
    roi = img[400:1000, 80:680]    
roi图

2、灰度处理和边缘检测,获取轮廓图

# 灰度处理
    gray = cv2.cvtColor(roi, cv2.COLOR_BGR2GRAY)
    # canny边缘检测,用于识别落点
    edges = cv2.Canny(roi, 50, 100)

edges图

3、识别棋子:通过识别棋子顶部的圆实现
使用到opencv库中的霍夫圆变换
cv2.HoughCircles(image, method, dp, minDist, circles, param1, param2, minRadius, maxRadius)

主要参数:
image
输入 8-比特、单通道灰度图像.
method
Hough 变换方式
dp
累加器图像的分辨率,dp的值不能比1小。
min_dist
该参数是让算法能明显区分的两个不同圆之间的最小距离。
param1
用于Canny的边缘阀值上限,下限被置为上限的一半。
param2
累加器的阀值。
min_radius
最小圆半径。
max_radius
最大圆半径。

返回值为检测到圆的序列,包括圆心坐标和半径
这里的参数,只要半径是19-21左右,其他需要多次尝试后,取合适的值

# 检测圆心和半径
def findring(gray):
    circles1 = cv2.HoughCircles(gray, cv2.HOUGH_GRADIENT, 2,
                                400, param1=100, param2=50, minRadius=19, maxRadius=21)
    # print(circles1)
    circles = circles1[0, :, :]
    circles = np.uint16(np.around(circles))
    ring = circles[0]
    return ring

4、识别新物件的中心
这个是通过新物件最高点(x最小)和最右端(y最大)来确定的
分三步:
(1)确定棋子位置后,消除棋子的轮廓。因为有的是有新物件靠的比较近或者新物件比较小。棋子高度影响对新物件坐标的识别。
(2)确定这个edges的最高点,找到x最小的点,一般就是新物件的最高点,这时的y坐标为中心点的y坐标
(3)从新物件最高点向右迭代,找到y最大值的点,即最右端。这时的x坐标为中心的x坐标

def findtop(edges):
    x,y = np.where(edges==255)
    # 获得x最小时的索引,并获得对应的y坐标
    index = np.argmin(x)
    ymin = y[index]
    # 从该位置向右400个像素,查找y最大值,获得对应的x坐标
    xmax = x[np.argmax(y[index:index+400])]
    return ymin,xmax
这里返回值中,xy坐标相反是为了视图显示的方便,因为cv2画图时候的x,y分别表示对应左边界和上边界的距离,和numpy读取图片像素矩阵的索引x,y(行和列)正好相反。
识别结果图

三、其他注意点:
1、获得棋子上端圆心坐标后,做修正获得棋子落点坐标
2、新物件中心坐标获得后,稍微向上做修正,因为随着游戏后期新物件变小,中心坐标要做稍微上移,增加容错率。游戏初期新物件比较大,问题不大。
3、计算ds,增加系数(约2.1)计算dt。系数根据屏幕大小有区别,多尝试几次做相应调整。

ds = math.sqrt((e_pos[0] - b_pos[0]) ** 2 + (e_pos[1] - b_pos[1]) ** 2)
a = 2.1
dt = int(a*ds)
jump(dt)
time.sleep(1.5)

4、每次jump后,要等待1.5秒左右,一方面是为了某些额外加分。另一反面有时超越好友会有动画效果,会影响新物件坐标的识别。

四、写在最后的最后
分数不要刷太高,有时候排行榜不会显示的。。。


image.png
image.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345

推荐阅读更多精彩内容