Ai实现FPS游戏自动瞄准 yolov5fps自瞄

article/2025/8/19 4:56:30

大家好 我是毕加锁 (锁!)

今天来分享一个Yolov5 FPS跟枪的源码解析和原理讲解。代码比较粗糙 各位有什么优化的方式可以留言指出,可以一起交流学习。 


需要了解的东西和可能会遇到的问题
1.xy坐标点与当前鼠标的xy坐标点距离计算


2.获取窗口句柄,本文使用的是根据窗口名称获取句柄


3.推理方式:本文使用的是GPU(为啥呢?速度快噻,因为我3060显卡噻~)。


4.屏幕宽高获取和敌人坐标获取和计算哪个是最近的敌人并控制鼠标去敌人身上和头上。(为什么说是身体和头部呢,因为还有一个方式,就是只需要敌人身体坐标就可以计算得出敌人头部坐标)干货噢~


5.还有鼠标按键状态获取。


正文开始吧,我们就从头开始代码解析吧。
先来一个两个xy坐标的距离计算


class Point():def __init__(self, x1, y1, x2, y2):self.x1 = x1self.y1 = y1self.x2 = x2self.y2 = y2class Line(Point):def __init__(self, x1, y1, x2, y2):super().__init__(x1, y1, x2, y2)def getlen(self):changdu = math.sqrt(math.pow((self.x1 - self.x2), 2) + math.pow((self.y1 - self.y2), 2))return changdu


上面这段代码的使用方式如下

L1 = Line(x1, y1, x2, y2)  #传入两个xy坐标
L1.getlen() #return出两个坐标点的直线距离


接下来直接上全代码解析 各位可以把类和方法分离出去

# 这里是导入依赖,需要这些库
import math
import sys
import timeimport torch
import win32api
import win32con
import win32gui
from PyQt5.QtWidgets import QApplication
from pynput.mouse import Controller
import mouse#这里这俩class就是文章上面说的那个传入两个坐标点,计算直线距离的
class Point():def __init__(self, x1, y1, x2, y2):self.x1 = x1self.y1 = y1self.x2 = x2self.y2 = y2
class Line(Point):def __init__(self, x1, y1, x2, y2):super().__init__(x1, y1, x2, y2)def getlen(self):changdu = math.sqrt(math.pow((self.x1 - self.x2), 2) + math.pow((self.y1 - self.y2), 2))return changdu#第一步:我们获取到某FPS游戏的窗口句柄
hwnd = win32gui.FindWindow(None, "穿越火线")
#这个方法是获取上面句柄窗口的窗口截图,用的是PyQt截图,有速度更快更好的方式的话可以换上
#截图完毕后保存在根目录的cfbg.bmp文件
def screen_record():app = QApplication(sys.argv)screen = QApplication.primaryScreen()img = screen.grabWindow(hwnd).toImage()img.save("cfbg.bmp")#这里就是调用我们那yolo模型来进行推理啦,我设置的是cuda,也就是英伟达的GPU,因为cpu太慢了。
#如果自己的不能使用GPU推理的话把下面这两行改改,改成cpu的就可以了。
device = torch.device("cuda")
model = torch.hub.load('F:/yolov5-master', 'custom', 'F:/yolov5-master/yolov5n6.pt',source='local', force_reload=False)  # 加载本地模型
# 这里是定义屏幕宽高[其实这俩就是游戏所对应的分辨率,比如:游戏里1920*1080这里就是1920*1080]
game_width = 1024
game_height = 768
# 这边就是开始实时进行游戏窗口推理了
#无限循环 -> 截取屏幕 -> 推理模型获取到每个敌人坐标 -> 计算每个敌人中心坐标 -> 挑选距离准星最近的敌人 -> 如果左键是按下状态则控制鼠标移动到敌人的身体或者头部(本文计算方式是移动到头部)
while True:# 截取屏幕screen_record()# 使用模型model = model.to(device)img = 'cfbg.bmp' # 开始推理results = model(img)# 过滤模型xmins = results.pandas().xyxy[0]['xmin']ymins = results.pandas().xyxy[0]['ymin']xmaxs = results.pandas().xyxy[0]['xmax']ymaxs = results.pandas().xyxy[0]['ymax']class_list = results.pandas().xyxy[0]['class']confidences = results.pandas().xyxy[0]['confidence']newlist = []for xmin, ymin, xmax, ymax, classitem, conf in zip(xmins, ymins, xmaxs, ymaxs, class_list, confidences):if classitem == 0 and conf > 0.5:newlist.append([int(xmin), int(ymin), int(xmax), int(ymax), conf])# 循环遍历每个敌人的坐标信息传入距离计算方法获取每个敌人距离鼠标的距离if len(newlist) > 0:# 存放距离数据cdList = []xyList = []for listItem in newlist:# 当前遍历的人物中心坐标xindex = int(listItem[2] - (listItem[2] - listItem[0]) / 2)yindex = int(listItem[3] - (listItem[3] - listItem[1]) / 2)mouseModal = Controller()x, y = mouseModal.positionL1 = Line(x, y, xindex, yindex)# 获取到距离并且存放在cdList集合中cdList.append(int(L1.getlen()))xyList.append([xindex, yindex, listItem[0], listItem[1], listItem[2], listItem[3]])# 这里就得到了距离最近的敌人位置了minCD = min(cdList)# 如果敌人距离鼠标坐标小于150则自动进行瞄准,这里可以改大改小,小的话跟枪会显得自然些if minCD < 150:for cdItem, xyItem in zip(cdList, xyList):if cdItem == minCD:# 锁头算法:使用win32api获取左键按下状态,如果按下则开始自动跟枪if win32api.GetAsyncKeyState(0x01):# 控制鼠标移动到某个点:看不懂计算方式的话看文章下面讲解吧O(∩_∩)Owin32api.mouse_event(win32con.MOUSEEVENTF_MOVE, int(xyItem[0] - game_width // 2),int(xyItem[1] - (game_height - (xyItem[3] - xyItem[5])) // 2), 0, 0)break

