uiautomator2+ tesseract 智能识别文字实现手游辅助外挂,打怪刷装备快人一步
目录
- 一、背景
- 二、需求分解
- 三、脚本开发实践
- 1、tesseract 安装及测试
- 2、python使用Tesseract库识别文字
- 3、构建定时任务,定时刷怪
- 4、最终效果
一、背景
先交代下背景,就是疫情期间,随便玩了一款游戏,玩了后发现,游戏任务太繁重了,为了兼顾学习和游戏,所以就萌生了自己动手开发手游辅助外挂的想法,调研了几个手机自动化测试平台最后选中了uiautomator2,然后有了这边文章 《uiautomator2介绍及环境搭建》 以及文章《uiautomator2一分钟实现辅助外挂》
如果仔细读过第二篇文章的朋友就会发现,前面说的外挂就是 定时任务+ 模拟用户点击,如果碰上复杂点场景,就完全无法适应了,比如下面几种
Boss有刷新又时间间隔,然后区分“野外”,”秘境“,”神谕“,每个刷新时间都不同,那么这个辅助脚本怎么写呢,轮训点击肯定不现实,无法快人一步抢先刷到怪,怎么解决呢? 当然是如标题写的 那样,通过阅读这篇博文,大家会了解到这些知识
- uiautomator2 截图并裁剪
- python + tesseract 实现文字OCR识别
- tesseract 安装及注意事项
- 以及带大家看辅助外挂是如何一步步开发完成的。
博文可能略长,读完可能需要点耐心。
另外郑重声明,本博客仅供继续交流(因为毕竟是外挂嘛,这个自动刷挂功能,游戏里面包月要88元一月呢,所以大家懂得,源码我就不开源共享了,但伪代码下面都有的,更多大家可私下加QQ交流技术)
二、需求分解
要实现按时去刷怪,那么肯定需要上图红色框中那个刷新时间,这个文字又无法通过简单的通过控件去识别,那么就只能通过图片去实现了,我这里的思路是用网上开源的OCR文字识别库识别出时间,到这里又不得不赞叹python扩展能力真是强大,关键是拓展起来超级easy,不愧是“胶水语言”。好了,长话短说,文件OCR识别,我这里用的是tesseract,下面会介绍 tesseract 的安装简单使用。继续我们刚刚的分解,假设可以通过图片进行文字识别,那么要实现一个定时抢怪任务,我们需要的工作如下:
1、模拟点击到刷怪页面,并进行截图
2、截图到的图片做裁剪(主要是过滤其他文字识别干扰)
3、对裁剪到的图片做 灰度处理(比如彩色变黑白),然后二值化、降噪等一系列操作,主要是去除背景和一些其他的干扰。
4、识别到的数字转化为秒,然后建立定时任务
5、定时启动抢怪任务,截图每个步骤图片,拼接成一张图,供人工查下结果。
6、截重复前面5个步骤实现自动刷挂打装备
好了,下面我们一步步来实现这个效果。
三、脚本开发实践
1、tesseract 安装及测试
如果要使用Tesseract库,首先需要安装它到你的机器上。
macOS用户,我们使用Homebrew 去安装Tesseract:
$ brew install tesseract
当然有时候Homebrew 可能更新导致卡住,最简单的办法是在 .bash_profile 文件中新增一行,暂时关闭更新
export HOMEBREW_NO_AUTO_UPDATE=true
安装完成后 tesseract -v 查看是否安装完成
可以通过命令测试一把
比如下面一张图片
我们通过命令 tesseract /Users/bifeng/222222.png stdout digits
可以看出一下子就把数字识别出来了,这里识别得是数字,如果是中文则需要改为
tesseract /Users/bifeng/3333.jpg stdout -l chi_sim
-l
后面得参数代表识别得语言 chi_sim
代表是中文简体。
当然中文简体字体是需要额外去下载字库得,
去往https://github.com/tesseract-ocr/tessdata下载中文数据集chi_sim.traineddata,把它放到这目录下:
/usr/local/Cellar/tesseract/对应版本/tessdata/
目录下即可
更多Tesseract的介绍可以访问GitHub 这里就不做过多发散了
2、python使用Tesseract库识别文字
其实在很多场景中,都会有验证码环境,一般我们都是用 python + Tesseract来识别验证码,这里我们用来识别手游上倒计时也是“适得其用” 来,使用方式如下,首先安装扩展库
a、pip install pytesseract
用于python操作pytesseract
b、对要识别的图片做降噪,简单的说就是对图片做简单处理,如裁剪指定区域,过滤其他文字的干扰,做灰度化、二值化等一些操作,提供文字识别的准确性,具体代码可以参见如下
#!/usr/bin/python
#############################
# #encoding=utf-8
# bifeng 2020.03.23
# python tesseract 文字识别工具类
###############################
import pytesseract
from PIL import Image
class TesseractUtils(object):@staticmethoddef imgae_to_str(image):# 处理成黑白图image_gray = image.convert("L")# image_gray.show()# 进一步增强,使用二值化处理image_two = image_gray.point(lambda x: 255 if x > 129 else 0)#image_two.show()# content = pytesseract.image_to_string(image) # 解析图片content = pytesseract.image_to_string(image_two, lang='chi_sim')print(content)return content@staticmethoddef crop_image_to_str(image, left, top, right, bottom):'''识别图片部分区域位置'''box = (left, top, right, bottom)crop_img = image.crop(box)# crop_img.show()image_gray = crop_img.convert("L")# image_gray.show()# 进一步增强,使用二值化处理image_two = image_gray.point(lambda x: 255 if x > 129 else 0)#image_two.show()content = pytesseract.image_to_string(image_two)#识别中文# content = pytesseract.image_to_string(crop_img, lang='chi_sim')print(content)return content
使用方法,通过通过调用api,可以识别指定区域图片如:
TesseractUtils.crop_image_to_str(crop_img, 767, 289, 915, 334)
这里 767, 289, 915, 334 分别代表图片区域 left, top, right, bottom 坐标如下面一张图片
767, 289, 915, 334 刚好代表红色框框区域,运行后我们可以得到
00:12:30 这样一个时间 ,
3、构建定时任务,定时刷怪
转换我们把它转化为秒
def timeStr2s(t):'''xx:xx:xx转换为秒'''if t is None:return 10000time = 10000try:h, m, s = t.strip().split(":")time = int(h) * 3600 + int(m) * 60 + int(s)except:print("格式不对 : " + t)return time
然后在建立定时任务
fristJob = TesseractUtils.crop_image_to_str(ywImg, 767, 289, 915, 334)currSec = time.time()+ StringUtils.timeStr2s(fristJob)tiemstr = time.strftime("%H:%M:%S", time.localtime(currSec))LogEx.d("excuteJobList in " + tiemstr)schedule.every().day.at(tiemstr).do(excuteJobList)
这样一个定时刷挂任务就完成了,剩下的基本就是封装刷挂,执行刷改,这里我是这么封装的
#!/usr/bin/python
# #encoding=utf-8
# bifeng 2020.03.23
# 单步执行路径
###########################
class CaseInfo(object):def __init__(self):# 用例名称self.name = ''# 模拟执行列表self.clicklist = []# 单步执行休眠时间self.sleepTime = 2# 图片裁取区域self.cropBox = []# 执行列表单步重复项self.innerRepeatIndex = 2# 默认循环次数self.innerRepeatCount = 20# 用例延迟多少秒后执行self.excuteDelayTime = 30
name 代表名字
clicklist 代表执行路径,比如一次野外任务,他有很多点,那么他的路径就是如下:
case_table = {'yewai0': [# Boss坐标(1028, 1321),# 野外(329, 1665),# 第1个boss 885,406(885, 406),# 返回 (1009, 1831),]}
self.innerRepeatCount = 20 代表,boss 挑战按钮 (885, 406), 这个我会循环执行很多变,保证我第一个按下,从而完成刷改功能,封装好后,刷挂的代码就很简单了
def excuteJobList():LogEx.v("----------excuteJobList start---------------------")# global runnerrunner = LegendRunner(adbConnectIp)caseItem = caseList.pop()LogEx.v("case list size = " + str(len(caseList)))clickList = caseItem.getClickList()LogEx.v("excute job " + caseItem.toString())for index in range(0, len(clickList)):LogEx.d("click : " + str(clickList[index][0]) + " " + str(clickList[index][1]))runner.click(clickList[index][0], clickList[index][1])if index == caseItem.getInnerRepeatIndex():caseItem.setRepeatCount(90)for i in range(0, caseItem.getRepeatCount()):LogEx.d("click : " + str(i) + " " + str(clickList[index][0]) + " " + str(clickList[index][1]))runner.click(clickList[index][0], clickList[index][1], 0)time.sleep(0.4)elif index == len(clickList) - 1:timestamp = time.strftime("%H:%M:%S", time.localtime(time.time()))LogEx.d("--sleep 80 s---------: " + timestamp)runner.d.screenshot(os.getcwd() + "/image/" + timestamp + ".png")time.sleep(80)currSec = time.time() + 3tiemstr = time.strftime("%H:%M:%S", time.localtime(currSec))schedule.every().day.at(tiemstr).do(scheduleNextJob)LogEx.v("----------excuteJobList end---------------------")
我只需要 for index in range(0, len(clickList)): 循环执行这个clicklist 就行了,然后在每个步骤下截图一张,任务完成后把所有的图片拼接成一张图(如何拼接见文章《Python工具类之PIL.Image库快速实现多图拼接》)
执行完一个刷改任务,最后我们有建立下一个刷改任务
def scheduleNextJob():LogEx.v("----------scheduleNextJob start---------------------")global runner# runner = LegendRunner(adbConnectIp)# 获取最近的boss定时任务caseItem = runner.getRecentlyBossTask()# 加入到任务列表caseList.append(caseItem)# 延时currSec = time.time() + caseItem.getExcuteDelayTime() - 50if currSec < time.time():currSec = time.time() + 1tiemstr = time.strftime("%H:%M:%S", time.localtime(currSec))LogEx.d("excuteJobList in " + tiemstr)schedule.every().day.at(tiemstr).do(excuteJobList)LogEx.v("----------scheduleNextJob end---------------------")
扫码到最近boss任务-》定时执行-》 执行完继续扫码下一个最近boss任务,这样一直循环下去,就完成了一个简单的自动定时刷怪任务。
4、最终效果
看下最终效果
刷怪过程中我们做了每个步骤的截图,我们看下一次刷怪的效果截图
这样我们的脚本就开发完成了,剩下的只需要开启脚本,喝上一杯茶,等上一段时候回来收获刷怪掉落的神装就可以了,是不是很爽,
“学以致用”感觉怎么样。。因为毕竟是外挂的关系,为了避免法律风险,我不能直接提供源码供大家下载,如果你有更多想法,大家可以私下交流,请加QQ群:1085210541
uiautomator2+ tesseract 智能识别文字实现手游辅助外挂,打怪刷装备快人一步相关推荐
- 瑰雪黑阳rwby手游辅助材料 瑰雪黑阳rwby脚本工具获取途径
<瑰雪黑阳(RWBY)>手游是一款3D横版二次元幻想世界动作战斗手游,热血刺激的战斗,绚丽的技能连招特效,加上超强力的打击感,丰富的原创动画剧情,吸引着二次元爱好者慕名而来.在游戏里化作战 ...
- 手游传奇有挂吗_传奇手游辅助工具
传奇手游辅助工具是一款延续经典的传奇之作,传奇手游辅助工具游戏酷炫的技能效果特别棒,传奇手游辅助工具聊天系统也很完善了,还分了世界频道帮会频道,更端游体验一般,人物设计很非常用心,是一场良心作品,强烈 ...
- 手游辅助制作原理和学习思路
手游辅助制作原理和学习思路 随着网络游戏不断发展 越来越多的人从事手游开发,现在的游戏公司为了能更好的有市场,不断提高游戏质量和服务,手游辅助由此诞生. 很多人都想做手游辅助,其中的原理大家都知道. ...
- 分享一个蓝月传奇手游辅助脚本,想回味传奇游戏又不想费太多时间练级的可以试试
分享一个蓝月传奇手游辅助脚本,想回味传奇游戏又不想费太多时间练级的可以试试 蓝月传奇手游这个游戏等级非常重要,用工具红手指云手机来多开.自动练级完成任务,这样能够让你快速形成等级优势,在别人睡觉的时候 ...
- 荒野日记辅助挂机攻略,手游辅助好用脚本
荒野日记辅助挂机攻略,手游辅助好用脚本 红手指相当于一台云端运行的手机,同时内有千款免费辅助脚本(主流游戏都有脚本),可远程操纵可 24h离线运行,免除你流量.电量不足的烦恼,即使你下线,app仍然可 ...
- 权力的游戏刷声望辅助【多开辅助】权力的游戏手游辅助挂机刷石油资源采集脚本
权力的游戏刷声望辅助[多开辅助]养小号无刷资源无限金币脚本分享 <权力的游戏:凛冬将至>手游据说很快就要在6月份公测啦,权力的游戏手游高度还原维斯特洛大陆,将<权力的游戏>IP ...
- python写梦幻西游脚本精灵_python写的梦幻手游辅助工具,非外 挂
本帖最后由 天福 于 2015-3-5 10:58 编辑 写的一般都是B/S的东西,第一次写C/S: 一般功能: 1.梦幻西游手游10个鬼抓完自动 领 取下一轮 2.自动 领 取 队长礼盒和使用 3. ...
- 艾格拉斯张鹏:重度手游防外挂及安全
艾格拉斯张鹏:重度手游防外挂及安全 图/文 游戏茶馆 前言 2015年1月10日,[问道一线]品牌沙龙第一期,有幸邀请到的艾格拉斯创始人之一.CTO张鹏先生,以<游戏防外挂及安全>为主题, ...
- 诛仙服务器显示横线,诛仙手游字变颜色怎么弄_诛仙手游字体颜色代码大全_快吧手游...
诛仙手游字变颜色怎么弄?相信好多小伙伴在聊天的过程中遇到这种情况,别人的字体会有各种字体出现,在这里,小编整理了诛仙手游字体颜色代码大全!快来学习一下吧! 字体颜色代码大全 [[950000]aaff ...
最新文章
- 如何在window上把你的项目提交到github
- C++palindrome partitioning回文分割算法的实现(附完整源码)
- Linux下root密码丢失和运行级别错误的解决办法
- CentOS以及Oracle数据库发展历史及各版本新功能介绍, 便于构造环境时有个对应关系...
- Dynamics版本历史演进及Dynamics 365重要功能介绍
- 外接显示器设置_如何为一台电脑设置两个显示器
- 每天学点Shiro-集成spring
- Windows安装ActiveMQ记录
- spring cloud整合mybatis学习中遇到的坑
- 2015.11.18——Lua中文教程
- Python爬虫学习笔记(二)——requests库的使用
- Android Bmob之用户更改头像(上传图片、下载图片和更新图片)
- Scrapy爬虫框架之爬取校花网图片
- 【游戏数据库】大型网络游戏数据库设计方面讨论?(微软平台) 游戏数据库
- 一、编程基础之计算机基础知识
- 新课改计算机论文,新课改论文
- 办公技能01:最简单的调整图片分辨率方法——用windows自带的画图功能
- Oracle下的exp/imp
- 一亩三分地 新手上路 网站规则 - 满分5大米(适用于所有用户) 答案 新手入门
- NIPS最佳,惊人的天赋与无人察觉的缺陷并存,GPT-3的未来有多少种可能......
热门文章
- 德智体美劳,全面发展的DevOps
- 母亲节板报图片计算机方案,母亲节电子手抄报图片素材
- IE浏览器收藏夹里面的内容不显示
- C#正则查找字符串是否包含字母
- 微信营销软件 php下载,北牧微信营销系统CMS企业版 php版免费版_北牧微信营销系统CMS企业版 php版PC版下载-东乐软件网...
- dicom 脱敏_一种对医疗影像数据进行脱敏处理的方法及系统与流程
- 我为什么而活着 [英]罗素
- 百度地图实现测量面积和测量距离功能
- 面向对象程序设计(Java)实验
- 实时数据同步利器debezium教程