部落冲突辅助 数字识别
最近在重新开始玩部落冲突这款游戏。在高中时期,我非常喜欢这款游戏。当时我就想写一个脚本帮我自动搜鱼,搜到鱼后提示我,我就在一旁写作业。或者甚至能自动打鱼。当时技术有限,做了一个凑活能用的。现在想再次尝试实现一下。先从数字识别做起。
Airtest
在高中时期遇到的第一个难题就是:捏合缩放,用于把地图缩小。当时是使用ADB控制手机,研究了很久发现无法实现,最后只能在每次脚本运行前,手动将地图缩小。
现在了解到Airtest可以轻松地做到。此外,Airtest
还提供了其他丰富的API,使得连接设备、截图等操作能轻松实现。
数字识别
高中时期遇到的第二个难题是:数字识别。事实上,当时我已经实现了将图片二值化,然后裁剪出每一个数字。只要将裁剪出的数字和模板计算相似度,就能够完成数字识别的任务了。不记得当时遇到了什么阻碍,最后是调用百度文字识别OCR的API完成的。
现在学习了深度学习,对于这样的图像分类任务,简直是小菜一碟。
二值化
1 |
|
一般情况,二值化先用cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
将图片转为灰度图像,再用cv2.threshold(im, threshould, 255, cv2.THRESH_BINARY)
就完成了二值化。
但是在本例中,将阈值设得比较低,数字以外得区域还会有白点;将阈值设得比较高,数字变得非常残缺。所以设置了一个居中的阈值,然后进行腐蚀后膨胀的操作,消除小的白点。
结果如下:
裁剪单个数字
1 |
|
高中时,是自己实现了这一算法的。现在,通过ChatGPT,了解到了cv2.findContours
这一函数,是用于在图像中查找轮廓的函数。
然后就是不断搜鱼、截图,制作用于训练神经网络的数据集,每个数字收集20张左右已经足够了。
(因为resize操作,数字1变形比较严重,不过没关系)
神经网络
1 |
|
因为任务比较简单,这种级别的神经网络已经能完美地完成任务了。
训练
1 |
|
小神经网络+小数据集,在我的小破笔记本上1分钟不到就训练好了。
推理
1 |
|
搜了几条鱼试验了一下,目前准确率100%,从截完图到识别出结果,耗时在50ms以内,后期资源数上升,再加上黑油,应该也能在200ms内完成推理。