基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)


本文来自作者去年写的一个小项目,项目使用YOLOv5-2.0PyTorch,实现了一款基于目标检测算法的射击类游戏瞄准辅助,俗称“AI外挂”。(文中含项目地址及演示视频,项目中提供了作者预训练的可用于CSGO的模型。)

项目地址:https://github.com/Aa-bN/AimYolo


文章目录

  • 一、前言
    • 1.1 项目地址
    • 1.2 项目结构
    • 1.3 注意事项
  • 二、开发过程
    • 2.1 总体设计
    • 2.2 屏幕实时捕获
    • 2.3 鼠标定位与移动
      • 2.3.1 鼠标定位
      • 2.3.2 鼠标移动
    • 2.4 代码重构
  • 三、模型开发
    • 3.1 模型结构
    • 3.2 数据集
      • 3.2.1 CSGO专用数据集
      • 3.2.2 检测类别
      • 3.2.3 数据集划分
      • 3.2.4 数据分布特征
      • 3.2.5 数据示例
    • 3.3 模型训练
      • 3.3.1 超参数
      • 3.3.2 训练结果
      • 3.3.3 预测效果
  • 四、核心代码
  • 五、项目部署与展示
    • 5.1 项目部署
    • 5.2 使用
    • 5.3 游戏内展示
  • 六、总结
  • 参考

一、前言

本文整理自作者去年写的一个小项目,出于个人兴趣而写,为demo级别,较为粗糙,优化空间很大。灵感来源于B站up主“林亦LYi”的视频。

1.1 项目地址

  • 已在GitHub开源,点此进入
  • 同步更新至站外博客

1.2 项目结构

  • PyTorch,机器学习框架
  • YOLOv5-2.0,项目地址
  • 自瞄模块

1.3 注意事项

  • *本项目旨在激起深度学习、游戏安全等方面爱好者的兴趣,仅供学习交流
  • *切勿用于盈利及违法用途,以及进行任何破坏游戏公平的行为
  • 联网测试有封号风险,推荐断网使用
  • 推荐结合Anaconda部署并使用
  • 10系显卡效果明显不如30系(o(╥﹏╥)o)

值得注意的是,AI外挂几年前就已经出现,最初为YouTube上的一位创作者开发,网络上也可以找到一些版本。本项目理论上可以用于CSGO、APEX、PUBG等多种游戏,实际以CSGO为例进行了模型的开发与使用。相对于传统外挂,AI外挂多基于目标检测算法,不会修改游戏的本地内存,也不会上传恶意数据。本文后续有6个部分:开发过程模型开发核心代码项目部署与展示总结参考


二、开发过程

本节分为总体设计屏幕实时捕获鼠标定位与移动代码重构等4个部分。

2.1 总体设计

项目整体分为8个模块,看图。(づ ̄3 ̄)づ╭❤~

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第1张图片

  • 参数获取:继承自YOLO,个性化参数,如指定模型对目标的检测部位(头部、身体等)
  • 屏幕截取:CPU或GPU截图,截图时间尽可能短,可指定屏幕截图区域
  • 预处理:截图数据转为tensor数据类型,与YOLO接口一致
  • 模型推理:图像数据交付核心模型,进行检测
  • 坐标计算:根据模型的推理数据,计算目标位置的坐标
  • 鼠标移动:将鼠标移动至对应坐标,如头部、身体及其中心位置
  • 专用/通用数据集:如CSGO数据集(标注CT,CT_Head,T,T_Head),传统人体识别数据集等
  • 模型训练:由于待检测目标一般较少,且对速度要求较高,选取s版本的模型
  • 整体:整体采用单进程,在While循环中持续检测,并设置信号用于结束进程,后续完善为根据指定键位,更改AI姿态(大概会吧T_T)

2.2 屏幕实时捕获

这里并非真正的实时,而是从屏幕截取到模型推理,再到鼠标移动,整个过程的用时很少,宏观感受为实时。废话少说,看图(づ ̄3 ̄)づ╭❤~。

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第2张图片

  • CPU截屏:采用mss库进行截屏;也可以采用d3dshot库进行GPU截屏,但其中会涉及numpy和tensor数据的运算速度、显卡的设置问题,不推荐
  • 实时截图与展示:将截取的画面实时展示,便于测试与直观感受,根据参数配置作为可选项

以只因哥打篮球的视频为例,这个部分的效果应该是这样的。(づ ̄3 ̄)づ╭❤~

坤哥打球实时检测


2.3 鼠标定位与移动

关于鼠标的定位与移动,需要搞清几个问题,看图(づ ̄3 ̄)づ╭❤~。

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第3张图片


2.3.1 鼠标定位

  • 即让鼠标搞清自己的定位
  • step1. 获取鼠标当前位置的坐标/像素
  • step2. 结合YOLO,根据检测框计算坐标
  • step3. 计算欧式距离,移动鼠标
  • 特别注意(部分问题会在核心代码部分解释)
    • 鼠标移动时的绝对距离与相对距离(一般为相对距离,故计算了欧氏距离)
    • 物理距离与分辨率不一致的问题 (开启DPI感知)
    • 一些游戏需要关闭原始输入

