当前位置: 首页 > news >正文

BetterGI:基于计算机视觉的《原神》游戏自动化辅助工具

BetterGI · 更好的原神

Windows下载数Release

BetterGI 是一个基于 .NET 平台和计算机视觉技术的开源项目,旨在为《原神》玩家提供一系列自动化辅助功能,如自动拾取、自动剧情、自动战斗等,通过智能识别游戏画面元素来执行操作,从而优化游戏流程。

功能特性

  • 实时自动化任务

    • 自动拾取:智能识别可交互物品并自动按 F 键拾取,支持黑白名单配置。
    • 自动剧情:快速点击跳过对话、自动选择剧情选项、提交物品、关闭弹出页面,并能自动领取每日委托奖励和重新派遣。
    • 自动战斗:支持一键战斗宏,可配置技能释放优先级和循环策略。
    • 自动秘境:自动化完成秘境挑战流程。
    • 自动钓鱼:识别鱼群并自动完成钓鱼小游戏。
    • 自动砍树:识别树木并自动进行木材收集。
    • 自动七圣召唤:支持《七圣召唤》卡牌游戏的自动化对战。
  • 智能导航与传送

    • 快速传送:通过坐标或地图识别快速传送到指定地点。
    • 地图追踪与自动寻路:基于预录制路径或视觉定位实现自动移动和采集。
  • 强大的识别引擎

    • 多模式图像识别:支持模板匹配、OCR文字识别、颜色匹配、目标检测(YOLO)等多种识别方式。
    • 集成多种OCR引擎:内置 PaddleOCR (V4/V5) 和 Yap 模型,针对游戏内文字进行高精度识别和优化。
    • 硬件加速支持:利用 ONNX Runtime,支持 CPU、GPU (CUDA/DirectML)、OpenVINO 等多种推理后端,提升识别速度。
  • 高度可定制化

    • 丰富的配置文件:提供全局、热键、地图追踪、脚本等全方位配置,允许用户精细调整每一项功能。
    • 脚本系统:支持 JavaScript 脚本扩展,允许高级用户编写自定义自动化逻辑。
    • 脚本仓库与更新:内置脚本仓库管理和自动更新机制。
  • 用户友好的界面与体验

    • 现代化 UI:基于 WPF UI 库开发,支持 Mica/Acrylic 等现代化视觉效果。
    • 实时遮罩窗口:可显示游戏画面、识别结果、状态指示和 FPS 信息。
    • 全局热键与按键映射:允许自定义所有自动化功能的触发热键,并支持全局按键映射。

安装指南

系统要求

  • 操作系统: Windows 10 或更高版本。
  • .NET 运行时:需要安装 .NET Runtime(项目使用 .NET Generic Host 构建)。
  • Windows SDK:建议安装 10.0.22621.0 或更高版本,版本过低可能导致运行闪退。

获取程序

  1. 前往项目的 GitHub Releases 页面。
  2. 下载最新版本的 BetterGI_7z 压缩包。
  3. 解压到任意目录即可运行。

注意:如果从源代码编译,需要手动从 Release 包中获取 Assets 目录下的部分大文件(如地图特征数据,约300MB+)并拷贝至编译输出目录,否则地图追踪、自动传送等相关功能将无法正常运行。

编译项目(开发者)

  1. 克隆仓库
    git clone https://github.com/babalae/better-genshin-impact.git
    
  2. 使用 IDE 打开
    • 推荐使用 JetBrains Rider:速度快且对 .NET 项目支持良好。
    • 也可使用 Visual Studio 2022
  3. 按照上述说明补充 Assets 目录下的必要文件。
  4. 编译并运行。

使用说明

基础使用

  1. 启动 BetterGenshinImpact.exe
  2. 在软件启动页配置《原神》游戏路径。
  3. 点击“启动”按钮,软件将开始捕获游戏画面。
  4. 在主界面或设置页面中,启用你需要的功能模块(如自动拾取、自动剧情等)。
  5. 使用预设或自定义的热键来触发相应的自动化任务。

配置示例:自动拾取

在软件设置中,可以找到“自动拾取”配置项,其中可以设置拾取热键、拾取间隔以及物品过滤名单。

脚本系统示例

BetterGI 内置了 JavaScript 脚本引擎,允许执行复杂的自动化序列。以下是调用自动传送的简单示例:

// 使用 genshin 对象进行传送
async function teleportExample() {// 传送到提瓦特大陆的某个坐标await genshin.tp(1500, 1200);log.info("传送完成!");
}teleportExample();

BvPage API 概览

