【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄

介绍

本人机器学习小白,通过语言大模型+百度进行搜索,磕磕绊绊的实现了初步效果,能有一些锁头效果,但识别速度不是非常快,且没有做敌友区分,效果不是非常的理想,但在4399小游戏中爽一下还是可以的!。

思路

1.先通过yolov5实现对电脑屏幕的实时检测,只获取中心部分画面,减少其他人物的识别,提高识别速度
2.筛选只留下【person】的人物框
3.获取第一个框的坐标点,并计算出框的中上坐标点,以此粗略的当作人物的头部
4.操作鼠标定位的中心点
5.模拟鼠标左键点击,完成射击

代码

1.先下载github上yolov5的项目

git clone https://github.com/ultralytics/yolov5.git

2.在项目中添加test.py

import time

import cv2
import mediapipe as mp
import  pyautogui
import  pydirectinput
import numpy as np
import tkinter as tk
import torch
import warnings

warnings.filterwarnings("ignore", category=FutureWarning, module="torch.cuda.amp.autocast")

root = tk.Tk()
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
root.destroy()

# 获取屏幕的尺寸
crop_width = 500
crop_height = 500
start_x = (screen_width - crop_width) // 2
start_y = (screen_height - crop_height) // 2




# 加载预训练模型
model = torch.hub.load('./', 'custom', path='yolov5s.pt', source='local')



def readScreen():
    # 初始化MediaPipe姿态检测对象
    mp_pose = mp.solutions.pose
    pose = mp_pose.Pose(static_image_mode=False, min_detection_confidence=0.5, min_tracking_confidence=0.5)



    while True:
        # 使用pyautogui进行屏幕截图,指定截图区域为屏幕左半边
        #screenshot = pyautogui.screenshot(region=(start_x, start_y, 500, 500))
        screenshot = pyautogui.screenshot(region=(start_x, start_y, crop_width, crop_height))
        # 将截图转换为OpenCV格式(BGR格式),因为mediapipe处理的图像通常为RGB格式,后续会进行转换
        frame = cv2.cvtColor(np.array(screenshot), cv2.COLOR_RGB2BGR)

        # 获取期望的缩小后显示窗口的宽度和高度(这里设置为原屏幕宽高的一定比例,可根据需求调整)
        display_width = int(screen_width * 0.4)  # 示例,可修改比例
        display_height = int(screen_height * 0.4)  # 示例,可修改比例

        # 计算缩放比例,保持图像宽高比进行缩放
        scale_width = display_width / frame.shape[1]
        scale_height = display_height / frame.shape[0]
        scale = min(scale_width, scale_height)

        # 缩放图像
        resized_frame = cv2.resize(frame, (int(frame.shape[1] * scale), int(frame.shape[0] * scale)))

        # 进行人体姿态检测
        # 定义锐化卷积核
        kernel = np.array([[-1, -1, -1],
                           [-1,  9, -1],
                           [-1, -1, -1]])
        # 假设frame是已经获取的游戏截图(BGR格式)
        sharpened_frame = cv2.filter2D(frame, -1, kernel)
        #results = pose.process(sharpened_frame)

        # 进行推理
        results = model(sharpened_frame)

        # 解析结果
        detections = results.xyxy[0].cpu().numpy()  # [x1, y1, x2, y2, confidence, class]

        # 在截图上绘制检测结果
        for detection in detections:
            x1, y1, x2, y2, confidence, cls = detection
            class_name = model.names[int(cls)]
            if class_name == 'person':
                # 根据之前计算的缩放比例scale,对坐标值进行缩放调整
                scaled_x1 = int(x1 * scale)
                scaled_y1 = int(y1 * scale)
                scaled_x2 = int(x2 * scale)
                scaled_y2 = int(y2 * scale)




                # 计算矩形框中心点坐标(在缩放后的图像坐标体系下)
                center_x = (scaled_x1 + scaled_x2) // 2
                center_y = (scaled_y1 + scaled_y2) // 2

                offset_y = (scaled_y2 - scaled_y1) / 4

                # 将缩放后的坐标转换回原始屏幕坐标体系(考虑截图区域的偏移)
                screen_center_x = start_x + (center_x / scale)
                screen_center_y = start_y + (center_y / scale) - offset_y



                # 使用pyautogui将鼠标移动到计算出的屏幕坐标位置
                try:
                    #pydirectinput.click(button='left', x=int(screen_center_x), y=int(screen_center_y))
                    pydirectinput.moveTo(int(screen_center_x), int(screen_center_y+10))
                    click_left_button()

                except pyautogui.FailSafeException:
                    print("鼠标移动超出安全范围,可能无法正确定位。")
                except Exception as e:
                    print(f"鼠标移动出现其他错误: {e}")



                #cv2.rectangle(resized_frame, (scaled_x1, scaled_y1), (scaled_x2, scaled_y2), (0, 255, 0), 2)
                #cv2.putText(resized_frame, f"{class_name}: {confidence:.2f}", (scaled_x1, scaled_y1 - 10),
                #cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

                break

        #show(resized_frame)
        # 显示视频帧
        #cv2.imshow('Frame', frame)
        # 将处理后的帧写入输出视频文件
        if cv2.waitKey(1) & 0xFF == 27:  # 按ESC键退出
            break

    cv2.destroyAllWindows()
    pose.close()

