面向监狱编程 - 石胖子写网游外挂 (4) 茅草屋版图片识别
“ numpy不仅能做数据分析哦”
01 图片识别也可以很简单
通用的高大上做不了,石胖子打算投机取巧,做个小而美的图片识别模块。但怎么取巧呢?
把需求做一下转换,正常的图片识别需求:
判断图片里有什么
石胖子的简化版
判断图片是不是什么
描述上差别不大,但是计算量可以大大降低。而且程序的答案从“是什么”,变为简单的“是不是”。
可以想象下,一个是简答题,一个是判断题。作答的难度是不是下降了一大截。
之所以游戏外挂可以这样,是因为游戏的特性,游戏在每个时段,需要关心的物品,或者说是任务类型,都是很少的。只要做有限的几次判断“是不是”就能清楚的确定内容了。
比如:
- 是不是在人物属性界面
- 是否有主线任务
- 今天的日常做没做
- 这个道具是不是xx.....
02 NumPy分分钟判断图片
既然问题的难度被降低到这么低,那么石胖子解决起来得心应手。
举个例子,游戏里有某个按钮,出现的时候需要进行点击。
首先要做的是把按钮的截图保存下来,比如:
在游戏进行时,当画面中有这个按钮时,程序通过原来的小图,来判断大图中是否存在这个按钮。
这里有几个小技巧
-
通过数字矩阵进行图片比对
-
分区增加比对速度
03 图片变成数字矩阵
首先获取图片的灰度图矩阵
这个时候就把按钮的图片变成了一个数字矩阵。代码也很简单
04 分区增加对比速度
增加图片对比速度的方法很多,使用矩阵的秩、进行压缩等。
对于游戏外挂而言,如果是进行按钮/道具等相关的图片对比,有一个很简单有效的方式来增加对比速度。
建立分区
假设间隔为10像素。那么脚本里的表现就是
按钮的截图坐标可以被10整除
图片对比的脚本增加步长=10
05 其他的自行车
除了以上的方式,还有很多方式可以用来快速进行游戏的图片识别。
比如某区域的多点识别,可以用来防止背景对透明框的判断影响。
怪物的定位,除了可以使用游戏自带的自动跟踪外,还能根据怪物头上的名字区块来进行定位
因为游戏内容的确定性,使得石胖子的工作量下降很多,很多在其他领域看来是扯淡的点子,在这里却是石胖子的“剥皮小刀”
<未完待续>
码农在中年