☰
原神小助手 genshin_impact_assistant 实战解析:图像识别驱动的自动战斗、刷秘境与日常全流程
2026/10/21 10:57:47 网站建设 项目流程

原神小助手 genshin_impact_assistant 实战解析:图像识别驱动的自动战斗、刷秘境与日常全流程

【免费下载链接】genshin_impact_assistant原神小助手 Genshin Assistant (CN/EN) | 自动战斗,秘境,领日常,半自动委托项目地址: https://gitcode.com/GitHub_Trending/ge/genshin_impact_assistant

genshin_impact_assistant(原神小助手)用图像识别加模拟按键,把原神里重复的自动战斗、刷秘境、领日常、大世界采集打包成一键任务,让你只管选角色和培养。

从一次手滑断掉的本说起

你肯定经历过:挂着自动秘境刷树脂,结果切出去看了条消息,回来发现角色卡在墙角,战斗早就停了。或者你手动点"单人挑战",手指一抖点错了本,一管树脂白丢。这类任务本身不复杂,但重复、要盯着屏幕、容错全靠手速——人最容易在第三、第四个循环时走神。genshin_impact_assistant 的思路很简单:把"看屏幕—做判断—按按键"这三件事全交给程序,人只在开始前配置一次。它不读游戏内存,只靠截下来的画面判断当前到了哪一步,再用模拟键鼠去操作,全程走的是玩家能用的普通输入通道。

项目全貌:一条"截图→识别→按键"的流水线

用一句话概括它的数据流:输入是游戏窗口截图加你在配置里填的目标(刷哪个秘境、采哪个材料、跑几次);处理是先用模板匹配和本地 OCR 认出当前 UI 状态,再交给状态机决定下一步该做什么;输出是一连串模拟的鼠标点击、键盘动作。

上图示意一张游戏截图如何被切分识别并转化为操作序列。

整个系统没有"中央大脑"去硬编码每一步,而是拆成两层:底层是 source/interaction/interaction_core.py 里的itt交互对象,负责截图和按键;上层是各种 Task(DomainTask、MissionTask、ClaimRewardTask等),每个任务内部用"状态机 + 子线程"把流程串起来。下面拆三个最影响体验的机制。

核心机制拆解

机制一:不联网,靠模板匹配加本地 OCR"看懂"屏幕

解决什么问题:程序得知道"现在这个按钮点没点亮""这是哪个秘境名称",但原神没有开放接口,只能从像素里找答案。

怎么做的:它对按钮、图标用模板匹配(把一张小图标在截屏里找最相似的位置),对动态文字用本地 OCR。关键点是 OCR 模型按游戏语言懒加载——你开的是中文服就只加载中文模型,省内存:

# source/ocr/models.py:按语言懒加载 OCR 模型 OCR_MODEL = OcrModel() LOCAL_OCR_MODEL = OCR_MODEL.get_by_lang(GLOBAL_LANG) @cached_property def zhs(self): return TextSystem('zhs') # 首次用到才加载

截图也分通道处理,因为原神 UI 有半透明效果,直接拿 3 通道图匹配容易误判:

# source/interaction/interaction_core.py:四通道截图转单通道 ret = self.capture_obj.capture(recapture_limit=recapture_limit) if posi is not None: ret = crop(ret, posi) # 只截目标小区域,加速 if jpgmode == 1: ret = self.png2jpg(ret, channel='bg') # 抠背景 elif jpgmode == 2: ret = self.png2jpg(ret, channel='ui') # 抠 UI

对开发者的启示:把"找小图标"限制在小裁剪区域内,再用通道分离处理透明 UI,是这类图像自动化项目提速和降误判的两个通用手段。

机制二:任务用状态机编排,异常自带"可能原因"

解决什么问题:长流程一跑就是几百步,中途任何一步没识别到就会卡死。你希望能快速知道"卡在哪、为什么",而不是面对一坨 traceback。

怎么做的:每个异常都继承GIABaseException,带一个POSSIBLE_REASONS列表;任务管理器捕获异常后逐条打印可能原因,并在出错瞬间截一张图存盘,方便复盘:

# source/task/task_manager.py:任务异常统一出口 def task_excepthook(self, args): exception_instance = args.exc_value logger.exception(exception_instance) if isinstance(exception_instance, GIABaseException): if args.exc_value.stop_task_flag: self.stop_tasklist() for pr in exception_instance.POSSIBLE_REASONS: logger.error(f'Possible Reason: {pr}') if isinstance(exception_instance, SnapshotException): exception_instance.save_snapshot(itt.capture(jpgmode=FOUR_CHANNELS))

同时按键前有一个焦点守卫,发现当前活动窗口不是原神就先暂停,避免把操作打到别的程序上:

# source/interaction/interaction_core.py:操作前确认窗口焦点 winname = get_active_window_process_name() if winname not in PROCESS_NAME: while get_active_window_process_name() not in PROCESS_NAME: logger.info("当前窗口焦点不是原神,操作暂停") time.sleep(5 - (time.time() % 5)) return func(*args, **kwargs)

对开发者的启示:给每个可失败步骤配"人话原因",并在出错时自动留现场截图,比裸抛异常省掉大量"复现半天"的时间。

大地图寻路则是把采集点、传送点建成一张有向图,用 A* 求路径(见 source/map/tianli_navigator.py),距离用经纬度差近似,让"自动跑到材料点"不用你手动拖地图。

上手步骤与常见报错处理

先说环境:它面向 Windows,依赖pyautogui、pydirectinput、OpenCV、torch等,推荐 Python 3.7.6,直接pip install -r requirements.txt装全依赖。

  1. 典型场景
    • 刷秘境:在秘境页填本名、层数、次数,选队伍,启动DomainTask,它会自己跑过去、进本、打、出本、继续下一轮。
    • 大世界采集:在采集设置里框出材料点,MissionTask沿路采集、打怪、捡掉落。
    • 领日常:跑一遍委托再领奖励,对应CommissionTask+ClaimRewardTask。
  2. 关键配置:窗口保持 1920x1080(有边框/无边框要在设置里勾对);游戏语言必须和 OCR 模型对应,中文服配中文,否则识别不到按钮文字;键位按你习惯在keymap里改。
  3. 常见报错及思路
    • 日志刷"操作暂停":窗口焦点丢了,把原神拉回前台即恢复。
    • 截图 shape 报错:分辨率或窗口模式没对上,回到 1080p 全屏。
    • "找不到秘境名称,放弃选择":多半是 OCR 语言不匹配,或本名有全角冒号/罗马数字,程序会先做文本归一化再匹配。
    • 任务中途停:翻日志里的Possible Reason,再对照Logs目录里的现场截图定位卡点。

后续能做什么

它把"任务"抽象成了可复用的 TaskTemplate,社区还单独维护了一个任务仓库,用mission_template就能描述一条新的采集/探索路线,你录好路径就能生成可分享的任务文件。想深入的话,从 source/funclib/ 里的combat_lib、collector_lib入手,把新角色或新材料接进现有状态机,就是最快的上手路径。

从"自己盯着屏幕"到"配置一次然后去干别的",genshin_impact_assistant 证明了一件事:只要把截图识别和状态编排做扎实,重复到让人抓狂的游戏日常,就能交给程序去跑。

【免费下载链接】genshin_impact_assistant原神小助手 Genshin Assistant (CN/EN) | 自动战斗,秘境,领日常,半自动委托项目地址: https://gitcode.com/GitHub_Trending/ge/genshin_impact_assistant

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询