def click_left_button():
    # 执行点击鼠标左键的操作
    print("点击鼠标")
    pydirectinput.mouseDown()
    time.sleep(0.05)
    pydirectinput.mouseUp()

def show(frame):
    # 创建一个窗口,并设置为可调整大小和始终在最前端
    cv2.namedWindow('Pose Recognition Result', cv2.WINDOW_NORMAL | cv2.WINDOW_FREERATIO | cv2.WINDOW_GUI_EXPANDED | cv2.WINDOW_AUTOSIZE)
    cv2.setWindowProperty('Pose Recognition Result', cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)
    cv2.setWindowProperty('Pose Recognition Result', cv2.WND_PROP_TOPMOST, 1)
    cv2.imshow('Pose Recognition Result', frame)

if __name__ == '__main__':
    readScreen()

效果图

在这里插入图片描述
在这里插入图片描述

后记

测试是使用的 4399 小游戏中的【火线精英】这个游戏,需要在360打开,还需要安装flush插件,然后打的基本也是人机,在满足这些前提下,可以爽一下,哈哈哈

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/946050.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java jni调用nnom rnn-denoise 降噪

介绍&#xff1a;https://github.com/majianjia/nnom/blob/master/examples/rnn-denoise/README_CN.md 默认提供了一个wav的例子 #include <stdint.h> #include <stdlib.h> #include <stdio.h> #include <math.h> #include <string.h>#include …

Windows系统 系统盘瘦身策略之文件迁移

1 Android Studio 1.1 .android 该文件夹路径一般在 C:\Users\<user_name>\.android 迁移步骤&#xff1a; ①关闭 Android Studio ②打开环境变量设置&#xff0c;添加以下环境变量 变量名&#xff1a;ANDROID_SDK_HOME 变量值&#xff1a;你自己的路径【不用单独创建.…

SQLiteDataBase数据库

XML界面设计 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"xmlns:tools"http://schemas.android.com/tools"android:layout_width"match_paren…

Midjourney技术浅析(七):图像风格化

Midjourney 通过风格迁移&#xff08;Style Transfer&#xff09;和图像滤镜&#xff08;Image Filters&#xff09;技术&#xff0c;使用户能够将生成的图像转换为不同的艺术风格或视觉效果。 一、风格迁移&#xff08;Style Transfer&#xff09; 1.1 风格迁移的定义 风格…

Edge安装问题,安装后出现:Could not find Edge installation

解决&#xff1a;需要再安装&#xff08;MicrosoftEdgeWebView2RuntimeInstallerX64&#xff09;。 网址&#xff1a;https://developer.microsoft.com/zh-cn/microsoft-edge/webview2/?formMA13LH#download 如果已经安装了edge&#xff0c;那就再下载中间这个独立程序安装就…

【JAVA高级篇教学】第六篇:Springboot实现WebSocket

在 Spring Boot 中对接 WebSocket 是一个常见的场景&#xff0c;通常用于实现实时通信。以下是一个完整的 WebSocket 集成步骤&#xff0c;包括服务端和客户端的实现。本期做个简单的测试用例。 目录 一、WebSocket 简介 1. 什么是 WebSocket&#xff1f; 2. WebSocket 的特…

Painter-Mortadela靶场

信息收集 枚举端口 nmap 192.168.109.132 -sS -sV -min-rate 5000 -Pn -p- -p- &#xff1a;扫描所有端口。 (65535)-sS&#xff1a;执行TCP SYN 扫描以快速扫描哪些端口打开。-sC&#xff1a;使用基本识别脚本执行扫描-sV&#xff1a;执行服务扫描–min-rate 5000&#xff1…

攻防世界pwn刷题

get_shell 这题直接给shell了 exp from pwn import* p remote(61.147.171.105,59682) p.sendline(cat flag) p.interactive() cyberpeace{8cd678c722f48327a69b2661ae8956c8} hello_pwn checksec一下 ok&#xff0c;64位的 {alarm(0x3Cu);setbuf(stdout, 0LL);puts("…

1、pycharm、python下载与安装

