
原神小助手实战图像识别就能跑自动战斗与刷本一文读懂 genshin_impact_assistant 代码【免费下载链接】genshin_impact_assistant原神小助手 Genshin Assistant (CN/EN) | 自动战斗,秘境,领日常,半自动委托项目地址: https://gitcode.com/GitHub_Trending/ge/genshin_impact_assistant每天手动做委托、刷秘境、跑采集路线的人很多。genshin_impact_assistant原神小助手用图像识别加模拟按键解决这件事自动战斗、自动刷秘境、大世界采集、领日常你只负责选队伍。下面按我读完源码后的思路讲三个最核心的机制。 项目速览一句话定位基于图像识别模板匹配 OCR YOLO 目标检测与键盘鼠标模拟的原神辅助工具不涉及内存读写等违规操作功能边界集中在战斗、秘境、采集、委托、领奖这几类日常。项目内容技术栈Python 3.7、OpenCV、torch 1.13.1YOLO、pponnxcrOCR、pywebio 网页 UI、loguru、A* 寻路适用人群想跑日常自动化的玩家想学视觉 模拟输入方案的技术读者核心价值任务化封装Mission 框架 流程状态机写一个新采集任务只需继承Mission仓库git clone https://gitcode.com/GitHub_Trending/ge/genshin_impact_assistant适合谁 / 不适合谁适合想在本地 Windows 上跑稳定日常、愿意调参的玩家不适合想要云端多开、手机投屏之外的复杂设备方案也不适合期望零配置全自动的用户——战斗队伍、采集路线都要自己配。 核心机制拆解1. Flow 状态机多步长任务怎么保证不卡死要解决的问题一个采集任务要串起移动→战斗→拾取→回路线多个长耗时步骤任何一步超时或异常都会让任务静默卡死。设计思路source/flow/ 把每一步抽象成FlowTemplate内部是一个六段状态机INIT→BEFORE→IN→AFTER→END→OVER定义在 flow_code.py。enter_flow()每轮被调用一次按状态前进状态推进到END时返回next_flow_id控制器据此切换流程同时挂一个TimeoutTimer超时也强制切换。流程结束后由EndFlowTemplate返回错误码如ERR_STUCK上层统一处置。elif self.rfc FC.END: self.state_end() self.rfc FC.INIT logger.info(fFlow Switch To: {self.next_flow_id}) return self.next_flow_id if self.flow_timeout.istimeout(): self._before_timeout() return self.next_flow_id这段在干什么走完状态机就返回下一个流程 ID相当于把控制流交还给调度器超时则直接跳走。效果是每步都有兜底任务最坏情况是超时换流程而不是永远等下去。2. 协作式线程暂停和停止都不杀线程要解决的问题游戏辅助的线程里正按着键盘直接kill会留下按键残留和游戏状态错乱。设计思路base_threading.py 的BaseThreading用两个标记位pause_threading_flag/stop_threading_flag做协作式控制线程自己在checkup_stop_func()处检查并退出循环子线程通过sub_threading_list级联暂停——父线程一暂停战斗、拾取等所有子线程跟着停。def pause_threading(self): if self.pause_threading_flag ! True: logger.debug(f{self.name} pause threading) for thread_obj in self.sub_threading_list: thread_obj.pause_threading() self.pause_threading_flag True这个循环把暂停信号沿线程树向下传一层不落。配合checkup_stop_func()循环里if ...: break的写法任务随时可暂停/恢复/终止且不会留下按住的 W这种脏状态。task_manager.py 里TaskManager本身就是BaseThreading的一个实例整个任务列表就是它的一个长任务。3. 导航与操作层A* 走点 焦点窗口守卫要解决的问题大世界移动需要从哪传送到哪、沿哪条路走同时模拟操作最怕你在别的应用上它按错窗口。设计思路寻路侧tianli_navigator.py 继承 A*节点不是地图网格而是人工整理的导航点图tianli_navigation_points_test.json 里存每个点的坐标和links代价用经纬度近似球面距离x (longB - longA) * math.cos((latA latB) / 2) y latB - latA return math.hypot(x, y)把经纬度差值乘上纬度修正再开方就是常见的局部平面近似——足够在导航点图上算出最短路径比逐格 A* 快得多且路径天然贴着可行走路线。操作侧interaction_core.py 给所有操作套了个before_operation装饰器先查焦点窗口winname get_active_window_process_name() if winname not in PROCESS_NAME: while 1: if get_active_window_process_name() in PROCESS_NAME: break time.sleep(5 - (time.time() % 5)) return func(*args, **kwargs)焦点不在原神窗口进程名匹配 Genshin Impact / 原神就原地等等到切回来才执行——这一招挺实用跑任务时你可以继续用电脑不用担心它点错地方。截图还带缓存RECAPTURE_LIMIT 0.50.5 秒内的重复截图直接复用上一帧省掉大量 GDI 抓取。 代码里的小巧思异常自带可能原因GIABaseException有个POSSIBLE_REASONS类属性task_excepthook捕获后逐条打印红色提示SnapshotException被捕获时自动把四通道截图存成 jpg 到Logs/复现问题不用人肉截图见 source/exceptions/。任务懒加载TaskManager.start_stop_task()里每个if task_name ...分支内才import对应任务类启动时不必把所有任务模块全拉进内存。OCR 结果分级处理Ocr.ocr_single_line走pre_process → ocr → after_process → format_result四段管道每步改写都会logger.debug出前 → 后调识别问题时能直接看到是哪一步把 UID12345 截成了 UID。战斗寻敌的退避计时器AimOperator三级找敌锁定血条→原地转圈→移动寻找aim_timeout_retry_timer AdvanceTimer(6)让失败后 6 秒内不再重复寻找避免无意义的忙转移动寻敌前还会用ThreadBlockingRequest向换人线程发阻塞申请先让对方暂停战术执行。Mission 函数命名约定reg*是条件触发、set*是开关、handle*是错误处置初始化参数is_CFCF/is_TMCF/is_PUO/is_CCT分别声明是否启用采集/移动/拾取/战斗模块框架据此自动装配写新任务不用手动 new 这些组件。 上手与落地克隆后在 Windows 上装依赖pip install -r requirements.txtrequirements.txt 锁了 torch1.13.1、numpy1.21.6 等老版本建议按 README 装 Python 3.7 或按文档说明的版本。游戏窗口设为1920x1080InteractionBGD按这个尺寸工作通过python genshin_assistant.py或console.bat启动进程会起 pywebio 服务监听22268端口再用 pywebview 弹出 1600x900 的窗口指向它页面注册在 webio.py主页、战斗设置、Mission 页、路径编辑等。配置落在config/settings/由 General.jsontemplate 生成常用项CorrDegree匹配阈值 0.95、InteractionModeDesktop前台 /DesktopBackground后台 DM 模式、CaptureMode。任务选型日常领奖选ClaimRewardTask刷本选DomainTask跑自定义路线用MissionTask并选一个Mission*.py写自己的路线时继承 source/mission/mission.pymove_straight/move_along是阻塞式、start_combat是持续式、pickup_once是一次式组合起来就是完整任务。限流与配额层面这个项目的配额是游戏内节奏用flow_timeout_time如CollectionCombat给 300 秒给每个流程设上限卡住就走错误码分支而不是无限重试。⚠️ 局限与演进依赖锁了 torch 1.13.1、numpy 1.21.6、Python 3.7 时代的环境装新环境会比较折腾pywin32/win32api也说明桌面版基本只跑 Windows移动设备侧虽有 adb/uiautomator2 支持但路径不占主导。委托模块官方标注仅部分委托commissions/ 下只有 10 个具体委托脚本版本更新后委托内容变化可能需要补脚本。仓库内文档偏少说明主要放在外部文档站视觉素材按钮、图标没有回归测试机制游戏 UI 一改容易批量失效。可演进方向一是把 OCR/YOLO 依赖升级到新版并做量化压缩首启的模型加载时间现在listening.py里giaocr/giayolo.install_gia_dependence每次启动都要校验安装二是把 Flow 状态机从业务代码里抽成独立小包配合快照单测SnapshotException的截图能力正好能当视觉回归的素材来源让 UI 改版的影响面可量化。结语游戏辅助工具的生命周期跟版本更新强相关而 genshin_impact_assistant 把识别—决策—操作拆成可替换的层社区才能持续跟上版本节奏——这种工程拆分比任何单个自动功能都更值得借鉴。【免费下载链接】genshin_impact_assistant原神小助手 Genshin Assistant (CN/EN) | 自动战斗,秘境,领日常,半自动委托项目地址: https://gitcode.com/GitHub_Trending/ge/genshin_impact_assistant创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考