opencv+yolov5定位Apex游戏人物

搞了大半天

搜索了很久都没人写怎么搞,都是发布一个游戏中运行的视频,然后卖你源码,真的是累了。
大概流程就是加载yolo模型,然后循环截图桌面图片,把图片放到模型里面运行,获取框框的坐标,然后移动鼠标定位。搞出来之后倒是感觉挺简单的。

所需要的文件

Yolov5是官方的所有代码,yolov5s.pt也是官方训练的权重,官方的能检测出来人,毕竟是用人的数据训练的,但Apex人物太动画了,识别效果不是很好。
我没自己去训练Apex数据集,感觉标注太麻烦,有兴趣可以自己试试,运行文件我放在最后面,会写一些注释。

运行视频

图片中无论鼠标在什么位置,都会自动跳到那个位置,也可以自己把鼠标的高度再调高一些,这个无所谓,但在游戏中人物的图片没有这么大。
我自己设置的是检测到一个人之后,每过1s再进入下次循环,因为1s用来杀人。而且每次只判断一个为人的框框,鼠标并不能分身。

detection代码

import torch
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import cv2
from PIL import ImageGrab
import time
import pyautogui


# 加载本地yolov5模型,路径自己调
model = torch.hub.load('D:\\1 python job\\Yolov5', 'custom',
                       path='D:\\1 python job\\yolo_detect_desktop\\yolov5s.pt', source='local', device='0')
# 不设置这个可能会报agg错误
matplotlib.use('TkAgg')

while True:
    # 截图桌面图片
    image_array = np.array(ImageGrab.grab())
    # 获取框框的坐标
    bboxes = np.array(model(image_array[:, :, ::-1]).xyxy[0].cpu())

    for bbox in bboxes:
        conf = bbox[4]
        classID = int(bbox[5])
        # 判断是否为0,如果为0则是人,进入循环把人干掉,然后退出循环,寻找下一位
        if classID == 0:
            x0, y0, x1, y1 = int(bbox[0]), int(bbox[1]), int(bbox[2]), int(bbox[3])
            # 移动鼠标
            pyautogui.moveTo(x0+(x1-x0)/2.0, y0+(y1-y0)/2.0)
            time.sleep(1)
            break

    if 0xFF == ord('7'):
        break

  • 0
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 10
    评论
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值