Code Monkey home page Code Monkey logo

auto_player's Introduction

2023.03.29再次分享

主要是补充一个自己在用的OCR版本,继承了原来的截屏、点击等功能,匹配功能从opencv的图像匹配换成了OCR文字识别,不用一个个图标截图了,推荐使用,实现了同样的寻找、点击功能,同样提供模式与ADB模式。OCR采用的是百度家的paddlepaddle深度学习框架,超轻量模型chinese_ocr_db_crnn_mobile,识别速度感觉跟图像匹配差不多挺快的。有需要的可以自己换大模型提高精确度。百度OCR模型使用教程点这里

ORC版本优点:更加通用方便。比图片匹配用起来起来更方便,不用截按钮小图标,直接输入目标上的文字。 不受分辨率导致的按钮大小、UI更新导致的外观变化影响。 ORC版本缺点:有些场景的图标可能是没有文字内容的,或有的字体不太标准变形重复影响识别,不过整体识别率还是很高的,够用。

OCR版本的paddle框架与最新版本numpy冲突,需要降低numpy版本,版本参考re.txt文件。另外把原版从方法函数式改成了面向对象的类,设置更方便一点,实例化的时候直接设置精度和模式。

提醒: 针对手机模拟器pull传文件慢,可以用共享文件夹。一般模拟器截图都是自动到共享文件夹里,可以直接从电脑上读取,不用再pull一遍,比如我的夜神模拟器在C:\Users\Administrator\Nox_share\ImageShare,具体看你用的模拟器说明书。把screen_shot函数里的读取图片地址从screen文件夹改到你的共享文件夹就行。真手机暂时无解,推荐用OCR版本加模拟器ADB模式。

2021.03.21更新

两年前随便写的一个小脚本居然骗到100个星了,感觉十分惭愧对不起大家厚爱。 正好我现在弄另一个类似游戏的脚本,于是就结合了现用的脚本,重新封装整理出一个通用的框架。目标是遇到相似的游戏时能10分钟内迅速写出一个能用脚本来。

还是一样包含桌面版和ADB版两个版本,分别用的碧蓝航线和阴阳师写了个例子。 主要目的是提供封装好的API供大家使用,而不是提供现成产品,所以例子写得比较简单只写了开始结束的自动点击和战斗中的判断。 剩下的比如体力不足、接受或拒绝组队之类的细节大家自行添加。其实主要是我懒。

补充:我不是专业程序员github不经常上,阴阳师也半弃了所以不常更新。 有需要探讨交流的可以加我V信anywhere2go,可以交流思路,要手把手帮改代码的就别来了。 另外刚看到lisai9093那边有添加了更多丰富功能并长期更新至今的完整版,欢迎大家移步使用点击传送门

自动游戏挂机辅助

  • 通用手游自动挂机脚本,解放双手,功能同阴阳师手游内自带的小纸人挂机系统类似,等于不受樱饼限制无限使用的小纸人~
  • 拟人化的识图与模拟点击,不读取或修改游戏内部数据,只是取代手动操作。通过随机偏移点击位置和操作延迟防检测。
  • 适用阴阳师、明日方舟、碧蓝航线等能自动战斗只要手动点开始结束的游戏。不适用王者荣耀等需要大量操作的游戏.

核心思路:

  • 截屏,然后图片识别的方法判断当前游戏场景,找到需要点击的位置(原版用的opencv图片匹配,OCR版本用的深度学习文字识别)
  • 使用随机位置偏移与随机操作延迟防检测
  • 桌面模式:电脑截屏,鼠标点击(用的pyautogui,可以用于电脑客户端或模拟器)
  • ADB模式: 电脑向手机发送ADB命令进行截屏和点击(可以用连接真实手机或模板器)

使用说明:

前置条件:

安装包依赖(版本参考re.txt):

  • 原版:python-opencv, pyautogui, pillow, numpy
  • OCR版增加:paddlehub, paddlepaddle, shapely, pyclipper

