在现有的基础上,小编尝试了利用tesseract库来训练图像读取。识别率越高,根据自己喜好选择方法(因为有的软件是国外的,上传图片到头条很麻烦,我有相关资料,已经打包了,关注一下,回复加减法大师即可获取)
我见过别人用Python自动运行的微信小程序《跳一跳》,后来又看到别人用哈希码自动答题、收娃娃。我最近在研究深度学习,为什么不使用机器学习来实现呢?这不就是一个分类问题吗?
如何实现自动接听微信小游戏《加减大师》?
思考:
图像识别?如何设置特征工程?选择哪种算法? 1.图像特征工程
手机游戏如何获取图片?
使用adb命令截取手机屏幕;在PC和手机上同时运行APowerMirror软件,将手机屏幕投射到电脑上,然后使用Pillow包中的截图方法截取电脑上手机屏幕对应的区域。在PC和手机上同时运行APowerMirror软件,将手机屏幕镜像到电脑上,然后使用Python调用Windows原生API截取电脑上手机屏幕对应的区域。实验结果:三种截图方法所花费的时间差异较大。第一种方法每次截图大约需要0.7秒,第二种方法大约需要0.3秒,第三种方法大约需要0.04秒。
当然选择第三个选项,下载地址【https://www.apowersoft.cn/phone-mirror】,一个好的软件是成功的关键(够清晰)。
获取训练样本
相关步骤:
1、util.py中的shotByWinAPI函数:首先使用窗口自带的API获取全屏图像,然后自定义config.py的相关参数。
# 从PC端截图时,捕获该区域左上角相对于桌面的x坐标
\’投影_x\’: 32,
# 从PC上截图时,捕获该区域左上角相对于桌面的y坐标
\’投影_y\’: 278,
# 从PC端截图时,截取区域的宽度
\’投影宽度\’: 482,
# PC端截图时,截取区域的高度
\’投影高度\’: 854,
您可以使用窗口命令键PrtScSysRq(F12右侧),然后将其复制到Paint(1920×1080)。
使用绘图放大镜放大,图中(32×278)中红框内小方块的位置projection_x为32,projection_y为278。
确定像素位置后,不要再移动软件
在Paint中计算截图的宽度和高度,即projection_width和projection_height(482×854)
2、img_tool.py函数介绍:主要使用all(img, filename)函数进行图像分割。
srcImg=cv2.imread(os.path.join(\’ScreenShotForTrain\’, f), 0)
上面的代码是以灰度模式加载彩色图像
def all(img, 文件名):
\’\’\’封装了对图像的所有操作\’\’\’
img=作物Img(img)
img=二进制Img(img)
img1, img2=再次裁剪(img)
imgs=cutImg(img1, 文件名+ \’_1\’) + cutImg(img2, 文件名+ \’_2\’)
返回图片
defcropImg(img):
\’\’\’裁剪原始屏幕截图\’\’\’
高度=img.shape[0]
img2=img[int(config.config[\’exp_area_top_rate\’] * height):int(config.config[\’exp_area_bottom_rate\’] * height),]
#print(\’切割完成\’)
返回img2
CropImg(img)函数主要用于裁剪包含数字的区域。通过设置参数
#表情区域顶部位于整张图片的位置(307/854=0.359)
\’exp_area_top_rate\’: 0.36,
#表情区域底部位于整张图片的位置(478/854=0.559)
\’exp_area_bottom_rate\’: 0.56,
如果觉得设置比例太麻烦,可以直接写位置(img2=img[int(307):int(478),])。得到如下图:
自动问答模式开启
实现原理
1.截取游戏界面。该项目提供了三个选项。在PC和手机上同时运行APowerMirror软件,将手机屏幕镜像到电脑上,然后使用Python调用Windows原生API截取电脑上手机屏幕对应的区域。 2、提取截图中的表情区域,并进行文本识别,获取表情字符串。由于图片中的表情区域是固定的,而且人物也是有规律的,所以这一步并不是很难。我只训练了一个简单的逻辑回归模型,就得到了非常高的识别准确率。 3.根据第二步得到的表达式,调用Python的eval()函数获取表达式结果的正确性,然后点击手机屏幕对应区域。使用投屏方案进行截图时,点击手机屏幕,通过代码在电脑上点击手机对应区域。第一个操作,生成分类器模型
1.借用屏幕投影软件,使用绘图工具配置相关参数config.py。可以参考上面的《图像特征工程》。
2.对于新手机(我用的是honor8),必须重新训练模型,将config.py中的debug参数设置为True,打开“加减法大师”,然后运行main.py。这里必须手动回答问题,尽可能正确回答更多问题,以便扩大训练样本。
3. 步骤2将生成一个SingleCharForTrain文件夹,以消除重复样本和不相关样本。
4、运行img_tool.py文件,会生成一个SingleCharForTrain文件夹。
5、对步骤4得到的文件夹中的字符进行手动分类,保存到TrainChar文件夹中。
6. 运行ml.py文件生成分类器模型lr.pickle。
注意桌面上不要有任何东西遮挡手机的投影区域
基于分类器模型自动回答问题
1.修改config.py中的debug参数为False以及其他相关参数。
#使用PC截图时,点击手机屏幕正确区域的x坐标
\’pc_tap_true_x\’:117,
#使用PC截图时,点击手机屏幕错误区域的x坐标
\’pc_tap_false_x\’:365,
#使用PC端截图时,正确点击手机屏幕以及该区域的y坐标
\’pc_tap_y\’:760,
配置正确和错误选择的水平和垂直坐标。横坐标不同,纵坐标相同(同一高度)
2.打开加减大师,直接运行main.py。
2.打开加减大师,直接运行main.py。
遇到的问题
Q1: 达到约200步后停止?
A1: 如果是误判,则重新截图错误的图片,将获取到的字符添加到TrainChar文件夹中,重新训练模型。
A1: 如果上一张图片与这张图片相同,则再次运行即可。我不相信你的运气会这么差。
Q2: 我的积分达到了1000分,但是小程序无法评分。
A2: 一开始我以为是随机题,没有设定作答时间。我在main.py中设置了它。
one_tap(res)
# 设置随机休眠时间,防止微信后台被随机检测
如果(数到100):
time.sleep(0.1 * (random.randint(0, 9)))
elif(计数200):
时间.睡眠(0.05 * (随机.randint(0, 9)))
elif(计数300):
time.sleep(0.01 * (random.randint(0, 9)))
elif(计数400):
time.sleep(0.01 * (random.randint(0, 9)))
elif(计数500):
# 这个级别你可以控制gg
如果(计数==455):
时间.睡眠(3)
但是,没有软件。大概是背景设定吧(我个人认为当天的分数不可能比第一名高太多)。反正前500名就可以获得小卡了。你可以尝试比第一名多设置几个点或者少设置几个点。一点。
4.源码地址
记得打电话给我哥们的github
上传代码:https://github.com/Yiutto/WechatGame_jjds
如果有任何疑问请私信我yiutto@qq.com
最后我放开了我的娃娃,手机上显示的是这样的