好了,我们来讲解下这行代码
win32api.mouse_event(鼠标行为:这里用的是MOVE相对移动, x坐标,y坐标, 0, 0)
第一个参数,先设定鼠标的行为:使用相对移动,为什么不用绝对移动呢,因为绝对移动在游戏里是无效的
第二个参数,x轴相对移动的距离:敌人x坐标 - (屏幕宽度 / 2)
第三个参数,y轴相对移动的距离:敌人y坐标 - (屏幕高度 - (敌人最大y坐标 - 敌人最小y坐标) / 2)
第一第二个参数相对来说比较好理解,但是可能有人对于第三个y的相对移动的计算方式有点懵,我画了个图,希望可以看明白。


实例图   图比较简陋 勿喷


 

在其他fps游戏,我们只需要修改窗口名称参数和分辨率参数即可。

以上就是Yolov5 FPS跟枪的源码解析和原理讲解了 感谢大家支持

我是毕加锁 期待你的关注

 


http://chatgpt.dhexx.cn/article/Xh9IYnbp.shtml

相关文章

[CPU+目标检测] openvino实现Robomaster自瞄

这篇文章为大连理工大学Robomaster凌Bug战队的李乐恒同学成果&#xff01; 他在CPU上利用openvino这样的深度学习算法实现了Robomaster的自瞄&#xff0c;大大提高了robomaster自瞄的上界&#xff0c;且达到了良好的检测效果。所有代码全部开源&#xff0c; github主页如下&am…

基于C++的车辆装甲板检测自瞄系统

资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85773209 资源下载地址&#xff1a;https://download.csdn.net/download/sheziqiong/85773209 装甲板检测 由于在比赛过程中操作手是第一视角&#xff0c;很难用手动瞄准。通过装甲板检测就是自瞄系统…

CFAIyolo5自瞄源码分享

比市面上强的多 阿里云盘分享

FPS 游戏自瞄原理

了解FPS游戏自瞄漏洞 经常玩游戏的朋友&#xff0c;应该知道FPS游戏&#xff0c;例如&#xff1a;穿越火线&#xff0c;逆战等等&#xff0c;他们的特点就是以第一人称视角进行操作人物&#xff0c;屏幕中间会有一个准星&#xff0c;通过准星瞄准敌人进行攻击以达到击杀效果和…

FPS游戏通用自瞄与透视算法详解!!

自瞄算法与实现&#xff1a; 1&#xff1a;首先我们要找到一个敌人的三维坐标。 2&#xff1a;我们还要找到自己的三维坐标。 3&#xff1a;我们还要找到自己的鼠标坐标X与Y&#xff08;这里的鼠标坐标X与Y是角度&#xff0c;X为360&#xff0c;Y正中间为0向上减少到负90度&…

Web前端技术HTML

HTML&#xff08;Hyper Text Markup Language&#xff09; 目录 一、什么是HTML&#xff1f; 二、为什么需要HTML&#xff1f; 三、HTML标签 四、HTML文档结构 五、HTML标签属性 1、标签的语法 2、注意事项 3、常用标签 一、什么是HTML&#xff1f; HTML指的是超文本…

前端技术概述

目录 一、开发框架 1、C/S架构&#xff08;Client-Server&#xff09; 2、B/S架构&#xff08;Browser-Server&#xff09; 二、前端术语 1、渲染 2、Front-end&#xff08;前端开发&#xff09; 3、Back-end&#xff08;后端开发&#xff09; 三、HTML的DOM结构 四、…

