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

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.