yolov5进行FPS游戏的自瞄

  • 前言
    • 类似效果
    • main.py代码
    • 使用方法
    • 注意
    • 完整链接↓

前言

YOLOV5是一个基于视觉识别的开源项目,本人制作的目的是研究YOLO的应用,并非制作游戏外挂。

类似效果

没时间进行游戏实测画面,暂时放一个其他人的效果吧
【APEX目标识别 2000张图的训练结果-哔哩哔哩】

main.py代码

import argparse
import os
import timeimport cv2
import numpy as np
import pynput
import torch
import win32con
import win32gui
from simple_pid import PIDfrom aim_csgo.apex_aim import lock
from aim_csgo.cs_model import load_model
from aim_csgo.screen_inf import (get_parameters, grab_screen_mss,grab_screen_win32)
from aim_csgo.verify_args import verify_args
from utils.augmentations import letterbox
from utils.general import non_max_suppression, scale_coords, xyxy2xywhparser = argparse.ArgumentParser()
parser.add_argument('--model-path', type=str, default='weights/best.pt', help='模型位置 model address')
parser.add_argument('--imgsz', type=int, default=640, help='和训练模型时imgsz一样')
parser.add_argument('--conf-thres', type=float, default=0.1, help='置信度阈值')
parser.add_argument('--iou-thres', type=float, default=0.45, help='交並比閥值')
parser.add_argument('--use-cuda', type=bool, default=False, help='是否使用cuda')
parser.add_argument('--show-window', type=bool, default=True, help='是否显示检测窗口(debug用,若是True,不要去點右上角的X)')
parser.add_argument('--top-most', type=bool, default=True, help='是否保持检测窗口在最上层')
parser.add_argument('--resize-window', type=float, default=1/2, help='缩放窗口大小')
parser.add_argument('--thickness', type=int, default=2, help='边框线条粗细,需大于1/resize-window')
parser.add_argument('--show-fps', type=bool, default=False, help='是否显示fps')
parser.add_argument('--show-label', type=bool, default=True, help='是否显示标签')
parser.add_argument('--use_mss', type=str, default=True, help='是否使用mss截屏;为False時使用win32截屏;笔记本用True')
parser.add_argument('--region', type=tuple, default=(0.4, 0.4), help='检测范围;分别为x轴和y轴,(1.0, 1.0)表示全屏检测,越低检测值范围越小(以屏幕中心为检测中心)')
parser.add_argument('--hold-lock', type=bool, default=False, help='lock模式;True为按住,False为切換')
parser.add_argument('--lock-sen', type=float, default= 3.0, help='lock幅度系數,遊戲中灵敏度(建议不要调整)')
parser.add_argument('--lock-smooth', type=float, default=1.9, help='lock平滑系数;越大越平滑')
parser.add_argument('--lock-button', type=str, default='right', help='lock按键;只支持鼠标按键,调整自瞄键[left, middle, right, x1, x2]')
parser.add_argument('--head-first', type=bool, default=True, help='是否优先检测头部')
parser.add_argument('--lock-tag', type=list, default=[0], help='对应标签;person(倘若模型不同,请自行修改对应标签)')
parser.add_argument('--lock-choice', type=list, default=[0], help='目标选择;决定锁定的目标,从自己标签选择')
args = parser.parse_args()
'------------------------------------------------------------------------------------'
verify_args(args)
cur_dir = os.path.dirname(os.path.abspath(__file__)) + '\\'
args.model_path = cur_dir + args.model_path
args.lock_tag = [str(i) for i in args.lock_tag]
args.lock_choice = [str(i) for i in args.lock_choice]
device = 'cuda' if args.use_cuda else 'cpu'
half = device != 'cpu'
imgsz = args.imgsz
conf_thres = args.conf_thres
iou_thres = args.iou_thres
top_x, top_y, x, y = get_parameters()
len_x, len_y = int(x * args.region[0]), int(y * args.region[1])
top_x, top_y = int(top_x + x // 2 * (1. - args.region[0])), int(top_y + y // 2 * (1. - args.region[1]))
monitor = {'left': top_x, 'top': top_y, 'width': len_x, 'height': len_y}
model = load_model(args)
stride = int(model.stride.max())
names = model.module.names if hasattr(model, 'module') else model.names
lock_mode = False
team_mode = True
lock_button = eval('pynput.mouse.Button.' + args.lock_button)
mouse = pynput.mouse.Controller()#pid系数可自行调整(一般960显卡参数:kp = 0.5,ki = 0.17,kd = 0.03)
pidx = PID(0.5, 0.17, 0.03, setpoint=0, sample_time=0.001,)
pidy = PID(1.22, 0.12, 0.0, setpoint=0, sample_time=0.001,)
pidx.output_limits = (-4000 ,4000)
pidy.output_limits = (-3000 ,3000)if args.show_window:cv2.namedWindow('aim', cv2.WINDOW_NORMAL)cv2.resizeWindow('aim', int(len_x * args.resize_window), int(len_y * args.resize_window))
def on_click(x, y, button, pressed):global lock_modeif button == lock_button:if args.hold_lock:if pressed:lock_mode = Trueprint('locking...')else:lock_mode = Falseprint('lock mode off')else:if pressed:lock_mode = not lock_modeprint('lock mode', 'on' if lock_mode else 'off')listener = pynput.mouse.Listener(on_click=on_click)
listener.start()print('enjoy yourself!')
t0 = time.time()
cnt = 0while True:if cnt % 20 == 0:top_x, top_y, x, y = get_parameters()len_x, len_y = int(x * args.region[0]), int(y * args.region[1])top_x, top_y = int(top_x + x // 2 * (1. - args.region[0])), int(top_y + y // 2 * (1. - args.region[1]))monitor = {'left': top_x, 'top': top_y, 'width': len_x, 'height': len_y}cnt = 0if args.use_mss:img0 = grab_screen_mss(monitor)img0 = cv2.resize(img0, (len_x, len_y))else:img0 = grab_screen_win32(region=(top_x, top_y, top_x + len_x, top_y + len_y))img0 = cv2.resize(img0, (len_x, len_y))img = letterbox(img0, imgsz, stride=stride)[0]img = img.transpose((2, 0, 1))[::-1]img = np.ascontiguousarray(img)img = torch.from_numpy(img).to(device)img = img.half() if half else img.float()img /= 255.if len(img.shape) == 3:img = img[None]pred = model(img, augment=False, visualize=False)[0]pred = non_max_suppression(pred, conf_thres, iou_thres, agnostic=False)aims = []for i, det in enumerate(pred):gn = torch.tensor(img0.shape)[[1, 0, 1, 0]]if len(det):det[:, :4] = scale_coords(img.shape[2:], det[:, :4], img0.shape).round()for *xyxy, conf, cls in reversed(det):# bbox:(tag, x_center, y_center, x_width, y_width)xywh = (xyxy2xywh(torch.tensor(xyxy).view(1, 4)) / gn).view(-1).tolist()  # normalized xywhline = (cls, *xywh)  # label formataim = ('%g ' * len(line)).rstrip() % lineaim = aim.split(' ')aims.append(aim)if len(aims):if lock_mode:lock(aims, mouse, top_x, top_y, len_x, len_y, args, pidx, pidy)if args.show_window:for i, det in enumerate(aims):tag, x_center, y_center, width, height = detx_center, width = len_x * float(x_center), len_x * float(width)#print("width:" , width)#print("x_center:", x_center)y_center, height = len_y * float(y_center), len_y * float(height)top_left = (int(x_center - width / 2.), int(y_center - height / 2.))#print("top_left:", top_left)bottom_right = (int(x_center + width / 2.), int(y_center + height / 2.))#print("bottom_right:", bottom_right)cv2.rectangle(img0, top_left, bottom_right, (0, 255, 0), thickness=args.thickness)if args.show_label:cv2.putText(img0, tag, top_left, cv2.FONT_HERSHEY_SIMPLEX, 0.7, (235, 0, 0), 4)if args.show_window:if args.show_fps:cv2.putText(img0,"FPS:{:.1f}".format(1. / (time.time() - t0)), (10, 50), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 235), 4)# cv2.putText(img0, "lock:{:.1f}".format(lock_mode), (10, 100), cv2.FONT_HERSHEY_SIMPLEX, 2,(0, 0, 235), 4)# cv2.putText(img0, "team:{:.1f}".format(team_mode), (10, 150), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 235), 4)print(1. / (time.time() - t0))t0 = time.time()cv2.imshow('aim', img0)if args.top_most:hwnd = win32gui.FindWindow(None, 'aim')CVRECT = cv2.getWindowImageRect('aim')win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0, win32con.SWP_NOMOVE | win32con.SWP_NOSIZE)cv2.waitKey(1)pidx(0)pidy(0)cnt += 1

使用方法

1.下载安装罗技驱动,并不需要买一个罗技鼠标。
2.安装必要的python
3.运行即可

注意

修改这个代码可以选择是否开启和关闭功能

parser.add_argument('--lock-button', type=str, default='right', help='lock按键;只支持鼠标按键,调整自瞄键[left, middle, right, x1, x2]')

完整链接↓

知识付费按钮

关于yolov5进行FPS游戏的目标检测,实现自动瞄准。相关推荐

  1. 目标检测论文解读复现之五:改进YOLOv5的SAR图像舰船目标检测

    目标检测论文解读复现 文章目录 目标检测论文解读复现 前言 一.摘要 二.网络模型及核心创新点 三.应用数据集 四.实验效果(部分展示) 五.实验结论 六.投稿期刊介绍 前言 此前出了目标改进算法专栏 ...

  2. YOLOv5在android端实现目标检测+跟踪+越界识别并报警

    YOLOv5在android端实现目标检测+跟踪+越界识别并报警 想要获取源码和相关资料说明的可以关注我的微信公众号:雨中算法屋, 后台回复越界识别即可获取,有问题也可以关注公众号加我微信联系我,相互 ...

  3. 基于yolov5实现FPS游戏自瞄,理论上通杀所有射击游戏

    1.参考大佬细致教学:Python Apex YOLO V5 6.2 目标检测 全过程记录_mrathena的博客-CSDN博客 [Yolov5]使用Ai实现FPS游戏自动瞄准 yolov5fps自瞄 ...

  4. 使用YOLOv5实现多路摄像头实时目标检测

    文章目录 前言 一.YOLOV5的强大之处 二.YOLOV5部署多路摄像头的web应用 1.多路摄像头读取 2.模型封装 3.Flask后端处理 4.前端展示 总结 前言 YOLOV5模型从发布到现在 ...

  5. Yolov5 安装详细教程及目标检测和识别

    文章内容: 1.在 Anaconda 环境下,进行目标检测程序(Yolov5)的下载及安装,实现 Yolov5 的整体安装: 2.通过调用手机摄像头进行简单的目标检测和识别. 目录 1 任务目标 2 ...

  6. 利用 Yolo V3 算法对游戏进行目标检测(DNF 为例)

    本 Chat 分享了 Python 及深度学习过程中的一个实战案例,详细讲述了利用目标检测算法识别游戏关键信息的实现过程. 本 Chat 不重复算法原理讲解,主要讲述编程思路,具体包括: 基于 Lab ...

  7. 使用YOLOv5实现单摄像头实时目标检测

    我将在上一节的基础上,一步一步展示如何实现单摄像头实时目标检测,其中包括我在配置过程中遇到的报错和解决方法. 实现单摄像头实时目标检测 将'--source'的默认值改为0 parser.add_ar ...

  8. 使用YOLOv5实现多摄像头实时目标检测

    这篇博客将在单摄像头目标检测的基础上,实现单网络多线程的实时目标检测. 实现方法 在detect.py同级目录下新建streams.txt文件,每个视频流源单独成行: 本地摄像头填0 USB摄像头填1 ...

  9. 《深度学习与目标检测 YOLOv5》

    <深度学习与目标检测 YOLOv5> flyfish 基础 深度学习基础 - 向量 深度学习基础 - 累加符号和连乘符号 深度学习基础 - 最大似然估计 深度学习基础 - 朴素贝叶斯 深度 ...

最新文章

  1. 大型网站技术架构 读书笔记
  2. NumPy 数组对象
  3. 千字谏言!Python入门:这两点绝对不能偷懒!否则工作后必后悔
  4. django组件-cookie与session
  5. django通用视图(类方法)
  6. 精装友好联络算法实现借壳和RI
  7. 文件转换base64流
  8. vs2015 安装破解版Visual Assist X
  9. MyBatis核心流程三大阶段之数据读写阶段
  10. cat tee ||
  11. 形而上者谓之道,形而下者谓之器(java 多态、泛型)
  12. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part4):结合问题分类的问题解析与检索语句生成
  13. 2018南京大学夏令营机试第一题
  14. overthewire靶场之——bandit(1-10)
  15. 服装搭配软件测试自学,五大穿搭App评测推荐,轻松解决你的日常穿搭烦恼!
  16. 方正科技携手华育国际 助力职业教育发展
  17. 杭电OJ 1159(C++)
  18. ctfshow(vip限免题)
  19. shell: sh 和ksh的不同
  20. 使用 Rosetta 建立 Ubuntu x86 开发环境

热门文章

  1. python分布采样_基于分布的python随机抽样
  2. 计算机的数学要求(?转)
  3. oracle时间24小时格式转换,在oracle数据库中查询时间并转为24小时制--------------String转Date类型或者Date转String类型...
  4. 给大家推荐一个用电脑拨打普通电话的软件skype
  5. Java与本息总额计算
  6. 电信光纤猫 f412超级密码
  7. RH850进不去烧写
  8. 关于tp框架提示的控制器不存在的问题
  9. 车牌识别系统服务器安装,车牌识别系统安装流程及注意事项
  10. 树(二)——二叉树遍历