使用YOLOv11制作打地鼠游戏辅助器完整指南

1. 环境准备

1.1 安装Python

  • 下载安装Python 3.9:Python官网
  • 验证安装:
    python --version
    

1.2 安装核心依赖

pip install torch torchvision torchaudio
pip install ultralytics
pip install labelimg
pip install numpy pyautogui opencv-python

1.3 下载预训练模型

下载YOLOv11n模型:

https://github.com/ultralytics/assets/releases/download/v8.3.0/yolo11n.pt

2. 数据集准备

2.1 目录结构

icon/
├── images/
│   ├── train/    # 训练图片
│   └── val/      # 验证图片
└── labels/
    ├── train/    # 训练标签
    └── val/      # 验证标签

2.2 数据标注

  1. 启动labelImg:
    labelimg
    
  2. 标注步骤:
    • 打开目录:icon/images/train
    • 设置输出目录:icon/labels/train
    • 选择YOLO格式
    • 标注地鼠出现区域为"mouse"

3. 模型训练

3.1 配置文件

icon.yaml内容:

path: icon
train: images/train
val: images/val
names:
  0: mouse

3.2 训练脚本

train.py

from ultralytics import YOLO

model = YOLO("yolo11n.pt")  # 加载预训练模型

if __name__ == '__main__':
    model.train(
        data='icon.yaml',
        workers=0, 
        epochs=300,
        batch=16,
    )

3.3 启动训练

python train.py

4. 游戏辅助实现

4.1 模型应用

训练完成后,最佳模型保存在:

runs/detect/train/weights/best.pt

4.2 辅助脚本

game_assistant.py

import cv2
import numpy as np
import pyautogui as pg
from ultralytics import YOLO

# 初始化
yolo = YOLO('runs/detect/train/weights/best.pt')
pg.PAUSE = 0.1  # 每次操作间隔0.1秒
pg.FAILSAFE = True  # 启用安全模式

while True:
    if cv2.waitKey(1) == ord('q'):  # 按Q退出
        break
    
    # 屏幕截图
    shot = pg.screenshot()
    shot_np = np.array(shot)
    shot_np = cv2.cvtColor(shot_np, cv2.COLOR_RGB2BGR)
    
    # 目标检测
    results = yolo.track(shot_np, persist=True)
    
    # 自动点击
    for box in results[0].boxes:
        x, y, w, h = box.xywh[0].tolist()
        pg.doubleClick(x, y)

cv2.destroyAllWindows()

5. 优化建议

5.1 性能优化

  1. 截图区域限制

    # 只截取游戏区域
    shot = pg.screenshot(region=(x, y, width, height))
    
  2. 检测间隔控制

    import time
    while True:
        start_time = time.time()
        # ...检测代码...
        elapsed = time.time() - start_time
        time.sleep(max(0, 0.1 - elapsed))  # 保持10FPS
    

5.2 功能增强

  1. 置信度过滤

    if box.conf > 0.7:  # 只处理置信度>70%的检测
        pg.doubleClick(x, y)
    
  2. 多目标处理

    # 优先点击最近出现的目标
    boxes = sorted(results[0].boxes, key=lambda b: -b.conf)
    

6. 注意事项

  1. 游戏兼容性

    • 确保游戏窗口保持在前台
    • 分辨率设置应与训练数据一致
  2. 防检测机制

    • 随机化点击间隔
    • 添加鼠标移动轨迹
  3. 伦理提醒

    • 本教程仅用于学习目的
    • 在多人游戏中使用自动化脚本可能违反服务条款

7. 常见问题解决

7.1 检测不准确

  • 增加训练数据量
  • 调整训练参数(如增大epochs)
  • 检查标注质量

7.2 运行速度慢

  • 降低检测分辨率:
    results = yolo.track(shot_np, imgsz=320)
    
  • 使用GPU加速:
    model.to('cuda')
    

7.3 颜色异常

确保正确处理颜色空间:

shot_np = cv2.cvtColor(np.array(pg.screenshot()), cv2.COLOR_RGB2BGR)
posted @ 2025-04-18 13:49  嘚惹  阅读(496)  评论(1)    收藏  举报