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

基于yolov8的游戏人物自动锁定功能

1️⃣加载模型
2️⃣获取屏幕内容
3️⃣获取人物坐标
4️⃣鼠标移动到指定位置

import math
import random
import time
import mss
from PIL import Image
import pyautogui
import torch
from pynput.mouse import Controller
from ultralytics import YOLO
#import win32api, win32con# 加载本地模型
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model = YOLO('yolov8.pt').to(device)
print("Model loaded.")# 定义屏幕宽高
screen_width, screen_height = pyautogui.size()
game_width = screen_width
game_height = screen_heightrect = (0, 0, game_width, game_height)
m = mss.mss()
mouse_controller = Controller()  # 初始化鼠标控制器
#Windows
# def move(dx, dy):
#     # 鼠标相对当前位置移动
#     win32api.mouse_event(win32con.MOUSEEVENTF_MOVE | win32con.MOUSEEVENTF_ABSOLUTE,
#                          int(dx * 65536 / game_width), int(dy * 65536 / game_height), 0, 0)
#mac
def move(dx, dy):# 鼠标相对当前位置移动pyautogui.moveRel(dx, dy)def window_capture():# 使用mss库进行截图with mss.mss() as sct:sct_img = sct.grab(rect)img = Image.frombytes('RGB', sct_img.size, sct_img.bgra, 'raw', 'BGRX')return img# 主循环
while True:start_time = time.time()try:# 截取屏幕screen_shot = window_capture()# 使用模型进行推理results = model(screen_shot)# 提取检测结果boxes = results[0].boxes.cpu().numpy()# 存储有效检测结果detections = []for box in boxes:class_id = int(box.cls)confidence = float(box.conf)if class_id == 0 and confidence > 0.5:xmin, ymin, xmax, ymax = box.xyxy[0]center_x = int((xmin + xmax) / 2)#center_y = int((ymin + ymax) / 2)center_y = int(ymax-(ymax - ymin) * 0.82)detections.append((center_x, center_y))print(detections)if detections:# 获取鼠标当前位置mouse_x, mouse_y = mouse_controller.position# 计算每个检测结果与鼠标位置的距离,并找到最近的目标distances = [math.sqrt((mouse_x - x) ** 2 + (mouse_y - y) ** 2) for x, y in detections]closest_index = distances.index(min(distances))closest_target = detections[closest_index]# 控制鼠标移动到最近目标处delta_x = closest_target[0] - mouse_xdelta_y = closest_target[1] - mouse_ymove(delta_x, delta_y)except Exception as e:print(f"An error occurred: {e}")elapsed_time = time.time() - start_timeprint(f"Elapsed time: {elapsed_time:.2f} seconds")

相关文章:

  • 排序--堆排序【图文详解】
  • Vert.x 和 Spring Boot 是两种流行的 Java 框架的比较
  • Java AI 编程助手
  • 探索图像生成大模型Imagen:原理、比较与应用
  • Nginx的核心架构和设计原理
  • 大语言模型技术点总结
  • 二、词法分析,《编译原理》(本科教学版),第2版
  • 【C#】内存的使用和释放
  • AWS 管理控制台
  • 打造高质量软件架构 - 9大质量属性
  • [Linux]磁盘分区指令
  • 网络安全全方略
  • Python 爬虫 根据ID获得UP视频信息
  • Linux驱动开发(速记版)--并发与竞争
  • 【HDP】zookeeper未授权漏洞修复
  • 时间复杂度分析经典问题——最大子序列和
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 10个确保微服务与容器安全的最佳实践
  • canvas 五子棋游戏
  • css属性的继承、初识值、计算值、当前值、应用值
  • Leetcode 27 Remove Element
  • Nacos系列:Nacos的Java SDK使用
  • oldjun 检测网站的经验
  • Python - 闭包Closure
  • spring security oauth2 password授权模式
  • Vue--数据传输
  • webgl (原生)基础入门指南【一】
  • 初探 Vue 生命周期和钩子函数
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 将回调地狱按在地上摩擦的Promise
  • 前端学习笔记之观察者模式
  • 数据结构java版之冒泡排序及优化
  • raise 与 raise ... from 的区别
  • 如何在招聘中考核.NET架构师
  • ​html.parser --- 简单的 HTML 和 XHTML 解析器​
  • # Swust 12th acm 邀请赛# [ A ] A+B problem [题解]
  • #define,static,const,三种常量的区别
  • (35)远程识别(又称无人机识别)(二)
  • (7) cmake 编译C++程序(二)
  • (二刷)代码随想录第16天|104.二叉树的最大深度 559.n叉树的最大深度● 111.二叉树的最小深度● 222.完全二叉树的节点个数
  • (分布式缓存)Redis分片集群
  • (分享)自己整理的一些简单awk实用语句
  • (回溯) LeetCode 77. 组合
  • (机器学习的矩阵)(向量、矩阵与多元线性回归)
  • (介绍与使用)物联网NodeMCUESP8266(ESP-12F)连接新版onenet mqtt协议实现上传数据(温湿度)和下发指令(控制LED灯)
  • (全注解开发)学习Spring-MVC的第三天
  • (十七)Flink 容错机制
  • (四)activit5.23.0修复跟踪高亮显示BUG
  • (转)Linux NTP配置详解 (Network Time Protocol)
  • (转)Sql Server 保留几位小数的两种做法
  • (转)甲方乙方——赵民谈找工作
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • .net core docker部署教程和细节问题
  • .net 写了一个支持重试、熔断和超时策略的 HttpClient 实例池
  • .NETCORE 开发登录接口MFA谷歌多因子身份验证