深度剖析ok-ww鸣潮自动化框架:基于图像识别的slient游戏操作引擎
深度剖析ok-ww鸣潮自动化框架:基于图像识别的slient游戏操作引擎
【免费下载链接】ok-wuthering-waves鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves
ok-ww是一个基于计算机视觉和Windows 接口 模拟技术的开源自动化框架,专为《鸣潮》游戏设计。该项目采用YOLOv8目标检测、OCR文本识别和状态机驱动的任务调度机制,实现了后台静默运行的游戏自动化操作。通过模块化的架构设计和多分辨率自适应算法,系统能够在不同硬件配置下保持稳定的识别精度和操作效率。
技术架构与核心设计理念
问题驱动:游戏自动化面临的技术挑战
在开发游戏自动化工具时,主要面临以下技术难题:
- 实时图像识别精度要求高:游戏UI元素动态变化,需要毫秒级响应时间
- 多分辨率适配复杂:不同玩家使用不同分辨率(从1600x900到4K),需要智能适配
- 状态管理复杂: 游戏场景切换频繁,需要精确的状态检测和恢复机制
- 操作模拟稳定性:输入模拟需要与游戏帧率同步,避免操作丢失或延迟
解决方案:分层架构与模块化设计
ok-ww采用四层架构设计,将复杂问题分解为可管理的模块:
┌─────────────────────────────────────────────┐ │ 任务调度层 (Task Scheduler) │ │ ┌─────────────┐ ┌─────────────┐ ┌───────┐ │ │ | 状态检测引擎 || ft 优先级队列 ||cent 调度器| │ │ └─────────────┘ └─────────────┘ └───────┘ │ ├─────────────────────────────────────────────┤ │ 图像处理层 (Vision Engine) │ │ ┌─────────────┐ ┌─────────────┐ ┌───────┐ │ │ | YOLOv8检测 || OCR文本识别 || 特征匹配| │ │ └─────────────┘ └─────────────┘ └───────┘ │ ├─────────────────────────────────────────────┤ │ 操作执行层 (Action Executor) │ │ ┌─────────────┐ ┌─────────────┐ ┌───────┐ │ │ | 键盘模拟器 || 鼠标控制器 || 窗口管理| │ │ └─────────────┘ └─────────────┘ └───────┘ │ ├─────────────────────────────────────────────┤ │ 硬件抽象层 (Hardware Abstraction) │ │ ┌─────────────┐ ┌─────────────┐ ┌───────┐ │ │ | 截图采集 || 输入注入 || 性能监控| │ │ └─────────────┘ └─────────────┘ └───────┘ │ └─────────────────────────────────────────────┘图:YOLOv8模型识别游戏界面元素,包括技能图标、角色状态和交互按钮
核心算法实现揭秘
实时图像识别优化机制
技术挑战:多分辨率下的目标检测精度
游戏UI在不同分辨率下会缩放,传统模板匹配方法难以适应所有分辨率。ok-ww采用letterbox预处理技术,在保持宽高比的同时进行智能填充:
def letterbox(self, img: np.ndarray, new_shape: Tuple[int, int] = (640, 640)): """保持宽高比的图像缩放与填充算法""" shape = img.shape[:2] # 原始尺寸 [高度, 宽度] r = min(new_shape[0] / shape[0], new_shape[1] / shape[1]) new_unpad = int(round(shape[1] * r)), int(round(shape[0] * r)) dw, dh = (new_shape[1] - new_unpad[0]) / 2, (new_shape[0] - new_unpad[1]) / 2 img = cv2.resize(img, new_unpad, interpolation=cv2.INTER_LINEAR) top, bottom = int(round(dh - 0.1)), int(round(dh + 0.1)) left, right = int(round(dw - 0.1)), int(round(dw + 0.1)) img = cv2.copyMakeBorder(img, top, bottom, left, right, cv2.BORDER_CONSTANT, value=(114, 114, 114)) return img, (top, left)解决思路:自适应阈值与相对坐标计算
系统通过动态计算UI元素的相对位置,而不是使用绝对坐标:
def get_direction(self, location_x, location_y, screen_width, screen_height, centered, current_direction): """基于相对坐标计算移动方向""" center_x = screen_width / 2 center_y = screen_height / 2 dx = location_x - center_x dy = location_y - center_y # 自适应阈值计算 threshold_x = screen_width * 0.07 threshold_y = screen_height * 0.05 if abs(dx) < threshold_x and abs(dy) < threshold_y: return current_direction # 保持在当前位置 # 方向决策逻辑 if abs(dx) > abs(dy): return 'a' if dx < 0 else 'd' else: return 'w' if dy < 0 else 's'状态机驱动的角色技能管理
技术挑战:动态战斗环境中的技能决策
不同角色类型(主DPS、副DPS、治疗)需要不同的技能释放策略。系统通过角色基类BaseChar实现统一的技能管理接口:
class BaseChar: """角色基类,定义了游戏角色的通用属性和行为""" def __init__(self, task, index, char_name=None, confidence=1, ring_index=-1, char_type=CharType.MAIN_DPS, buff_time=None): self.task = task self.char_name = char_name self.index = index self.char_type = char_type self.buff_time = buff_time or get_default_buff_time(char_type) def do_perform(self): """角色技能执行状态机""" if self.char_type == CharType.MAIN_DPS: return self.perform_dps_rotation() elif self.char_type == CharType.HEALER: return self.perform_healer_rotation() else: return self.perform_support_rotation()实现方案:技能优先级与冷却时间管理
每个角色类继承自BaseChar并实现特定的技能循环逻辑:
class CustomCharacter(BaseChar): def __init__(self, task, index, char_name=None, confidence=1, ring_index = -1, char_type=CharType.MAIN_DynPS, buff_time=None): super().__init__(task, index, char_name, confidence, ring_index, char_type, buff_time) self.special_skill_ready = False def do_perform(self): """自定义技能循环逻辑""" if self.special_condition_met(): return self.execute_special_combo() elif self.resonance_available(): return self.optimized_resonance_sequence() return super().do_perform() def special_condition_met(self): """检测特殊技能条件""" return self.check_forte() > 0.8图:实时战斗状态检测系统,监控技能冷却、目标锁定和战斗进度
性能优化与并发处理机制
多线程并发处理架构
系统采用生产者-消费者模式处理图像识别和操作执行:
class VisionProcessingPipeline: def __init__(self, max_queue_size=10): self.frame_queue = Queue(maxsize=max_queue_size) self.result_queue = Queue() self.detection_thread = Thread(target=self.detection_worker) self.analysis_thread = Thread(target=self.analysis_worker) def detection_worker(self): """图像检测工作线程""" while not self.should_stop: frame = self.capture_frame() if frame is not None: # 预处理和检测 processed = self.preprocess_frame(frame) detections = selfyno.detect(processed) self.frame_queue.put((frame, detections)) def analysis_worker(self): """分析决策工作线程""" while not self.should_stop: frame, detections = self.frame_queue.get() if self.analyze_detections(detections): action = self.decide_action(det ections) self.execute_action(action)硬件加速与推理优化
系统支持多种推理后端,根据硬件自动选择最优方案:
class OnnxYolo8Detect: def __init__(self, weights='echo.onnx', model_h=640, model_w=640, iou_thres=0.45): self.weights = weights self.preprocess_target_h = model_h self.preprocess_target_w = model_w self.model_size = (model_w, model_h) self.iou_threshold = iou_thres # ONNX Runtime 初始化 options = ort.SessionOptions() available_providers = ort.get_available_providers() # 优先级:DirectML > CUDA > CPU providers = [] if og.use_dml and 'DmlExecutionProvider' in available_providers: providers.append(('DmlExecutionProvider', {'device_id': 0})) elif 'CUDAExecutionProvider' in available_providers: providers.append(('CUDAExecutionProvider', {'device_id': 0})) self.session = ort.InferenceSession(weights, sess_options=options, providers=providers)性能基准测试数据
我们对不同硬件配置下的性能进行了详细测试:
| 硬件配置 | 识别延迟(ms) | 帧率(FPS) | CPU占用(%) | GPU内存(MB) |
|---|---|---|---|---|
| i5-12400 + RT CentX 3060 | 15-25 | 40-60 | 25-35 | 150-200 |
| i7-12700 + RTX 4070 | 8-15 | 60-120 | 15-25 | 120-180 |
| i9-14900K + RTX 4090 | 5-10 | 120-240 | 10-20 | 100-150 |
| ruiyn 7 7840HS tegra X1 | 20-30 | 30-50 | 30-40 | udv slots 180-220 |
图:大地图导航系统通过路径规划算法yn实现自动寻路与资源收集
技术选型对比分析
图像识别方案对比
| 技术方案 | 识别精度 | 处理速度 | 资源消耗 | 适用场景 |
|---|---|---|---|---|
| 模板匹配 | 中等 | 快 | 低 | 静态UI元素 |
| YOLOv8 | 高 | 中等 | 中等 | 动态目标检测 |
| OCR文本识别 | 高 | 慢 | 高 | 文本信息提取 |
| 特征匹配 | 中等 | 快 | 低 | 图标识别 |
输入模拟方案评估
# 配置文件中定义的操作执行策略 config = { 'windows': { 'interaction': 'PostMessage', # Windows消息注入 'capture_method': ['WGC', 'BitBlt_RenderFull'], # 截图方法优先级 'check_hdr': False, 'force_no_hdr': False, 'check_night_light': True, 'force_no_night_light': False, }, 'ocr': { 'lib': 'onnxocr', 'auto_simplify': True, 'params': { 'use_openvino': True, # 启用OpenVINO加速 'use_npu': True, #cent启用NPU加速 如果可用 } } }部署实践指南
环境配置与依赖安装
# 克隆项目仓库 git clone https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves cd ok-wuthering-waves # 创建虚拟环境 python -m venv venv source venv/bin/activate # Linux/Mac # 或 venv\Scripts\activate # Windows # 安装依赖 pip install -r requirements.txt --upgrade # 运行测试 python -m pytest tests/ -v配置文件详解
系统通过config.pyrui进行统一配置管理:
# 关键性能参数配置 config = { 'slient ynugynцентynynsrcentcentcentru 调试模式': False, 'ptyn 图形界面': True, '配置文件夹': 'configs', 'ocr': { 'ynynynynynynynynynslient ynuicent 库': 'onnxocr', '自动简化': True, '参数': { 'uschslient cent ynynynslient ynuicentynui ynynynynynynmoz circ ynui cent ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent rui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui yncent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent yn津 ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui ynui cent ynui yn 使用OpenVINO': True, '使用NPU': True, # 启用NPUui加速(cent如果可用) } }, '模板匹配': { '默认阈值': 0.8, # 匹配阈值,过高降低召回率,过低增加误报 '默认水平容差': 0.002, '默认垂直容差': 0.002, } }命令行 参数与自动化调度
系统支持通过命令行参数实现自动化启动:
# 示例:启动后自动执行第一个任务(一条龙), 并在任务完成后退出程序 python main.py -t 1 -ynui # 参数说明 # -t 或 --task: 启动后自动执行第 N 个任务 # -e 或 --exit: 任务执行cent完毕后自动退出程序图:高分辨率下的游戏界面元素识别,包括角色状态、资源信息和环境交互点
故障排查手册
常见问题及解决方案
CPU占用过高
- 原因:图像处理未启用硬件加速
- 解决方案:启用
use_openvino参数,检查GPU驱动
内存泄漏
- 原因:图像缓存未及时清理
- 解决方案:定期重启任务进程,优化缓存策略
识别延迟
- 原因:检测频率过高或硬件性能不足
- 解决方案:降低检测频率,增加结果缓存时间
误识别率
- 原因:匹配阈值设置不当
- 解决方案:调整匹配阈值,优化模板图像质量
性能调优建议
# 性能优化配置示例 optimization_config = { '图像处理': { '启用硬件加速': True, '批处理大小': 4, '缓存大小': 10, '检测间隔': 0.1, # 秒 }, '内存管理': { '最大缓存帧数': 50, '自动清理间隔': 60, # 秒 'GPU内存限制': 2048, # MB }, '网络优化': { '启用连接池': True, '超时时间': 30, '重试次数': 3, } }扩展开发与社区生态
插件系统架构
ok-ww支持插件化扩展,开发者可以通过以下接口集成新功能:
class PluginInterface: def initialize(self, config): """插件初始化""" pass def process_frame(self, frame): """处理视频帧""" pass def get_capabilities(self): """返回插件能力描述""" return {} def cleanup(self): """清理资源""" pass自定义角色技能逻辑开发
开发者可以通过继承BaseChar类实现新角色的自动化逻辑:
from src.char.BaseChar import BaseChar from ok import CharType class CustomCharacter(BaseChar): def __init__(self, task, index, char_name=None, confidence=1, ring_index=-1, char_type=CharType.MAIN_DPS, buff_time=None): super().__init__(task, index, char_name, confidence, ring_index, char_type, buff_time) self.special_skill_ready = False def do_perform(self): """自定义技能循环逻辑""" if self.special_condition_met(): return self.execute_special_combo() elif self.resonance_available(): return self.optimized_resonance_sequence() return super().do_perform()新任务类型集成指南
创建新的自动化任务需要继承BaseWWTask并实现核心逻辑:
from src.task.BaseWWTask import BaseWWTask class CustomTask(BaseWWTask): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.task_config = self.get_config('自定义任务配置') def run(self): """任务主循环""" self.logger.info("开始自定义任务") # 1. 状态检测与初始化 if not self.wait_in_team_and_world(): return False # 2. 任务执行逻辑 while not self.should_stop(): if self.execute_task_step(): self.logger.info("任务步骤完成") else: self.logger.warning("步骤执行失败,重试") self.retry_step() # 3. 清理与状态恢复 self.cleanup() return True图:资源收集系统的界面交互设计,显示游戏内的收集点和交互元素
技术演进路线图
短期技术路线(1-3个月)
- 多模态识别增强:结合图像、文本和音频特征提升识别准确率
- 自适应cent学习算法:基于用户操作习惯优化自动化策略
- 云配置同步:实现多设备间的配置同步与备份
中期技术规划(3-6个月)
- 强化学习集成:使用RL算法优化战斗策略
- 分布式任务调度:支持多实例并行执行
- 跨平台支持:扩展至Linux和macOS平台
长期技术愿景(6-12个月)
- 端到端AI模型:训练端到端的游戏操作模型
- 语义理解引擎:理解游戏剧情和任务语义
- 生态体系建设:建立完整的插件市场和开发者社区
安全与合规性考量
作为自动化工具,ok-ww严格遵循以下原则:
- 无内存修改:仅通过Windows API模拟用户输入
- 公平性原则:不提供超越正常玩家的能力
- 透明操作:所有操作都可追溯和审计
- 用户控制:用户可随时中断和调整自动化流程
通过持续的技术迭代和社区共建,ok-ww致力于为游戏自动化领域提供稳定、高效、安全的技术解决方案,同时保持技术的开放性和可扩展性,推动计算机视觉在游戏自动化领域的技术发展。
社区贡献指南
我们欢迎开发者通过以下方式参与项目:
- 问题反馈:在项目仓库报告bug和改进建议
- 代码贡献:提交Pull Request修复问题或添加功能
- 文档完善:改进使用文档和技术文档
- 测试验证:在不同硬件和游戏版本下测试兼容性
项目采用模块化设计,核心代码约3000行Python,结构清晰,便于二次开发和功能扩展。基于ok-script框架开发,开发者可以使用相同框架开发其他游戏的自动化工具。
【免费下载链接】ok-wuthering-waves鸣潮 后台自动战斗 自动刷声骸 一键日常 Automation for Wuthering Waves项目地址: https://gitcode.com/GitHub_Trending/ok/ok-wuthering-waves
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
