![](https://i-blog.csdnimg.cn/blog_migrate/754fc688be5a146c5b8b9c1dd41fd49c.jpeg)
搞了大半天
搜索了很久都没人写怎么搞,都是发布一个游戏中运行的视频,然后卖你源码,真的是累了。
大概流程就是加载yolo模型,然后循环截图桌面图片,把图片放到模型里面运行,获取框框的坐标,然后移动鼠标定位。搞出来之后倒是感觉挺简单的。
所需要的文件
Yolov5是官方的所有代码,yolov5s.pt也是官方训练的权重,官方的能检测出来人,毕竟是用人的数据训练的,但Apex人物太动画了,识别效果不是很好。
我没自己去训练Apex数据集,感觉标注太麻烦,有兴趣可以自己试试,运行文件我放在最后面,会写一些注释。
![](https://i-blog.csdnimg.cn/blog_migrate/e8af85f076195095c25ae93870071225.png)
运行视频
图片中无论鼠标在什么位置,都会自动跳到那个位置,也可以自己把鼠标的高度再调高一些,这个无所谓,但在游戏中人物的图片没有这么大。
我自己设置的是检测到一个人之后,每过1s再进入下次循环,因为1s用来杀人。而且每次只判断一个为人的框框,鼠标并不能分身。
![](https://i-blog.csdnimg.cn/blog_migrate/4cbe7835c02a114517a9c280ba1578cd.png)
detection代码
import torch
import matplotlib
import matplotlib.pyplot as plt
import numpy as np
import cv2
from PIL import ImageGrab
import time
import pyautogui
model = torch.hub.load('D:\\1 python job\\Yolov5', 'custom',
path='D:\\1 python job\\yolo_detect_desktop\\yolov5s.pt', source='local', device='0')
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])
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