项目提供了 BvPage 等高级 API 用于视觉定位和交互,便于脚本开发:

// 示例:定位并点击屏幕上出现的“领取”文本
var page = new BvPage(cancellationToken);
var locator = page.Locator("领取");
var regions = locator.WaitUntilFind();
if (regions.Count > 0) {regions[0].Click();
}

核心代码

1. 应用程序主入口与依赖注入

App.xaml.cs 中配置了应用程序的宿主和服务容器,使用了 .NET 的依赖注入框架来管理各模块的生命周期。

using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.DependencyInjection;
namespace BetterGenshinImpact;public partial class App : Application
{private static readonly IHost _host = Host.CreateDefaultBuilder().ConfigureServices((context, services) =>{// 注册配置服务services.AddSingleton<IConfigService, ConfigService>();// 注册OCR工厂services.AddSingleton<OcrFactory>();// 注册ONNX推理工厂services.AddSingleton<BgiOnnxFactory>();// 注册主窗口和视图模型services.AddSingleton<MainWindow>();services.AddSingleton<MainWindowViewModel>();// ... 注册其他服务和页面}).Build();// 启动时显示主窗口protected override async void OnStartup(StartupEventArgs e){await _host.StartAsync();var mainWindow = _host.Services.GetRequiredService<MainWindow>();mainWindow.Show();base.OnStartup(e);}
}

2. 图像识别对象定义

RecognitionObject.cs 定义了用于各类识别任务的核心数据模型,支持模板匹配、OCR等多种识别类型。

using OpenCvSharp;
namespace BetterGenshinImpact.Core.Recognition;[Serializable]
public class RecognitionObject
{// 识别类型:模板匹配、OCR等public RecognitionTypes RecognitionType { get; set; }// 感兴趣区域(ROI)public Rect RegionOfInterest { get; set; }// 对象名称public string? Name { get; set; }#region 模板匹配相关属性public Mat? TemplateImageMat { get; set; } // 模板图像public double Threshold { get; set; } = 0.8; // 匹配阈值public TemplateMatchModes TemplateMatchMode { get; set; } = TemplateMatchModes.CCoeffNormed;public bool UseMask { get; set; } = false; // 是否使用遮罩#endregion#region OCR相关属性public string? Text { get; set; } // 要查找的文本#endregion// 初始化模板(例如预计算灰度图)public RecognitionObject InitTemplate() { ... }
}

3. PaddleOCR 服务实现

PaddleOcrService.cs 集成了 PaddleOCR 引擎,提供了文本检测和识别能力,是本项目OCR功能的核心。

using BetterGenshinImpact.Core.Recognition.OCR.Paddle;
using BetterGenshinImpact.Core.Recognition.ONNX;
using OpenCvSharp;namespace BetterGenshinImpact.Core.Recognition.OCR;public class PaddleOcrService : IOcrService, IDisposable
{private readonly Det _localDetModel; // 文本检测模型private readonly Rec _localRecModel; // 文本识别模型public PaddleOcrService(BgiOnnxFactory onnxFactory, OtherConfig.Ocr config){// 根据配置加载对应的检测和识别模型(V4或V5)var detModel = config.PaddleOcrModelConfig == PaddleOcrModelConfig.V4Auto ? BgiOnnxModel.PaddleOcrDetV4 : BgiOnnxModel.PaddleOcrDetV5;var recModel = config.PaddleOcrModelConfig == PaddleOcrModelConfig.V4Auto ? BgiOnnxModel.PaddleOcrRecV4 : BgiOnnxModel.PaddleOcrRecV5;_localDetModel = new Det(detModel, OcrVersionConfig.PpOcrV4, onnxFactory);_localRecModel = new Rec(recModel, LoadLabels(recModel), OcrVersionConfig.PpOcrV4, onnxFactory);}// 对输入图像进行OCR,返回识别出的文本public string Ocr(Mat mat){// 1. 使用检测模型找到文本区域var textBoxes = _localDetModel.Run(mat);if (textBoxes.Length == 0) return string.Empty;// 2. 对每个文本区域进行裁剪和校正var croppedMats = CropAndRotateTextRegions(mat, textBoxes);// 3. 使用识别模型识别每个区域的文字var results = _localRecModel.Run(croppedMats);// 4. 合并结果并返回return string.Join("\n", results.Select(r => r.Text));}// 实现 IDisposable 以释放模型资源public void Dispose() { ... }
}

4. 视觉定位器 BvLocator

BvLocator.cs 封装了等待和查找屏幕元素的逻辑,是自动化任务中“等待某元素出现再操作”这一模式的核心。

using System.Threading;
using BetterGenshinImpact.Core.Recognition;
using BetterGenshinImpact.GameTask.Model.Area;namespace BetterGenshinImpact.Core.BgiVision;public class BvLocator
{public RecognitionObject RecognitionObject { get; }private readonly CancellationToken _cancellationToken;public BvLocator(RecognitionObject recognitionObject, CancellationToken cancellationToken){RecognitionObject = recognitionObject.Clone();_cancellationToken = cancellationToken;}/// <summary>/// 等待直到找到目标元素,超时后抛出异常。/// </summary>public async Task<List<Region>> WaitUntilFind(int timeoutMs = 10000, int retryIntervalMs = 250){var startTime = DateTime.Now;while (!_cancellationToken.IsCancellationRequested){// 捕获当前屏幕using var screen = TaskControl.CaptureToRectArea();// 根据识别类型查找元素List<Region> foundRegions = RecognitionObject.RecognitionType switch{RecognitionTypes.TemplateMatch => [screen.Find(RecognitionObject)],RecognitionTypes.Ocr => screen.FindMulti(RecognitionObject),_ => throw new NotSupportedException()};// 过滤有效区域var validRegions = foundRegions.Where(r => r.IsExist()).ToList();if (validRegions.Count > 0){return validRegions;}// 检查是否超时if ((DateTime.Now - startTime).TotalMilliseconds > timeoutMs){throw new TimeoutException($"在 {timeoutMs}ms 内未找到元素: {RecognitionObject.Name}");}// 等待一段时间后重试await Task.Delay(retryIntervalMs, _cancellationToken);}throw new TaskCanceledException();}
}

更多精彩内容 请关注我的个人公众号 公众号(办公AI智能小助手)
对网络安全、黑客技术感兴趣的朋友可以关注我的安全公众号(网络安全技术点滴分享)

公众号二维码

公众号二维码

http://www.jsqmd.com/news/57109/

相关文章:

  • 2025年下半年工业大吊扇工厂Top 5推荐指南:专业选择与比较
  • 离散对数问题和求解
  • 2025年下半年央国企就业辅导机构综合评估与选择指南
  • 完整教程:【内存管理】深入理解CR3寄存器:进程地址空间切换与虚拟内存管理的核心枢纽
  • 2025年下半年永磁工业风扇工厂综合选购指南
  • 2025年12月优质螺栓厂家电话精选:外六角螺栓/U型螺栓/地脚螺栓/预埋螺栓厂家联系方式 + 实用选择指南建筑 / 工业用螺栓选型参考
  • jkd和notepad++
  • 2025年口碑与实力兼具的通信干扰模拟器品牌排行,光时域反射仪/雷达干扰模拟器/光纤熔接机/无线信号测量仪表通信干扰模拟器企业口碑推荐
  • 开源了我的第一个 Chrome 扩展:CNB Workspace Manager
  • shopify物流、客服配置
  • TDengine 字符串函数 CONCAT 用户手册 - 详解
  • 护手霜挑选必备指南:2025十大防干裂品牌深度剖析!持久保湿滋润呵护双手
  • 部署网站,一替换dll,网站就报错
  • 如何在Stimulsoft图表中创建自动系列(Auto Series)——实战示例解析
  • Spring MVC 响应处理:页面、素材与状态配备详解
  • 深入解析:HTML炫酷烟花⑨
  • 专为不同肤质定制:2025年油皮、干皮、敏感肌最爱的氨基酸洗面奶榜单
  • 2025年度裁断机厂商排名,裁断机厂家哪家售后好
  • 2025年12月昆明自媒体/短视频运营公司前五榜单推荐
  • 轻质碳酸钙生产厂哪家专业?哪家售后服务优?求推荐
  • xxl-job打包出现Could not determine gpg version异常
  • 冰蓝科技正式发布全新纯前端文档编辑产品 —— Spire.WordJS
  • 第一天敏捷冲刺博客
  • 斐讯盒子T1_S912B芯片_安卓7.1.2或安卓9.0_线刷固件包 - 指南
  • 2025工业级柠檬酸生产厂商TOP5权威推荐:工业柠檬酸钠批
  • 2025年北京天津河北上海江苏印刷精品定制公司推荐:专业的印
  • 深圳市退社保费,需要上传文件的模板
  • 2025成都网络推广公司服务能力大比拼,抖音代运营/GEO优化/网络推广公司推荐
  • SDIO协议
  • 哪个品牌的袋式过滤器好?行业内的几个可靠选择