云顶娱乐棋牌游戏:微信跳风姿罗曼蒂克跳python协理软件思路及图像识别源码分析

正文将梳理github上最火的wechat_jump_game的兑现思路,并深入分析其图像管理部分源码

首先废话少说先看功能

云顶娱乐棋牌游戏 1

宗旨情想

得到棋子到下八个四方的中央点的间隔
算算触摸显示屏的岁月
点击荧屏

关键艺术

总结棋子到下贰个四方主题点的间隔

  • 接收 adb shell screencap -p 命令获取手提式有线电话机当前显示器画面
  • 再经过图像上的音信搜索棋子的坐标和下二个四方大旨点的坐标
  • 接下来经过两点间隔断公式计算出间距

测算触摸显示屏的年华

T=A * S

当中S为上步算出的像素间隔,T为按压时间(ms卡塔 尔(阿拉伯语:قطر‎,A为三个周到这么些周密会趁机显示器分辨率的改变而变化,在一九一六*1080的荧屏下这么些周全为1.35,在2560*1440的荧屏下这一个周到为1.475

点击荧屏

adb shell input swipe x y x y time(ms)

那条命令能够点击掌提式有线电话机荧屏x,y地点time(ms)

图像管理局部源码深入分析

图像管理部分代码都在 find_piece_and_board(im) 方法中

透过输入的图像im计算出棋子的坐标点以至下三个四方宗旨的坐标点

在find_piece_and_board的法子中生龙活虎进来正是上边包车型大巴五个嵌套在一块儿的for循环:

 for i in range(int(h / 3), int(h * 2 / 3), 50): last_pixel = im_pixel[0, i] for j in range(1, w): pixel = im_pixel[j, i] # 不是纯色的线,则记录 scan_start_y 的值,准备跳出循环 if pixel[0] != last_pixel[0] or pixel[1] != last_pixel[1] or pixel[2] != last_pixel[2]: scan_start_y = i - 50 break if scan_start_y: break

这段代码的职能正是从屏幕2/3的地方向下搜寻不是纯色的线。并将找到地点的纵坐标-50看作,找出棋子和方块的开场坐标。那样能够简化未来寻找的职业量,因为在这里个横坐标以上是未曾东西的。

接下去是搜求棋子坐标的代码

# 查找棋子坐标 # piece_x_sum 横坐标总量 piece_x_c 点的个数 piece_y_max 纵坐标最大值 # 从 scan_start_y 开始往下扫描,棋子应位于屏幕上半部分,这里暂定不超过 2/3 for i in range(scan_start_y, int(h * 2 / 3)): for j in range(scan_x_border, w - scan_x_border): # 横坐标方面也减少了一部分扫描开销 pixel = im_pixel[j, i] # 根据棋子的最低行的颜色判断,找最后一行那些点的平均值,这个颜色这样应该 OK,暂时不提出来 if (50 < pixel[0] < 60) and (53 < pixel[1] < 63) and (95 < pixel[2] < 110): piece_x_sum += j piece_x_c += 1 piece_y_max = max(i, piece_y_max) if not all((piece_x_sum, piece_x_c)): return 0, 0, 0, 0 # 平均横坐标 piece_x = int(piece_x_sum / piece_x_c) # 纵坐标最大值-底座一半的高度 piece_y = piece_y_max - piece_base_height_1_2 # 上移棋子底盘高度的一半

搜寻棋子的主要依赖就是棋子的水彩较为单风华正茂并且和方块的颜料有非常的大不相同。即使一个像素点的PAJEROGB像素值在B(50,
60), G(53, 63), 普拉多(95,
110)范围内那么就觉着这一个像素点是归属棋子的。依照以上信息就能够总结出棋子的平分横坐标,以至最大的纵坐标值。

所以不难总结出棋子坐标(棋子平均横坐标, 棋子最大纵坐标 -
底座50%的中度卡塔尔在那之中底座一半的莫斯中国科学技术大学学因手提式有线话机分辨率而异。需求提前布署好。

最后是寻觅下四个四方中央点的坐标的代码

# 寻找最高的棋盘 # 棋盘不会和棋子在同一侧 # 限制棋盘扫描的横坐标,避免音符 bug if piece_x < w / 2: board_x_start = piece_x board_x_end = w else: board_x_start = 0 board_x_end = piece_x for i in range(int(h / 3), int(h * 2 / 3)): last_pixel = im_pixel[0, i] if board_x or board_y: break board_x_sum = 0 board_x_c = 0 for j in range(int(board_x_start), int(board_x_end)): pixel = im_pixel[j, i] # 下一个棋盘紧贴着棋子 # 修掉脑袋比下一个小格子还高的情况的 bug if abs(j - piece_x) < piece_body_width: continue # 修掉圆顶的时候一条线导致的小 bug,这个颜色判断应该 OK,暂时不提出来 if abs(pixel[0] - last_pixel[0]) + abs(pixel[1] - last_pixel[1]) + abs(pixel[2] - last_pixel[2]) > 10: board_x_sum += j board_x_c += 1 if board_x_sum: # 最高棋盘的平均横坐标 board_x = board_x_sum / board_x_c last_pixel = im_pixel[board_x, i]

代码起头通过棋子所在的显示器地点限定搜索的急剧,假如棋子在显示屏左侧那么就在荧屏右侧寻找方块,反之亦然。因为方块和棋子不会在荧屏同意气风发侧。

然后正是自上而下得搜索方块的上巅峰。

正方上尖峰坐标( 平均横坐标,当前进的纵坐标卡塔 尔(阿拉伯语:قطر‎

下一场再往下纵坐标+247的地方上马进步找颜色与上终点相似的点,为下极点。
自然此办法有有个别局限性对于纯色的平面效果很好不过对于非纯色的平面。大概会咬定失误。

黄金年代旦上意气风发跳命中中间,则下个对象基本会并发 r245 g245 b245
的点,利用这几个天性弥补上大器晚成段代码可能存在的论断错误
若上风度翩翩跳由于某种原因未有跳到正中间,而下风流倜傥跳正好有独力难支准确识别花纹,则有相当的大恐怕游戏失利,由于花纹面积平常超大,退步可能率好低

可匡正方案

首先是现阶段方案对于多分辨率须求三个布局文件来记录不一样分辨率下的周全以致棋子底盘百分之五十的莫斯中国科学技术大学学。随机测量试验了6台手提式有线话机里面有两台手提式无线电话机因没有配饰而不可能平常运维

首先是全面A,旁观方程T=A *
S,A正是二个可练习量,利用机械学习框架比方TensorFlow,对这些一元一回方程进行拟合。

重点棋子底盘二分之一的中度在代码中的作用。简单察觉是为着求出棋子底盘大旨的纵坐标。而棋子底盘大旨的岗位适逢其时是棋子最宽的地点。所以能够由此寻找棋子最宽处的纵坐标的方法找到棋子底盘宗旨的纵坐标。那样就超脱了对配置文件的依据,能让代码在其余手提式有线电话机上符合规律运行。

其次是对于方块宗旨坐标地点的判定方式出错率较高,固然有大旨白点能够弥补可是在大气跳跃的过程中依旧晤面世谬误。3太手提式有线电话机不停运行了一中午,最高分只有2010分。

现方法出错率高的来头是接收纯颜色方法判别,不过在其实游戏中颜色足够的正方也不菲。假如想改过就无法正视颜色方法剖断,而相应通过几何图像的形象来计算方块的职分。轻易察觉游戏中方块独有棱形和圆形二种形象。

率先通过canny或别的概略查找算子提抽出图像的差不离,然后经过霍夫转变提抽取圆形和棱形的骨干坐标。

云顶娱乐棋牌游戏 ,总结

如上所述是小编给咱们介绍的Wechat跳黄金年代跳python扶植软件思路及图像识别源码分析,希望对大家全部利于,借使我们有任何疑问请给自己留言,小编会及时恢复大家的。在那也特别多谢我们对台本之家网址的支撑!

您恐怕感兴趣的篇章:

  • Wechat跳风姿洒脱跳游戏python脚本
  • python完结微信跳意气风发跳帮助理工科程师具步骤详细解释
  • Wechat跳豆蔻梢头跳python代码实现
  • Wechat小程序跳一跳游戏
    python脚本跳风姿浪漫跳刷高分本领
  • Wechat跳风流倜傥跳帮助python代码完结
  • Wechat跳大器晚成跳自动运转python脚本
  • Wechat跳生龙活虎跳小游戏python脚本
  • Python+OpenCV让Computer帮你玩Wechat跳生龙活虎跳
  • pythonWechat跳风流浪漫跳连串之自动总括跳一跳间隔
  • pythonWechat跳风流倜傥跳连串之棋子定位颜色辨别

相关文章

Comment ()
评论是一种美德,说点什么吧,否则我会恨你的。。。