其它

  • adb连接:需要修改auto_player.py里面的adb路径,其它可以不改。桌面模式不用改动。
  • 原版图片匹配:需要先把要查找的目标图标保存wanted文件夹,jpg格式,否则会出现keyError错误。 OCR版本不用。

文件:

wanted文件夹是要查找的目标图标,比如开始按键确认按键等截图保存到这里,文件后缀为.jpg。 screen文件夹是用来自动可在当前截屏的。 auto_player.py是原版文件,导入后就可以使用下面两个API。 auto_ocr_player是以原版为基础新增加的OCR版本,具有同样的API。 demo_yys.py是阴阳师挂机脚本,只写了一个简单的单人御魂模式,供大家参考。 demo_azuer.py是碧蓝航线,是我自己在用的,实现了一些更复杂一点的功能。

find_touch(target_list, area=None)

  • 功能:截屏,并查找列表上图标在截屏上的位置,然后点击所在位置。注意这个有优先级顺序的,找到点击了一个,就直接返回,不会再点击后面的。
  • 必选参数target_list:string list,查找的图标文件名列表,例如target=['start', 'end', ],则会查找wanted文件夹里的start.jpg图标和end.jpg图标所在位置并点击。
  • 可选参数area: int list, 搜索区域,长度为4 范围0-100, 例如area=[h1, h2, w1, w2],则只会在屏幕高度h1%到h2% ,宽度w1%到w2% 的这个范围里搜索,缩小范围可以加快搜索速度。可以不填,全屏搜索,影响不大。
  • 返回参数:string 或 bool 返回找到并点击的那个图标的name,都没找到则False。

exist(target_list, area=None)

  • 功能:截屏,查找target_list列表图标在截屏上的位置,不会点击,每个目标都会查找。因为很多游戏都是只要开始和结束时点击,中间有些图标是判断在哪个场景的,不需要点击。
    • 必选参数target_list:string list,查找的图标文件名列表,例如target=['start', 'end', ],则会查找wanted文件夹里的start.jpg图标和end.jpg图标所在位置。
  • 可选参数area: int list, 搜索区域,长度为4 范围0-100, 例如area=[h1, h2, w1, w2],则只会在屏幕高度h1%到h2% ,宽度w1%到w2% 的这个范围里搜索,缩小范围可以加快搜索速度。可以不填,全屏搜索,影响不大。
  • 返回参数:bool list, 输入[name1,name2...], 返回[name1_result, name2_result...]

代码示例:

from auto_player import Player
from auto_ocr_player import OCR_Player

#OCR文字识别 + 桌面模式
#在屏幕上查找文字内容'挑战'或'点击屏幕继续',找到哪个按哪个。
#关键词's挑战'加前缀s表示只找内容严格等于'挑战'的,不加表示任意包含'挑战'的。
myplayer = OCR_Player(accuracy=0.6, adb_mode=True)
myplayer.find_touch(['s挑战', '点击屏幕继续'])

#CV图像匹配 + ADB模式
#在屏幕上对yys_tiaozhan.jpg和yys_jixu.jpg这两个图标顺序查找,找到哪个按哪个
myplayer = Player(accuracy=0.8, adb_mode=True)  
myplayer.find_touch(['yys_tiaozhan', 'yys_jixu'])

常见问题

  • 注意文件路径不要有中文,否则会导致opencv读取图片失败,出现无法读取NoneType的Shape之类的错误
  • 桌面版本是是电脑截屏识别,所以游戏窗口需要在前台,不能被遮挡。
  • 桌面版本如果找到了目标且鼠标移动了,却没有点击生效,大概率是权限问题。用管理员权限打开CMD来运行程序即可。
  • ADB版本可以后台控制不怕遮挡,但是需要等手机截屏传输到电脑,传文件过程较慢且有极小概率出错卡死
  • 如果运行没有提示错误,但是一直匹配失败找不到,多半是图标精度问题,重新截取要找的图标
  • 推荐使用OCR版本,不用截图标,不受分辨率影响。
  • ADB模式效率稍低但可以后台运行,不影响用电脑正常使用,我自己平常用的比较多。桌面模式效率高,据反馈有概率被抓,可能是速度太快了或者游戏客户端带了检测。
  • 脚本纯属爱好与分享,欢迎一起交流,但不提供售后服务