如何写前端技术方案文档?

大厂技术 高级前端 Node进阶 点击上方 程序员成长指北&#xff0c;关注公众号 回复1&#xff0c;加入高级Node交流群 前言 百度百科对计算机软件的的定义为&#xff1a;“计算机软件( Software&#xff0c;也称软件)是指计算机系统中的程序及其文档&#xff0c;程序是计算任务…

前端技术体系与发展计划

为什么会想起来整理这么一套东西 最近和很多已经工作了的同学聊天&#xff0c;发现大家都遇到了很多的问题或者说是烦恼。整理了一下&#xff0c;大体可以分为两个大的种类&#xff1a; 关于前端技术体系的问题关于技术能力发展的问题 从这些问题中&#xff0c;我抽出来几个…

前端技术发展历程

&#x1f482; 个人网站:【海拥】【摸鱼游戏】【神级源码资源网】&#x1f91f; 前端学习课程&#xff1a;&#x1f449;【28个案例趣学前端】【400个JS面试题】&#x1f485; 想寻找共同学习交流、摸鱼划水的小伙伴&#xff0c;请点击【摸鱼学习交流群】 随着互联网的不断发展…

前端技术简介

声明&#xff1a;本文转载自http://www.lvyestudy.com/les_hj/hj_1.1.aspx&#xff0c;如需要了解更多关于前端的知识&#xff0c;请查看该链接 在HTML入门教程学习之前&#xff0c;我们有必要跟大家讲一下网站开发的一些知识。了解这些知识&#xff0c;对你以后网站开发之路如…

2020 年前端技术发展盘点

2020 年已经结束&#xff0c;这一年里面因为疫情&#xff0c;生活和工作中大家都有受到一定的影响。但是在 2020 年里面前端技术的发展依然没有停止脚步。 而我们作为前端开发者&#xff0c;必定需要对技术的更新换代有所了解。虽然我们不需要去学习所有新出来的技术。但是时刻…

前端技术(html)

目录 一、HTML 1. 概念 2. 快速入门 3. 开发工具 HBuilder 3.1 HBuilder介绍 3.2 HBuilder下载 3.3 HBuilder的安装与使用 3.4 使用HBuilder创建项目 4. HTML文档的基本结构 4.1 基本结构 4.2 HTML注释 5. HTML中常用标签 5.1.文本标签 5.2 图片标签 5.3列表标签 5.4…

【狂神说Java】Vue学习笔记01:前端知识体系

本文根据B站【狂神说Java】vue系列视频整理&#xff0c;如需观看视频&#xff0c;请点击链接跳转 【狂神说Java】Vue视频 2、前端知识体系 想要成为真正的“互联网Java全栈工程师”还有很长的一段路要走&#xff0c;其中前端是绕不开的一门必修课。本阶段课程的主要目的就是带…

SUMO安装及环境变量设置

sumo安装 1.打开sumo官网&#xff0c;进入下载界面 2.解压安装包 3.打开bin文件&#xff0c;创建sumo-gui和netedit快捷方式 SUMO环境变量配置 1.右击我的电脑&#xff0c;点击属性 2.点击高级系统设置&#xff0c;环境变量 3.在用户变量的path&#xff0c;加入以下变量 4.…

Python pip保姆级环境变量设置

1.打开系统中的高级系统设置 2.点击环境变量 3.在系统变量区域&#xff0c;选中path&#xff0c;点击编辑进入编辑页面。 4.将python Scripts文件夹所在位置复制粘贴到变量值中&#xff0c;注意名称之间有分号。 5.winr cmd回车&#xff0c;输入pip出现以下页面说明设置成功。…

MySQL数据库环境变量设置

1、鼠标左键&#xff0c;点击设置 2、出现一个框&#xff0c;在框里&#xff0c;填写&#xff0c;高级系统设置&#xff0c;确定 3、打开了高级系统设置&#xff0c;点击红圈圈着的“环境变量” 4、出现一个新的小弹框&#xff0c;点击path&#xff0c;&#xff08;路径的意思&…

Mac设置环境变量

环境变量是电脑操作系统中常用的一些变量&#xff0c;作用类似于将一些常用命令所在的文件夹位置预先告诉操作系统&#xff0c;当以后需要用到这些命令时&#xff0c;操作系统就自动来这些位置取。 例如&#xff0c;常见的Java开发中配置的相关环境变量&#xff1a;PATH&#…

python环境变量设置(win10为例)

C站发表的第一个文章啊&#xff0c;话就不多说了。 &#xff08;PS&#xff1a;我也是小白&#xff0c;注册C站第一天&#xff0c;冒个泡&#xff09; win10教程&#xff08;只有win10电脑&#xff09; 先放一张我自己总结的教程 &#xff08;PS&#xff1a;应该够清楚了&a…