1.脚本类型及学习选择
1).目前市面上主流的游戏挂基本可以分为3个种类,机器键盘,内存挂,图色挂。
2).想要学习最不建议的其实就是内存挂,这个是直接违法,因为他是直接篡改游戏内数据。你必须具备非常牛的技术才能很稳,不然没有任何意义,去割韭菜的另说。
3).硬件挂和图色挂不违法但是违规,自己玩可以,但不能出售和大规模生产,否则迟早要凉,拿了多少都会双倍的吐出来,至于学那个主要看自身的学习方向。本身就是搞硬件的那就硬件挂,软件的就搞图色挂,反正最终还是会到一起,因为彼此都会觉得限制太多而去向对方学习。
4).这里我们主要讲图色挂,这种挂比较安全但是效率比较低,开发此类程序首先我们肯定需要会一门合适的开发语言,这里我只推荐两种一个是易语言,一个是python。易语言是中文编程,对于纯零基础的小白来讲还是比较友好的,但是要想实现非常好的效果还得是python。
5).第一步我们先需要学会python相关的基础知识,并不需要特别的深入。了解python对于游戏相关的几个需要了解的库的使用(numpy,pyautogui,win32gui,os,cv2,等)
2.图色识别挂的实现原理
1)在玩游戏的过程中不断的进行截图,获取大量的游戏通关截图。(此处需要一个截图脚本,用来获取初始训练图片数据)
# 实现玩游戏的过程中自动截图用以后续训练数据集# 1.使用PIL截图方式# 2.使用PIL坐标截图,截图频率每秒1张,图片大小约为1M,训练目标角色:阿修罗# 3.手动使用labeling工具手动标注人物和怪物# 4.训练数据集# 细节:1)技能颜色调低from PIL import ImageGrabimport timeimport random# PIL实现屏幕设定区域截图def gran_screen_pil(): # 截取窗口图片,建议将游戏窗口调整到最左上角,调整后面两个参数截取你想要的图片大小 im = ImageGrab.grab(bbox=(0, 0, 1800, 940)) # 生成一个指定范围内的随机整数 random_int = random.randint(1, 100000000000000) # 记得创建好DNF_Data文件夹,没有的话会报错。 name = './DNF_Data/img_DNF{}.png'.format(random_int) # 保存图片到本地 im.save(name)def main(): # 6秒后开始执行循环截图 time.sleep(6) # 循环执行,次数依据本身需要进行,需要多少张图片就循环多少次 for i in range(120):# 1秒后开始截图time.sleep(0.5)gran_screen_pil()if __name__ == '__main__':main()
2)将这些图使用标注工具进行标注(此处需要学会使用标注工具推荐:labeling)
3)使用YOLOv5将标注好的图片进行训练,获取图色权重文件。
训练过程
识别效果
4)实现图片自动标注。使用上一步获取到的权重文件去识别未标注的图片。然后将上一次标注的图片和这一次自动标注好的图片拿去进行进一步的图片训练。循环往复,训练的图片越多,识别的准确率就越高,开始的时候,需要人工检查自动标注的图片确保都是正确的,自动标注错误的需要人工手动的对其进行调整。
5)最终得到了较高的图色识别权重文件后就可以开始进行自动化过图了。
6)打开游戏,高频截图开启(win32gui效率最高),截图数据交由YOLO进行处理,YOLO返回坐标数据,程序依据返回的人物和怪物的坐标信息去控制键盘鼠标的操作。
*注意:模拟级的键鼠交互,没有任何作用。要么使用键鼠幽灵,易键鼠等驱动模拟键鼠交互(可能会被检测到)。要么使用驱动级的winio去做(可能会被检测到)。pyautogui、win32gui这类的键鼠交互就不要在使用了,好一点的游戏基本过不了检测,该防的人家早就防住了。最强的挂其实应该是软硬件相结合的挂,软件针对屏幕进行录屏或者高频截图,YOLO程序分析数据,通过串口通讯将数据交由单片机,单片机依据数据执行操作控制键盘和鼠标,实现软硬件相结合。目前只实现软件部分,收益情况并不理想,顶多有口饭吃,算是有一点额外收入。
7)幽灵键鼠DLL调用,注意python版本一定要和对应的文件一致
8)在鼠标点击时一般都是一些固定点,这个时候我们可以使用OpenCV的特征检测去获取想要的坐标信息,下面是获取匹配到特征的图片的中心点(未做浮动)
# 图形特征匹配import cv2from PIL import ImageGrab# PIL实现屏幕设定区域截图,并进行特征匹配,输出匹配特征中心点位置def gran_screen_pil(): # 截取窗口图片 img = ImageGrab.grab(bbox=(0, 0, 1800, 940)) img.save('./shou.jpg') img_pil = cv2.imread("./shou.jpg") # 需要进行对比的特征图片 img_terminal = cv2.imread("./assets_img/blxe.jpg") # 获取特征图片的宽高(用于计算要点击的位置,此处最好做浮动值,防止每次点击位置过于接近被判定位辅助) height, width, channel = img_terminal.shape # 开始进行特征检测 result = cv2.matchTemplate(img_pil, img_terminal, cv2.TM_SQDIFF_NORMED) # 参数1:全图; 参数2:全图中的特征图;参数3:匹配方式 # 解析出匹配区域的左上角坐标 upper_left = cv2.minMaxLoc(result)[2]# 计算匹配区域右下角的坐标 lower_right = (upper_left[0] + width, upper_left[1] + height) # 计算中心点坐标并返回,防检测的情况下这个点需要做一下浮动,此处并没有处理,请注意 avg = (int((upper_left[0] + lower_right[0]) / 2), int((upper_left[1] + lower_right[1]) / 2)) return avg
3.开发环境准备
1.硬件:显卡最好是N卡,也就是英伟达的显卡。下面是我的电脑的CPU和显卡
CPU:i9-12900HX
显卡:RTX 4060
第一步:安装anaconda,安装过程一路下一步就行,安装路径最好选择D盘,不要放C盘。
anaconda官网Free Download | AnacondaAnaconda’s open-source Distribution is the easiest way to perform Python/R data science and machine learning on a single machine.https://www.anaconda.com/download/#windows
详细过程参考Anaconda安装(过程详细)_anaconda安装教程_yanghanyu0126的博客-CSDN博客
第二步:配置conda镜像源
1.conda安装完成后,在应用中打开Anaconda Prompt
2.初始环境为base,开始配置conda镜像源,在Anaconda Prompt中输入以下5个命令
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/r
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/pro
conda config –add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/msys2
3.创建新环境conda create -n YOLO_dnfpython=3.8(python版本必须是3.8左右,因为幽灵键鼠最高支持到3.8)
conda env list(查看已有的环境)
conda activate 环境名称(切换到对应的环境)
conda remove -n 环境名称 –all (删除环境以及相关依赖)
4.安装pytorch(CPU版,GPU版另开文章单独写。)
运行命令:conda install pytorch torchvision torchaudio cpuonly -c pytorch
5.安装好后,使用pycharm打开YOLOv5源码。
运行命令下载项目依赖:pip install -r requirements.txt -i http://mirrors.aliyun.com/pypi/simple/ –trusted-host mirrors.aliyun.com
6.运行代码