# auto_player **Repository Path**: Luckkk/auto_player ## Basic Information - **Project Name**: auto_player - **Description**: 自动挂机脚本脚手架(自带一些方法) - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 1 - **Created**: 2024-02-28 - **Last Updated**: 2024-03-17 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ### 2023.03.29再次分享 主要是补充一个自己在用的OCR版本,继承了原来的截屏、点击等功能,匹配功能从opencv的图像匹配换成了OCR文字识别,**不用一个个图标截图了,推荐使用**,实现了同样的寻找、点击功能,同样提供模式与ADB模式。OCR采用的是百度家的paddlepaddle深度学习框架,超轻量模型chinese_ocr_db_crnn_mobile,识别速度感觉跟图像匹配差不多挺快的。有需要的可以自己换大模型提高精确度。[百度OCR模型使用教程点这里](https://aistudio.baidu.com/aistudio/projectdetail/507159?channelType=0&channel=0) 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那边有添加了更多丰富功能并长期更新至今的完整版,欢迎大家移步使用[点击传送门](https://github.com/lisai9093/YYS)** ## 自动游戏挂机辅助 * 通用手游自动挂机脚本,解放双手,功能同阴阳师手游内自带的小纸人挂机系统类似,等于不受樱饼限制无限使用的小纸人~ * 拟人化的识图与模拟点击,不读取或修改游戏内部数据,只是取代手动操作。通过随机偏移点击位置和操作延迟防检测。 * 适用阴阳师、明日方舟、碧蓝航线等能自动战斗只要手动点开始结束的游戏。不适用王者荣耀等需要大量操作的游戏. ## 核心思路: * 截屏,然后图片识别的方法判断当前游戏场景,找到需要点击的位置(原版用的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怪。 有一个发表情的标识可以判断队长是否还在地图里,队长退了就跟着退厃重新接受组长 * 最最麻烦的百鬼夜行,动来动去超坑爹,我打算弄个机器学习给他们做人脸识别。 等哪天我做成功了就重新回坑把我那上千张百鬼票砸了。 * pyinsterller打包命令: pyinstaller --add-data "venv\Lib\site-packages\paddle;.\paddle" --add-data "venv\Lib\site-packages\paddlenlp;.\paddlenlp" --add-data "venv\Lib\site-packages\datasets;.\datasets" --add-data "venv\Lib\site-packages\shapely;.\shapely" --add-data "venv\Lib\site-packages\pyclipper;.\pyclipper" --add-data "venv\Lib\site-packages\shapely.libs;.\shapely.libs" -i pipe.ico --name=pipeline main.py