补充说明

这个原来来是专门写给阴阳师的,点赞的人应该也都是阴阳师玩家,所以针对阴阳师脚本的思路再做一点补充说明、

  • 例子上写的是单人御魂, 组队跟单人其实是一样的,就再加一个点击接受组队。
  • 御魂、业原火、觉醒这类地图都是一样的逻辑,就是界面和图标有的不一样,一直循环查找点击就好了。
  • 探索麻烦一点,因为每个怪长得不一样。建议查找目标设置为怪头上那个交叉的剑的小图标,这个不会变。
  • 探索进图后找那个交叉剑的攻击标识,找不到就拖动地图,拖动几次还找不到就退出重进,单刷大概就这样思路
  • 组队探索最好是乘客位,不当司机,因为识别不了双倍经验BUFF怪。 有一个发表情的标识可以判断队长是否还在地图里,队长退了就跟着退厃重新接受组长
  • 最最麻烦的百鬼夜行,动来动去超坑爹,我打算弄个机器学习给他们做人脸识别。 等哪天我做成功了就重新回坑把我那上千张百鬼票砸了。

auto_player's People

Contributors

anywhere2go avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

auto_player's Issues

使用adb模式组队刷魂十,魂十结束会报错

Traceback (most recent call last):
File "D:/Rambo/study/python/YYS/yys_adb.py", line 20, in wrap
ans = f(*agrs, **kwagrs)
File "D:/Rambo/study/python/YYS/yys_adb.py", line 43, in select_mode
comand()
File "D:/Rambo/study/python/YYS/yys_adb.py", line 76, in yuhun
target = action.cut(screen, x1, x2)
File "D:\Rambo\study\python\YYS\action_adb.py", line 91, in cut
screen = screen[b:d,a:c]
TypeError: 'NoneType' object is not subscriptable
2189 KB/s (789512 bytes in 0.352s)
libpng error: Read Error

一些建议

通过adb操作真的有些低效( 不知几秒的延迟大家是怎么解决的)
我之前写过用winAPI向模拟器发送消息自动操作的
获取屏幕可以使用GetDC,
模拟点击可以使用PostMessage,
另外模拟器从没被鬼使黑发现过, 桌面版倒是被发现过.

关于是否需要模仿人类行为

大佬的脚本只是在结算后点击了 2 次 ,2 次之间偏移值也较大,是否需要尽可能的模仿出人类行为。

目前我修改成结算后,模仿我的动画点击了大概七八次,每次加入随机 100-150ms sleep。加入了粘带效果。不知道是否必要。

求楼主解答,cv2调取图片时提示返回类型是none

Traceback (most recent call last):
File "C:/Users/jane wang/Desktop/阴阳师脚本/YYS-master/yys.py", line 20, in wrap
ans = f(*agrs, **kwagrs)
File "C:/Users/jane wang/Desktop/阴阳师脚本/YYS-master/yys.py", line 43, in select_mode
comand()
File "C:/Users/jane wang/Desktop/阴阳师脚本/YYS-master/yys.py", line 87, in yuhun
size = want[0].shape
AttributeError: 'NoneType' object has no attribute 'shape'
screen shot ok Sun Jun 2 08:18:41 2019

Process finished with exit code 0

收到鬼使黑来信

在夜神模拟器上,用楼主的脚本单刷经验本,然后收到鬼使黑来信了。扣金币500万,体力1000。关键是大号没用脚本,小号用的,大小号都收到来信了

关于缓存问题

进行游戏截图的时候 图片会被默认保存在硬盘里还是缓存里

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.