1、去官网下载pycharm 官网&#xff1a;https://www.jetbrains.com/pycharm/download/?sectionwindows 2、在等待期间&#xff0c;去下载python 进入官网地址&#xff1a;https://www.python.org/downloads/windows/ 3、安装pycharm 桌面会出现快捷方式 4、安装python…

epoll的ET和LT模式

LevelTriggered&#xff1a;简称LT&#xff0c;当FD有数据可读时&#xff0c;会重复通知多次&#xff0c;直至数据处理完成。是epoll的默认模式EdgeTriggered&#xff1a;简称ET&#xff0c;当FD有数据可读时&#xff0c;只通知一次&#xff0c;不管数据是否处理完成 Level是指…

CSS利用浮动实现文字环绕右下角,展开/收起效果

期望实现 文字最多展示 N 行&#xff0c;超出部分截断&#xff0c;并在右下角显示 “…” “更多”&#xff1b; 点击更多&#xff0c;文字展开全部内容&#xff0c;右下角显示“收起”。效果如下&#xff1a; 思路 尽量使用CSS控制样式&#xff0c;减少JS代码复杂度。 利…

单元测试入门和mockup

Java 新手入门&#xff1a;Java单元测试利器&#xff0c;Mock详解_java mock-CSDN博客 这个是典型的before when assert三段式&#xff0c;学一下单测思路 这个没有动态代理&#xff0c;所以是直接class(对比下面) Jmockit使用笔记_增加代码覆盖率_覆盖try catch_使用new Mock…

开发小工具:ping地址

开发小工具&#xff1a;ping地址 import socketdef tcp_port_scan(ip,port):#创建套接字socksocket.socket(socket.AF_INET,socket.SOCK_STREAM)#设置超时sock.settimeout(0.2)try:#发请求result sock.connect_ex((ip,port))if result 0:print(f{ip}--{port}接口连接成功)res…

双汇火腿肠,请勿随意喂猫

在许多家庭中&#xff0c;猫咪作为可爱的宠物成员&#xff0c;备受宠爱。当我们享受着双汇火腿肠的便捷与美味时&#xff0c;或许会有人想到与猫咪分享&#xff0c;但这种看似温馨的举动实则隐藏着诸多问题&#xff0c;双汇火腿肠并不适合喂猫。 从营养成分来看&#xff0c;双…

Unity Excel转Json编辑器工具

功能说明&#xff1a;根据 .xlsx 文件生成对应的 JSON 文件&#xff0c;并自动创建脚本 注意事项 Excel 读取依赖 本功能依赖 EPPlus 库&#xff0c;只能读取 .xlsx 文件。请确保将该脚本放置在 Assets 目录下的 Editor 文件夹中。同时&#xff0c;在 Editor 下再创建一个 Exc…

深信服云桌面系统的终端安全准入设置

深信服的云桌面系统在默认状态下没有终端的安全准入设置&#xff0c;这也意味着同样的虚拟机&#xff0c;使用云桌面终端或者桌面套件都可以登录&#xff0c;但这也给系统带来了一些安全隐患&#xff0c;所以&#xff0c;一般情况下需要设置终端的安全准入策略&#xff0c;防止…

基于SpringBoot的实验室信息管理系统【源码+文档+部署讲解】

系统介绍 视频演示 基于SpringBootVue实现的实验室信息管理系统采用前后端分离的架构方式&#xff0c;系统分为管理员、老师、用户三种角色&#xff0c;实现了用户管理、设备管理、实验室查询、公告、课程、实验室耗材管理、我的等功能 技术选型 开发工具&#xff1a;idea2…

Windows 10 自带功能实现大屏、小屏无线扩展

一、添加可选功能 在作为无线投屏对象的「第二屏」设备上&#xff0c;打开 Windows 10 设置并定位至「应用 > 应用和功能」界面&#xff0c;然后点击右侧界面中的「可选功能」选项。 点击可选功能界面顶部的「添加功能」按钮&#xff0c;搜索「无线显示器」模块并选择添加。…

大电流和大电压采样电路

大电压采样电路&#xff1a; 需要串联多个电阻进行分压&#xff0c;从而一级一级降低电压&#xff0c;防止电阻损坏或者短路直接打穿MCU。 为什么需要加电压跟随器&#xff1a;进行阻抗的隔离&#xff0c;防止MCU的IO阻抗对分压产生影响&#xff1a; 大电流检测电路&#xff…

torch.nn.functional的用法

文章目录 介绍激活函数示例 损失函数示例 卷积操作示例 池化示例 归一化操作示例 Dropout示例 torch.nn.functional 与 torch.nn 的区别 介绍 torch.nn.functional 是 PyTorch 中的一个模块&#xff0c;提供了许多函数式的神经网络操作&#xff0c;包括激活函数、损失函数、卷…