当前位置: 首页 > news >正文

【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 timeimport cv2
import mediapipe as mp
import  pyautogui
import  pydirectinput
import numpy as np
import tkinter as tk
import torch
import warningswarnings.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.posepose = 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 = detectionclass_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) // 2center_y = (scaled_y1 + scaled_y2) // 2offset_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键退出breakcv2.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插件,然后打的基本也是人机,在满足这些前提下,可以爽一下,哈哈哈

相关文章:

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

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

概率统计与随机过程--作业5

一、推导题 二、计算题 1、某单位为了研究太阳镜销售和广告费用之间的关系,搜集了以下数据,使用回归分析方法得到线性回归模型: 广告费用(万元)x 2 5 6 7 22 25 28 30 22 18 销售量(个&#xf…...

“802.11g”,“802.11n”,“802.11ac”,“802.11ax”

802.11g、802.11n、802.11ac、802.11ax都是IEEE制定的无线局域网(WLAN)标准,它们各自具有不同的特点和性能。以下是对这四个标准的详细介绍: 1. 802.11g 定义:802.11g是IEEE制定的一种无线局域网标准,它提…...

Kubernetes 常用的网络插件

上篇内容跟大家简单聊了k8s网络模型原理。分别围绕着容器、Pod、Service、网络策略等展开了详细的讲解。这次想跟大家聊聊k8s的CNI网络插件。 CNI 是 Kubernetes 网络模型的核心组件,它是一个插件接口,允许用户选择和配置网络插件来管理 Pod 的网络。CN…...

Retrofit和rxjava 实现窜行请求,并行请求,循环多次请求,递归请求,错误重试

在使用 Retrofit 和 RxJava 时,可以通过多种方式实现多次请求,比如串行请求、并行请求、依赖请求等。以下是一些常见的实现方式: 1. 串行请求(依赖关系) 一个请求的结果作为另一个请求的输入,可以用 flat…...

2025年度好用便签推荐,电脑桌面便签app分享

在快节奏的现代生活中,高效的时间管理和任务规划变得尤为重要。一款好用的便签软件不仅能帮助我们记录灵感、待办事项,还能极大地提升我们的工作效率。 在众多电脑桌面便签中,好用便签以其出色的桌面便签功能脱颖而出,备受用户青…...

【论文解读】Arbitrary-steps Image Super-resolution via Diffusion Inversion

级别:arXiv Computer Vision and Pattern Recognition(2024)作者:Zongsheng Yue,Kang Liao,Chen Change Loy时间:2024论文链接:Arbitrary-steps Image Super-resolution via Diffusion Inversion摘要 技术概述:该技术基于扩散反转,通过设计部分噪声预测策略来构建扩散…...

kkFileView集成springboot:使用自定义预览接口(非minio预览接口),发现无法预览资源

目录 1、背景2、原因分析3、解决办法 1、背景 按照项目验收要求,需要对minio中存储的数据进行加密 之前提供给kkFileView的预览地址都是获取的minio预览地址 由于minio中的资源进行了加密处理,所以我们自定义预览接口(进行解密操作&#xff…...

被裁20240927 --- 嵌入式硬件开发 STM32篇

人很容易原谅别人的错误但很难原谅别人的正确 1. 文档、手册、指南、资源2. MCU 结构3. MCU 和 MPU 的区别4. 一些概念什么是看门狗 ?什么是 DMA ?什么是晶振 ?什么是片内外设?软件协议、硬件协议、数据协议、通讯协议、通信协议u…...

留学生交流互动系统|Java|SSM|VUE| 前后端分离

【技术栈】 1⃣️:架构: B/S、MVC 2⃣️:系统环境:Windowsh/Mac 3⃣️:开发环境:IDEA、JDK1.8、Maven、Mysql5.7 4⃣️:技术栈:Java、Mysql、SSM、Mybatis-Plus、VUE、jquery,html 5⃣️数据库可…...

C/C++ 数据结构与算法【图】 图+邻接矩阵+邻接表+DFS+BFS+最小生成树+最短路径+拓扑排序详细解析【日常学习,考研必备】带图+详细代码

一、图的定义 1)无向图,有向图,完全图 2)稀疏图,稠密图,网,邻接,关联 3)度 4)路径 5)连通图 6)权与网 7)子图 8&#xff0…...

Linux实验报告7-文件管理

目录 一:实验目的 二:实验内容 (1)查看/etc/inittab文件的权限属性,并指出该文件的所有者以及文件所属组群。 (2)新建文件test,设置文件权限为r--r-----。 (3)新建文件test2,设系统中有用户study和用户组studygr…...

RJ45网口模块设计

1、以太网概述及RJ45实物 2、常用网口信号介绍 3、RJ45网口布局布线要点分析 4、总结 1、变压器下面需要进行挖空处理,以免底下的铜引入干扰,(将多边形挖空区域的所在层设置为Multi-Layer多层) 2、为了更直观的看一个类中线的长…...

电子电器架构 --- 智能座舱HUD技术革新

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 所谓鸡汤,要么蛊惑你认命,要么怂恿你拼命,但都是回避问题的根源&…...

嵌入式开发中的机器人表情绘制

机器人的表情有两种,一种是贴图,一钟是调用图形API自绘。 贴图效果相对比较好,在存储空间大的情况下是可以采用的。 自绘比较麻烦,但在资源和空缺少的情况下,也是很有用的。而且自绘很容易通过调整参数加入随机效果&…...

orm01

静态文件处理 静态文件:如:图片、音频、视频、css、js等静态文件的相关配置也在 项目名/项目名/settings.py 文件中进行配置 - 配置静态文件的访问路径STATIC_URL- 功能:通过哪个 url 地址找静态文件- 默认配置:STATIC_URL /sta…...

Maven 测试和单元测试介绍

