YOLO11王者荣耀英雄状态检测

1.环境安装

硬件配置最好内存>=16GB,显卡NVIDIA 20系列及其以上显卡,显存>=8GB

建议新建虚环境:

conda create -n yolo11 python=3.10

进入虚环境,查询CUDA支持的最高版本:

conda activate yolo11
nvidia-smi
image-20250123134153316

进入Pytorch官网,下载Pytorch-GPU版本,建议2.0以上版本,CUDA不高于你显卡的版本的都行,我这里下载的是:

image-20250123134439477
conda install pytorch==2.2.1 torchvision==0.17.1 torchaudio==2.2.1 pytorch-cuda=12.1 -c pytorch -c nvidia

打开requirements.txt,将其中的如下三行删除,否则会再次安装一遍

torch==2.2.1+cu121
torchaudio==2.2.1+cu121
torchvision==0.17.1+cu121

保存关闭后,用cd命令将路径切换到requirements.txt下,

cd  requirements.txt文件所在的路径(替换为自己的实际路径)

安装其他依赖包

pip install -r requirements.txt --timeout 6000

已经自动安装了包含YOLO11的ultralytics包,后面可以直接用命令行训练。

2.王者荣耀英雄状态检测

2.1 数据集获取

这里可以从网上下载王者荣耀游戏视频,或者本地游戏时候保存的视频,然后用视频工具或者QQ截屏截取不同的游戏画面图片后,用labelme手动标注。我这里标注了886张图片,共计6个英雄状态类别:attacked_by_tower(被塔打), death(死亡),destroy_towers(打塔), kill_heroes(杀死英雄), kill_minions_monsters(杀怪), killed(被杀),其中划分数据集如下:训练集619张,验证集177张,测试集90张。

在项目路径下创建data目录,将训练集、验证集和测试集图片放在该路径下,编写data.yaml文件如下:

train: train/images
val: valid/images
test: test/images

nc: 6
names: ['attacked_by_tower', 'death', 'destroy_towers', 'kill_heroes', 'kill_minions_monsters', 'killed']

数据集分享:https://pan.baidu.com/s/1aHuOg69s0yC2o7bC3DEjHA?pwd=1314

2.2 编写训练代码

train.py

from ultralytics import YOLO

if __name__ == '__main__':
    # Load a pretrained YOLOv8 model
    model = YOLO('yolo11n.pt')

    # Train the model on a custom dataset
    model.train(data='data/data.yaml', epochs=400, imgsz=640, batch=64, workers=4)

image-20250123161842249

2.3 编写测试代码

单张图片检测

将run/train/weights下的best.pt复制到项目根路径方便使用。

inference.py

from ultralytics import YOLO

if __name__ == "__main__":
    model = YOLO("best.pt")

    # Perform inference on an image
    results = model(r"data\test\images\128_jpg.rf.7f830770b9c891c77dd21aad61fb68fc.jpg")

    results[0].show()
    pass
image-20250123162027190

2.4 游戏视频实时目标检测

import cv2
from ultralytics import YOLO

if __name__ == "__main__":
    model = YOLO("best.pt")

    # 打开视频源(可以是摄像头或视频文件)
    video_path = 'king.mp4'  # 使用摄像头,值设置为0
    cap = cv2.VideoCapture(video_path)

    # 获取视频的宽度、高度和帧率
    frame_width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
    frame_height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
    fps = int(cap.get(cv2.CAP_PROP_FPS))

    # 定义保存视频的路径和格式
    output_path = 'output_detected_video.mp4'  # 输出视频路径
    fourcc = cv2.VideoWriter_fourcc(*'mp4v')  # 视频编码格式
    out = cv2.VideoWriter(output_path, fourcc, fps, (frame_width, frame_height))

    while True:
        # 读取视频帧
        success, frame = cap.read()
        if not success:
            print("End of video or error occurred.")
            break

        # 使用模型进行检测
        results = model(frame, verbose=False)[0]  # 获取检测结果

        # 绘制检测框
        for box in results.boxes:
            x1, y1, x2, y2 = map(int, box.xyxy[0])  # 获取检测框坐标
            confidence = float(box.conf[0])  # 获取置信度
            class_id = int(box.cls[0])  # 获取类别ID
            class_name = model.names[class_id]  # 获取类别名称

            # 绘制检测框和标签
            cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)
            cv2.putText(frame, f'{class_name}: {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5,
                        (0, 255, 0), 2)

        # 写入处理后的帧到输出视频
        out.write(frame)

        # 显示结果
        cv2.imshow('Real-Time Detection', frame)

        # 按下 'q' 键退出
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # 释放资源
    cap.release()
    out.release()
    cv2.destroyAllWindows()

    print(f"Detection completed. Saved video to {output_path}")

output_detected_video

可以看出,由于标注质量问题,还是存在误报,尤其是查看其他英雄时候

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值