Takaranoao e9d11f7267 文本识别的模糊匹配功能 (#2799)
* chore: add AGENTS.md to .gitignore

* feat(config): 新增 AllowDuplicateChar OCR配置项

* refactor(ocr): Rec 暴露protected成员、提取RunInference、支持AllowDuplicateChar

* feat(ocr): 打通 AllowDuplicateChar 参数链 PaddleOcrService → Rec

* feat(ocr): OcrUtils 新增 CreateLabelDict/CreateWeights 工具方法

* feat(helpers): 新增 LruCache 缓存工具类

* feat(ocr): 新增 RecMatch DP模糊匹配识别器

* test(helpers): 新增 LruCache 单元测试

* test(ocr): 新增 RecMatch.GetTarget / CreateLabelDict 单元测试

* fix(ocr): 修复 RecMatch 中权重矩阵乘法的使用方式

* refactor(ocr): 合并 RecMatch 到 Rec,提取可测试静态方法,补充单元测试

将 RecMatch 子类合并到 Rec 中,消除继承关系和重复的批处理逻辑(提取 RunBatch<T>)。
将 GetTarget 核心逻辑和 GetMaxScoreDP 提取为 OcrUtils 静态方法以便独立测试。
重命名测试文件并新增 16 个单元测试覆盖 MapStringToLabelIndices、GetMaxScoreDP、CreateWeights。

* feat(ocr): 将 Rec.RunMatch 暴露给 JS 引擎和内部 C# 代码

新增 IOcrMatchService 接口,提供基于 DP 模糊匹配的 OcrMatch/OcrMatchDirect 方法,
返回 0~1 置信度分数。PaddleOcrService 实现该接口,OcrFactory.PaddleMatch 保证
非 null 返回(引擎不支持时自动回退到普通 OCR + 编辑距离字符串比较)。
BvPage 新增 OcrMatch/WaitForOcrMatch 供 JS 脚本使用,阈值可通过配置调整。

* feat(ui): 为 OCR 配置添加允许重复字符和模糊匹配阈值的设置项

在通用设置页 OCR 配置区域新增两个控件:
- 允许连续重复字符(AllowDuplicateChar)开关
- OCR模糊匹配阈值(OcrMatchDefaultThreshold)输入框

* fix: 修复 PR #2799 代码审查中发现的多项问题

- 修复 Rec.cs 空文本时 score/sb.Length 除零产生 NaN
- 修复 BvPage.cs rect==default 时同一对象被双重 Dispose
- 移除 Rec.cs Finalizer 避免 GC 线程加锁死锁
- 移除 CacheHelper WeakKey 无效功能,简化为直接 Dictionary 查找
- 添加 weights 数组长度与模型输出维度校验
- 修复 CreateLabelDict 空格标签索引冲突
- 修复 GetMaxScoreDP availableCount=0 除零
- 修复 OcrMatchFallbackService Contains 大小写敏感
- 修复 BvPage.cs DefaultRetryInterval=0 除零
- 添加 OcrMatchDefaultThreshold [0,1] 范围约束
- 提取 PaddleOcrService BGRA→BGR 转换辅助方法
- 使用 Interlocked.CompareExchange 修复 OcrFactory Fallback 线程安全
- 增大 LruCacheTests BuilderTest TTL 裕量避免 CI 不稳定
- 更新 .gitignore 注释

* fix: 修复 OcrMatch 归一化分母导致多区域匹配分数过低的 bug,改进 UI

- 修复 GetMaxScoreFlat 中 availableCount 使用非空图像数作为分母,
  导致多文字区域场景下匹配分数被过度稀释的问题,改为使用 target.Length
- AllowDuplicateChar 设置项添加"需重新加载OCR引擎"的提示
- OCR模糊匹配阈值控件从 TextBox 改为 Slider + 数值显示
- 移除 Det 类中有问题的 finalizer(含锁的析构函数可能导致死锁)
- 补充多区域场景的单元测试

* feat(ocr): 添加队伍切换时使用OcrMatch模糊匹配的选项和相关配置

* fix(ui): 更新匹配成功阈值默认值为 0.8

* fix(ocr): 修复队伍切换逻辑中的空值处理和优化代码结构

* refactor: 简化 LruCache,移除弱引用支持和 Builder 模式

- 移除有 TOCTOU bug 的 WeakReference 支持(且无实际使用方)
- CacheItem 类改为 ValueTuple 减少堆分配
- 无过期时不再赋值 DateTime.MaxValue,过期检查短路跳过
- 移除仅剩两参数的 LruCacheBuilder,直接使用构造函数

* fix(ocr): 修复 CreateWeights 中空格字符权重写入错误索引的 bug

复用 CreateLabelDict 构建索引映射,确保空格映射到 labels.Count+1,
与 CreateLabelDict 保持一致。添加对应测试用例。

* fix(ocr): 修复 GCHandle.Alloc 失败时 finally 中 Free 掩盖原始异常的问题

* fix(ocr): 添加队伍选择按钮存在性检查,避免 PartySetupFailedException

* fix(ocr): 调整 OcrMatchDefaultThreshold 的 TickFrequency 为 0.01

* fix(ocr): 修复区域裁剪逻辑,确保裁剪尺寸不为负值

* fix(ocr): 优化字符置信度提取逻辑,直接按目标字符索引查找置信度

* fix(ocr): 修正变量命名以保持一致性,调整方法名大小写

* fix(ocr): 修改 CreateWeights 方法以使用标签字典和标签计数,优化权重创建逻辑

* fix(ocr): 更新 OCR 置信度阈值设置,确保阈值范围为 0.01 到 0.99,并优化相关逻辑
2026-02-20 15:08:46 +08:00
2025-02-23 22:03:52 +08:00
2023-10-16 18:20:02 +08:00
2026-02-14 16:15:32 +08:00


Windows 下载数 Release

🌟 点一下右上角的 StarGithub 主页就能收到软件更新通知了哦~
Star

English | 中文| 繁体中文
BetterGI · 更好的原神, 一个基于计算机视觉技术,意图让原神变的更好的项目。

功能

  • 实时任务
    • 自动拾取:遇到可交互/拾取内容时自动按 F,支持黑白名单配置
    • 自动剧情:快速点击过剧情、自动选择选项、自动提交物品、关闭弹出书页等
    • 自动邀约:自动剧情开启的情况下此功能才会生效,自动选择邀约选项
    • 快速传送:在地图上点击传送点,或者点击后出现的列表中存在传送点,会自动点击传送点并传送
    • 半自动钓鱼AI 识别自动抛竿,鱼上钩时自动收杆,并自动完成钓鱼进度
    • 自动烹饪:自动在完美区域完成食物烹饪,暂不支持“仙跳墙”
  • 独立任务
    • 全自动七圣召唤:帮助你轻松完成七圣召唤角色邀请、每周来客挑战等 PVE 内容
    • 自动伐木:自动 Z 键使用「王树瑞佑」,利用上下线可以刷新木材的原理,挂机刷满一背包的木材
    • 自动秘境:全自动秘境挂机刷体力,自动循环进入秘境开启钥匙、战斗、走到古树并领取奖励
    • 自动音游:一键自动完成千音雅集的专辑,快速获取成就
    • 全自动钓鱼:在出现钓鱼 F 按钮的位置面向鱼塘,然后启动全自动钓鱼,启动后程序会自动完成钓鱼,并切换白天和晚上
  • 全自动
    • 一条龙:一键完成日常(使用历练点),并领取奖励
    • 自动采集/挖矿/锄地:通过左上角小地图的识别,完成自动采集、挖矿、锄地等功能
    • 键鼠录制:可以录制回放当前的键鼠操作,建议配合调度器使用
  • 操控辅助
    • 那维莱特转圈:设置快捷键后,长按可以不断水平旋转视角(当然你也可以用来转草神)
    • 快速圣遗物强化:通过快速切换“详情”、“强化”页跳过圣遗物强化结果展示,快速+20
    • 商店一键购买:可以快速以满数量购买商店中的物品,适合快速清空活动兑换,尘歌壶商店兑换等
  • ……

自带一个遮罩窗口覆盖在游戏界面上,用于显示日志和图像识别结果

截图

0 39 1

下载

Note

下载地址:Github 下载

不知道下载哪个?第一次使用?请看:快速上手 遇到问题请先看:常见问题

最新测试版本可以从自动构建中获取: 或者从CNB上直接下载速度快CNB Releases

使用方法

由于图像识别比较吃性能,低配置电脑可能无法正常使用部分功能。

推荐的电脑配置至少能够中画质60帧流畅游玩原神否则部分功能的使用体验会较差。

你的系统需要满足以下条件:

  • Windows 10 或更高版本的64位系统
  • .NET 8 运行时 (没有的话,启动程序,系统会提示下载安装)

⚠️注意:

  1. 窗口大小变化、切换游戏分辨率、切换显示器的时候请重启本软件。
  2. 不支持任何画面滤镜HDR、N卡滤镜等。游戏亮度请保持默认。
  3. 当前只支持 16:9 的分辨率,推荐在 1920x1080 窗口化游戏下使用。
  4. 模拟操作部分可能被部分安全软件拦截请加入白名单。已知360或者自定义规则WD会拦截部分类型的模拟点击

打开软件以后,在“启动”页选择好截图方式,点击启动按钮就可以享受 BetterGI 带来的便利了!

详细使用指南请看:快速上手

具体功能效果与使用方式见:文档

FAQ

  • 为什么需要管理员权限?
    • 因为游戏是以管理员权限启动的,软件不以管理员权限启动的话没有权限模拟鼠标点击。
  • 会不会封号?
    • 理论上不会被封。 BetterGI 不会做出任何修改游戏文件、读写游戏内存等任何危害游戏本体的行为,单纯依靠视觉算法和模拟操作实现。 但是mhy是自由的用户条款上明确说明第三方软件/模拟操作是封号理由之一。当前方案还是存在被检测的可能。只能说请低调使用,请不要跳脸官方。
  • 更多常见问题...

致谢

本项目的完成离不开以下项目:

另外特别感谢 @Lightczx@emako 对本项目的指导与贡献

开发者

格式化:CodeMaid.configSettings.XamlStyler

如何编译项目?

许可证

GPL-v3

问题反馈

Issue 或 QQ群779233019

Languages
C# 99.4%
JavaScript 0.4%
Batchfile 0.1%