一、测试介绍 二、单元测试 1&#xff09;介绍 2&#xff09;快速入门 添加依赖 <dependencies><!-- junit依赖 --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter</artifactId><version>5.9…...

Postman接口测试03|执行接口测试、全局变量和环境变量、接口关联、动态参数、断言

目录 七、Postman 1、安装 2、postman的界面介绍 八、Postman执行接口测试 1、请求页签 3、响应页签 九、Postman的环境变量和全局变量 1、创建环境变量和全局变量可以解决的问题 2、postman中的操作-全局变量 1️⃣手动设置 2️⃣代码设置 3️⃣界面获取 4️⃣代…...

UE5 丧尸类杂兵的简单AI

A、思路 1、关卡初始化时&#xff0c;自动产生随机巡逻点&#xff0c;小兵到达后&#xff0c;去另一个随机巡逻点。 2、加入视力&#xff0c;发现主角后&#xff0c;不再巡逻&#xff0c;而开始追击主角并攻击。条件循环。 3、加入听力。主角的奔跑与射击会产生噪音&#xf…...

Linux字符设备驱动开发的三种方式(分析+对比+示例)

文章目录 一. 字符设备的驱动方法二. 三种方法的对比三. 开发环境四. 代码示例1. 传统设备驱动模型2. 总线设备驱动模型3. 设备树驱动模型 五. 相关链接 一. 字符设备的驱动方法 字符设备驱动 是指在I/O传输过程中以字节流进行读写操作的设备。典型的如LCD、蜂鸣器、SPI、触摸屏…...

AOP_青春版_VS_Pro版

背景&#xff1a;在javaweb和ssm中学习了面向切面编程的两种方式&#xff08;两种切点表达式不同&#xff09;&#xff0c;在苍穹外卖中&#xff0c;对于设置更新时间&#xff0c;创建时间&#xff0c;更新人&#xff0c;创建者为避免重复编码&#xff0c;将Update&Insert中…...

OpenClaw浏览器自动化实战:百川2-13B驱动的智能信息检索系统

OpenClaw浏览器自动化实战&#xff1a;百川2-13B驱动的智能信息检索系统 1. 为什么需要自动化信息检索 作为一名技术研究者&#xff0c;我每天需要跟踪大量行业动态和论文进展。传统的手动搜索-阅读-摘录流程效率极低&#xff0c;经常出现以下痛点&#xff1a; 重复劳动&…...

告别数据丢失!GD32串口DMA双缓冲+内存对齐配置避坑指南

GD32串口DMA双缓冲与内存对齐实战&#xff1a;工业级数据零丢失方案 在工业自动化、高速数据采集等场景中&#xff0c;串口通信的稳定性和效率直接关系到整个系统的可靠性。当波特率提升到921600甚至更高时&#xff0c;传统的轮询或中断方式往往难以应对持续的数据流&#xff0…...

基于cartographer算法的自主导航系统仿真设计 移动机器人系统具备定位、建图及路径规划功能

基于cartographer算法的自主导航系统仿真设计 移动机器人系统具备定位、建图及路径规划功能&#xff0c;在迷宫式的环境中建模导航。 模型以及移动机器人模型&#xff0c;移动机器人模型包含2D激光雷达传感器、轮式里程计以及惯性导航原件 基于cartographer算法建图&#xff0c…...

AI助力:让快马平台智能生成排列组合列举与计算一体化工具

最近在做一个数据分析项目时&#xff0c;遇到了需要批量计算排列组合的需求。传统的手动计算不仅效率低&#xff0c;还容易出错。于是我开始寻找更智能的解决方案&#xff0c;发现InsCode(快马)平台的AI辅助开发功能正好能帮我快速实现这个工具。 需求分析 排列组合在概率统计、…...

嵌入式系统开发中的关键技术术语解析

嵌入式系统开发中的56个关键技术术语解析1. 数据转换基础概念1.1 采样与保持特性采集时间(Tacq)是从释放保持状态到采样电容电压稳定至新输入值的1 LSB范围之内所需的时间。在采样-保持电路中&#xff0c;这个参数直接影响系统的动态性能。孔径延迟(tAD)描述从时钟信号的采样沿…...

Cursor Pro功能解锁指南:突破限制的完整技术方案

Cursor Pro功能解锁指南&#xff1a;突破限制的完整技术方案 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: Youve reached your trial re…...

鸿蒙SpeechKit离线语音识别避坑指南:从PCM格式到权限配置,一次搞定

鸿蒙SpeechKit离线语音识别实战避坑指南 1. 音频格式的致命陷阱 PCM格式是鸿蒙SpeechKit离线语音识别的唯一选择&#xff0c;但开发者常犯的错误远不止文件类型这么简单。我曾见过一个团队花费三天时间排查识别率低的问题&#xff0c;最终发现是采样深度设置错误——这个细节在…...

从零封装一个 Vue 低代码表单组件:我是如何借鉴 FcDesigner 的设计思路的

从零封装一个 Vue 低代码表单组件&#xff1a;我是如何借鉴 FcDesigner 的设计思路的 低代码开发正在改变前端工程师的工作方式。作为一名长期深耕表单领域的前端开发者&#xff0c;我曾参与过多个企业级低代码平台的搭建&#xff0c;也经历过从零开始封装表单组件的完整周期。…...

OpenClaw浏览器自动化:ollama-QwQ-32B驱动的研究资料收集系统

OpenClaw浏览器自动化&#xff1a;ollama-QwQ-32B驱动的研究资料收集系统 1. 为什么需要自动化研究资料收集 作为一名经常需要查阅大量文献的技术写作者&#xff0c;我长期被资料收集的效率问题困扰。传统工作流程中&#xff0c;我需要手动在Google Scholar、arXiv、知乎等平…...