您现在的位置是:首页 >技术交流 >Yolov5使用Ai实现FPS游戏自动瞄准网站首页技术交流

Yolov5使用Ai实现FPS游戏自动瞄准

凉亭下 2024-10-27 12:01:03
简介Yolov5使用Ai实现FPS游戏自动瞄准

自动瞄准技术已经成为了许多FPS游戏玩家们追求的终极目标之一。近年来,随着深度学习技术的发展,越来越多的自动瞄准工具开始出现,其中最为流行且表现出色的莫过于 Yolo 系列目标检测算法,特别是 Yolov5。本文将介绍如何使用 Yolov5 算法实现 FPS 游戏自动瞄准。

  1. xy坐标点与当前鼠标的xy坐标点距离计算

在实现自动瞄准功能中,我们首先需要计算敌人距离屏幕的 xy 坐标点与当前鼠标的 xy 坐标点的距离。这可以通过勾股定理来实现。对于鼠标当前坐标为 (x1, y1),目标敌人坐标为 (x2, y2),距离为 d,则有:

d = math.sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2)
  1. 获取窗口句柄,本文使用的是根据窗口名称获取句柄

在自动瞄准时,我们需要控制鼠标在游戏窗口内移动,因此需要获取游戏窗口的句柄。在本文中,我们采用根据窗口名称获取句柄的方式,代码如下:

import win32gui

hwnd = win32gui.FindWindow(None, window_name)

其中,窗口名称是游戏窗口的标题,可以通过查看窗口属性来获取。

  1. 推理方式 GPU

在使用 Yolov5 算法进行目标检测时,推理速度非常重要。为了实现高效的推理,我们可以使用 GPU 进行加速。这可以通过设置参数 --device gpu 来实现:

python detect.py --source 0 --weights yolov5s.pt --device gpu
  1. 屏幕宽高获取和敌人坐标获取和计算哪个是最近的敌人并控制鼠标去敌人身上和头上

为了确定敌人的坐标并控制鼠标移动到敌人身上,我们需要获取游戏窗口的宽度和高度,并使用 Yolov5 来检测敌人的位置。如果有多个敌人,我们可以通过计算距离来确定最近的敌人,并控制鼠标移动到其身上或头上。代码如下:

import mss
import cv2
import numpy as np
import pyautogui

with mss.mss() as sct:
    monitor = {"top": 40, "left": 0, "width": 800, "height": 640}

    while True:
        # 获取屏幕截图并处理
        img = np.array(sct.grab(monitor))
        img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)

        # 使用 Yolov5 进行目标检测
        results = detect_objects(img)

        # 计算敌人和鼠标的距离,选择最近的敌人
        closest_enemy = select_closest_enemy(results)
        if closest_enemy is None:
            continue

        # 控制鼠标移动到最近的敌人身上
        position = get_enemy_position(closest_enemy)
        pyautogui.moveTo(position[0], position[1])
  1. 鼠标按键状态获取

最后,我们需要获取鼠标按键的状态,以便进行自动射击。这可以使用 pyautogui 库来实现,代码如下:

import pyautogui

while True:
    # ...

        # 检测鼠标左键是否按下
        if pyautogui.mouseDown(button="left"):
            # 自动射击
            pass

完整代码如下:

import mss
import cv2
import numpy as np
import pyautogui

# Yolo 相关代码
def detect_objects(image):
    # ...
    return results

def select_closest_enemy(objects):
    # ...
    return closest_enemy

def get_enemy_position(enemy):
    # ...
    return position

# 屏幕宽度和高度
SCREEN_WIDTH = 800
SCREEN_HEIGHT = 640

with mss.mss() as sct:
    monitor = {"top": 40, "left": 0, "width": SCREEN_WIDTH, "height": SCREEN_HEIGHT}

    while True:
        # 获取屏幕截图并处理
        img = np.array(sct.grab(monitor))
        img = cv2.cvtColor(img, cv2.COLOR_RGBA2BGR)

        # 使用 Yolov5 进行目标检测
        results = detect_objects(img)

        # 计算敌人和鼠标的距离,选择最近的敌人
        closest_enemy = select_closest_enemy(results)
        if closest_enemy is None:
            continue

        # 控制鼠标移动到最近的敌人身上
        position = get_enemy_position(closest_enemy)
        pyautogui.moveTo(position[0], position[1])

        # 检测鼠标左键是否按下
        if pyautogui.mouseDown(button="left"):
            # 自动射击
            pass

总体来说,使用 Yolov5 算法实现 FPS 游戏自动瞄准非常有挑战性,需要在目标检测算法优化和实现细节等方面下大力气。同时,在实现自动射击时,需要注意游戏的反作弊机制以避免被封禁。如果您想要尝试实现此功能,建议先研究游戏反作弊机制和相关法律法规,并在此基础上进行技术实现。

风语者!平时喜欢研究各种技术,目前在从事后端开发工作,热爱生活、热爱工作。