2.3.2 鼠标移动

  • A. Windows程序鼠标移动机制
    • 如图,传统机制已经满足不了当下大型游戏的需求
  • B. DirectX游戏开发
    • 微软开发的多媒体编程接口,具有更快的响应速度
    • 导致PyAutoGui、Pynput等采用Virtual Key Codes的键鼠控制库失效
  • C. 绕过限制
    • 更先进的Scan Codes和Win32 Sendinput方法,实现游戏内的键鼠快速控制
    • 如图,采用了Ctypes库
    • 在一些老游戏,如CS1.6中,则不用考虑这些

2.4 代码重构

重构了YOLOv5中的detect.py:保留核心模型,更改原有逻辑,添加自定义功能。看图。(づ ̄3 ̄)づ╭❤~

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第4张图片

更多细节留给核心代码部分。


三、模型开发

本节分为模型结构数据集模型训练等3个部分。

3.1 模型结构

采取的模型结构,看图。具体介绍可参考江佬的博客,该图也源此。(づ ̄3 ̄)づ╭❤~

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第5张图片

需要说明的是:

  • 代码版本:YOLOv5-2.0
  • 选取模型:Pretrained YOLOv5s,后续训练时,以此为依托,进行不太严格的fine-tune
  • 任务类型:目标检测

3.2 数据集

本小节对使用的数据集进行介绍。

3.2.1 CSGO专用数据集

数据集项目地址,点此进入。时间有限,并没有进行数据集的构建,当时,这个项目解决了博主的燃眉之急。值得说明的是,该项目的创作者也附加了一些单纯的检测代码。


3.2.2 检测类别

检测类别数:4,包括 ct, t, t_head, ct_head,即反恐精英,恐怖分子,恐怖分子头部,反恐精英头部。这有利于模型进行目标身体或头部的检测与锁定。


3.2.3 数据集划分

图片总数:800张。博主进行手动(不够随机)划分->训练集:700张,验证集:100张。


3.2.4 数据分布特征

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第6张图片


3.2.5 数据示例

img_250.jpg的原始图像信息标签信息,以及一些图片的groundtruth如下。(づ ̄3 ̄)づ╭❤~

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第7张图片

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第8张图片

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第9张图片


3.3 模型训练

本小节展示了训练过程中产生的数据和预测效果。

3.3.1 超参数

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第10张图片


3.3.2 训练结果

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第11张图片
基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第12张图片


3.3.3 预测效果

基于YOLOv5的FPS类游戏瞄准辅助(附可用于CSGO的模型)_第13张图片
需要说明的是,模型在预训练(pretrained)的YOLOv5s的权重基础上,进行了不太严格的微调(fine-tune)。图中示例均为模型训练200轮的结果。实际上,模型在训练50轮时,就已经能够初步使用了。


四、核心代码

核心代码集中在z_captureScreen.pyz_ctypesz_detect5.py中。

懒得写了,有空再补,相信以gie gie们的聪明才智,一定可以看明白哒,哒哒哒。(づ ̄3 ̄)づ╭❤~


五、项目部署与展示

本节分为项目部署使用游戏内展示等3个部分。

5.1 项目部署

  • A. Anaconda(推荐)和 PyTorch 的安装
  • B. 部署 YOLOv5
  • C. 自瞄模块的依赖库,可见项目的requirements.txt,依赖不多,也可根据报错安装

5.2 使用

  • 进入项目目录
  • python z_detect5.py [可选参数],例如:
    • python z_detect5.py --view-img --classes 0 1 2 3
    • python z_detect5.py --classes 2
    • python z_detect5.py
  • 上述命令推荐在命令行中运行,在PyCharm中使用,可能出现win32相关库的报错

5.3 游戏内展示

CSGO中,注意在游戏内设置中关闭数据原始输入。

CSGO人机实战


六、总结

本节总结了一些问题。

  1. 小目标检测:对于小目标,存在误检,可能检测不到
  2. 鼠标移动:移动速度过快,无法最大程度仿真
  3. 弱点:后台实时运行的脚本 + 不自然的鼠标移动模式
  4. 可能的优化方向:远程外挂;多进程提速;数据集优化(增加人物模型等);硬件性能提升(CPU+GPU)
  5. 三个问题
    • A. 坐标不一致性
      • 监听器和控制器不一致,即屏幕的物理尺寸<分辨率。Python获取的鼠标位置对应屏幕的物理位置,而非对应的分辨率。
      • 解决方案:ctypes库,开启windows提供的DPI感知。
    • B.相对距离
      • 由于FPS类游戏,鼠标位置始终在屏幕中心,需要以目标位置与当前鼠标位置的相对距离,作为移动指标。
    • C.数据输入
      • 对于CSGO等FPS类游戏,游戏内需要关闭数据原始输入。
  6. 写在最后:博主并非专业人员,如有错误,请指正。

参考

懒得写了,有空再补。(づ ̄3 ̄)づ╭❤~(づ ̄3 ̄)づ╭❤~(づ ̄3 ̄)づ╭❤~

你可能感兴趣的:(YOLO,游戏,pytorch,计算机视觉,深度学习)