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

这篇具有很好参考价值的文章主要介绍了Ai实现FPS游戏自动瞄准 yolov5fps自瞄。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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


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


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


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


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


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


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


class Point():
    def __init__(self, x1, y1, x2, y2):
        self.x1 = x1
        self.y1 = y1
        self.x2 = x2
        self.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


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

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


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

# 这里是导入依赖,需要这些库
import math
import sys
import time

import 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 = x1
        self.y1 = y1
        self.x2 = x2
        self.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.position
            L1 = 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(∩_∩)O
                        win32api.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的相对移动的计算方式有点懵,我画了个图,希望可以看明白。


实例图   图比较简陋 勿喷

ai自瞄,python,开发语言
 

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

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

我是毕加锁 期待你的关注

ai自瞄,python,开发语言

 文章来源地址https://www.toymoban.com/news/detail-783337.html

到了这里,关于Ai实现FPS游戏自动瞄准 yolov5fps自瞄的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • YOLOV5 自动瞄准(OpenVino)(附源码)

    参考文章:基于OpenVINOTM2022.2和蝰蛇峡谷优化并部署YOLOv5模型_openvino 前篇文章:基于YOLOV5的自动瞄准(附代码)_yolov5 自瞄_RedWhiteLuo的博客 之前已经通过Pytroch 调用 NVIDIA GPU 进行推理,但是在实际使用中,独显肯定是最好空闲出来的, 因此我们可以利用闲置的硬件——核显,

    2024年02月08日
    浏览(60)
  • Jetson Nano配置YOLOv5并实现FPS=25

    JetPack 4.6——2021.8 yolov5-v6.0版本 使用的为yolov5的yolov5n.pt,并利用tensorrtx进行加速推理,在调用摄像头实时检测可以达到FPS=25。 在打开的文档的末尾添加如下: 保持并退出,终端执行 1.打开终端输入: 2.修改nvzramconfig.sh文件 3.重启Jetson Nano 4.终端中输入: 可查看到swap已经变为

    2024年02月13日
    浏览(36)
  • Python-Pytorch框架-实现AI自动瞄准(下)

    OpenCV与Ptorch框架搭建一个利用目标骨骼关键点检测实现AI自动瞄准的娱乐项目(该项目仅供学习OpenCV、Ptorch框架、游戏自动化等参考)。 该项目思路大致分为如下步骤: 利用Pywin32以及OpenCV获取游戏窗口图像 数据集获取(本文为17骨骼关键点) 搭建Ptorch训练框架 利用深度学习

    2023年04月08日
    浏览(41)
  • 如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (0: 系统简介与架构)

    访问:http://127.0.0.1:8000/ObjectDetection/ObjectDetection1/ 先看下效果:两个摄像头实时展示 之后更新了效果,打算加上检测结果和 FPS ,结果加上FPS 实测了一下,好家伙一秒30-40 帧都行 在我的3060 上,这是python 写的 前后端实时检测你敢信,还两个摄像头机位。

    2023年04月08日
    浏览(48)
  • YOLOV5的FPS计算问题

    data换为自己的数据集对应的yaml文件 weights换为训练自己数据集得到的权重 batchsize这里要设置为1 pre-process:图像预处理时间,包括图像保持长宽比缩放和padding填充,通道变换(HWC-CHW)和升维处理等; inference:推理速度,指预处理之后的图像输入模型到模型输出结果的时间;

    2024年02月11日
    浏览(70)
  • yolov5-计算fps(新加入:4. 记录运行B导yolov7-tiny后计算fps的方法)

    参考自:睿智的目标检测21——如何调用摄像头进行目标检测 FPS简单来理解就是图像的 刷新频率 ,也就是 每秒多少帧 假设目标检测网络处理1帧要0.02s,此时FPS就是50 #---------------------------分割线-------------------------------- # 也就是说在计算FPS的时候,会强调 每秒 、 每张 。因

    2024年02月11日
    浏览(43)
  • 基于yolov7的FPS游戏(csgo,cf,cfhd)自瞄开发

    1.训练yolo识别人物导出pt文件 链接: yolov7训练自己的数据集-gpu版 2.使用win32进行屏幕截图和鼠标移动 3.使用导出的pt文件进行推理(pt文件将在完善后发出) 屏幕截图获取屏幕-检测目标的坐标-取中心点-计算距离获取最近的敌人坐标-移动鼠标到中心点 数据集整理后上传 鼠标移动

    2024年02月12日
    浏览(61)
  • FPS游戏自动枪械识别+压枪(以PUBG为例)

    本篇分享PUBG自动识别+压枪宏实现的完整思路,同样的思路可套用在其他FPS游戏上,开发语言使用Python3.9。 项目完整代码见:https://github.com/Cjy-CN/PUBGRecognizeAndGunpress 自动压枪简单的理解就是控制鼠标下移。但是,鼠标下移量的多少却是多方面因素的共同影响结果,以PUBG(绝地

    2024年02月05日
    浏览(32)
  • PYTHON+YOLOV5+OPENCV,实现数字仪表自动读数,并将读数结果进行输出显示和保存

    最近完成了一个项目,利用python+yolov5实现数字仪表的自动读数,并将读数结果进行输出和保存,现在完成的7788了,写个文档记录一下, 若需要数据集和源代码可以私信。 最后实现的结果如下: 首先查阅文献和文档,好家伙,不看不知道,做相似项目的很多资料都是硕士研

    2024年02月03日
    浏览(52)
  • FPS游戏实战数据集|yolov8训练模型导出|C/C++项目|驱动鼠标模拟人工|加密狗USB硬件虚拟化

    目录 数据集准备 训练模型 模型部署 总结 YOLO(You Only Look Once)是一种基于深度学习的目标检测算法,能够快速准确地识别图像中的目标。在游戏领域,YOLO可以应用于游戏场景中的人物识别和动作捕捉等方面。本文将介绍如何使用YOLO识别游戏人物。 15000张FPS实战数据集yolo

    2024年02月05日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包