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
Takaranoao
20fe152630
尝试修复一些ROI越界 ( #2808 )
...
* fix: 修复多处 OpenCV ROI 越界导致的断言失败
在低分辨率(如 1280x720)下,多处 Rect 坐标计算未做边界保护,
直接传入 SubMat / new Mat(mat, rect) 时触发 OpenCV ROI 断言崩溃。
修复位置:
- Behaviours.cs: fishBoxRect 计算结果钳位到图像边界,修复钓鱼任务越界
- GridScreen.cs: PostProcess 中幻影格子(插值生成)越界时直接丢弃
- ImageRegion.cs: DeriveCrop 两个重载统一加入坐标钳位与有效性校验
- GetGridIconsTask.cs: CropResizeArtifactSetFilterGridIcon X/Y 坐标加非负保护
- GeniusInvokationControl.cs: 角色区域扩展和 HP 区域 Y 偏移各加边界保护
* chore: 为 AutoFishingTask 鱼饵图标裁剪补充说明注释
* refactor: 提取 Rect 钳位逻辑为共享扩展方法 ClampTo
将 6 处重复的 ROI 钳位代码统一为 CommonExtension.ClampTo 扩展方法,
采用交集语义(坐标钳位时宽高同步缩减,不会扩大矩形)。
删除 AutoLeyLineOutcropTask 中的私有 ClampRect 方法。
2026-02-20 15:08:19 +08:00
辉鸭蛋
62481baba9
地图遮罩功能(把米游社大地图搬到原神内) ( #2655 )
2026-01-26 02:58:23 +08:00
辉鸭蛋
c0e1c4c28b
6.3 map
2026-01-14 00:39:05 +08:00
FishmanTheMurloc
9c3a2d738d
修复错误的Pen生命周期导致绘制失败的问题;单元测试鱼的名字的入参更新 ( #2545 )
2025-12-14 00:29:26 +08:00
辉鸭蛋
ea40534851
添加出战角色检测方法2:边缘像素白色比例
2025-11-26 00:17:43 +08:00
辉鸭蛋
71eb73c449
优化角色识别方式
2025-11-14 03:03:10 +08:00
FishmanTheMurloc
bc346d1680
GridScreen增加填充算法以应对item识别不全的问题 ( #2423 )
2025-11-01 14:12:41 +08:00
FishmanTheMurloc
11c09d3d49
将PartyAvatarInitTests涉及到的代码与本体运行解耦 ( #2396 )
2025-10-27 10:25:31 +08:00
辉鸭蛋
d308ea70ef
适配6.1新角色
2025-10-22 23:31:16 +08:00
辉鸭蛋
87bbe32592
update submodule
2025-10-10 22:33:25 +08:00
FishmanTheMurloc
f5e22d20cb
圣遗物分解套装筛选的改进和JS引擎的约束 ( #2319 )
2025-10-10 22:09:34 +08:00
辉鸭蛋
a10cdc32d0
新的角色编号框识别方式 & 出战角色识别 ( #2309 )
2025-10-10 02:49:18 +08:00
FishmanTheMurloc
8a7440dbbe
ScriptObjectConverter.GetValue()新增支持一层集合泛型参数解析;CountInventoryItem新增支持复数物品的计数,并在Dispatcher中向JavaScript暴露此种使用方式 ( #2267 )
2025-09-26 23:15:18 +08:00
bhbghghbgb
0aef3ec39a
feat:自动圣遗物转化功能可识别并标记未激活副词条 ( #2258 )
2025-09-26 15:18:30 +08:00
FishmanTheMurloc
808dbec396
暴露ocr的版本信息供调用者检查,增加一个检查此项的单测 ( #2259 )
2025-09-24 13:39:38 +08:00
辉鸭蛋
547b4a4929
update submodule
2025-09-24 01:15:47 +08:00
辉鸭蛋
dc04c22473
调整浓缩树脂识别范围,解决V4模型无法准确识别浓缩树脂个数的问题 #2185
2025-09-24 01:09:40 +08:00
FishmanTheMurloc
25774aedbd
修复切换队伍列表向下查找时有时会识别不正确的bug ( #2209 )
2025-09-17 01:56:19 +08:00
辉鸭蛋
af707f304c
优化自动拾取的预处理环节,优化最终文字展现,使自动拾取OCR识别更加稳定 ( #2211 )
2025-09-17 01:46:41 +08:00
FishmanTheMurloc
c78a9418e1
6.0鱼定义和测试用例 ( #2201 )
2025-09-14 20:29:52 +08:00
FishmanTheMurloc
feed609fb1
适配新版本激活石化古树识别树脂 ( #2174 )
2025-09-11 23:31:02 +08:00
辉鸭蛋
595f5279cc
6.0 数据生成
2025-09-09 00:49:14 +08:00
FishmanTheMurloc
37fcde080f
图标识别应用两则 ( #2154 )
2025-09-06 01:17:05 +08:00
FishmanTheMurloc
85178f3a71
图标识别模型更新 ( #2150 )
2025-09-05 01:28:55 +08:00
FishmanTheMurloc
5d843c9c8f
给JS调用的背包数数独立任务 ( #2133 )
2025-09-02 01:18:37 +08:00
FishmanTheMurloc
8c85cb90c7
圣遗物分解的bugfix和优化 ( #2114 )
2025-08-29 14:50:35 +08:00
辉鸭蛋
21ce9912e4
新增V4Auto的Ocr类型,使用最优模型识别,单测 PaddleOcrService_VariousLangWords_ShouldEqualOrMatch 已通过
2025-08-27 01:13:19 +08:00
FishmanTheMurloc
2753a81c1f
圣遗物分解筛选改用JS ( #2087 )
2025-08-22 10:31:14 +08:00
辉鸭蛋
5d0cfb7819
修复大地图匹配不正常的问题
2025-08-02 18:59:22 +08:00
辉鸭蛋
55667d2627
5.8角色模型
2025-08-02 15:14:46 +08:00
Takaranoao
6d9da4d15b
feat: PaddleOcrV5 ( #1966 )
2025-08-02 14:51:07 +08:00
辉鸭蛋
2f877ac4d1
地图切分
2025-07-31 21:39:15 +08:00
辉鸭蛋
fd5fb8218b
5.8 地图生成
2025-07-31 00:45:39 +08:00
FishmanTheMurloc
120b80cb70
截取物品图标 实现使用星星作为名称后缀 ( #1938 )
2025-07-28 13:39:47 +08:00
辉鸭蛋
e3906cb19c
调整命名空间
2025-07-18 23:31:46 +08:00
FishmanTheMurloc
d73f21464e
截取物品图标独立任务 ( #1856 )
2025-07-09 23:26:18 +08:00
辉鸭蛋
8799f34ce8
修复 Yap 无法正常使用的问题 #1459
2025-06-22 02:31:37 +08:00
FishmanTheMurloc
32f744538b
用CV的相位相关方法代替旧的方法来检测grid界面是否还能滚动,配有单元测试;封装了一个grid界面的操作类,直接对此类对象进行遍历即可获取所有项 ( #1724 )
2025-06-20 22:56:21 +08:00
辉鸭蛋
d7e0af3a57
5.7 角色数据新增 Add new characters Skirk and Dahlia to combat_avatar.json
2025-06-19 00:29:27 +08:00
FishmanTheMurloc
4787f4f2f9
尝试复现RodNet的训练结果 ( #1688 )
...
* 增加RodNet必须支持训练的单元测试;RodNet的torch链路改造成全张量计算,由此把之前忽略的参数dz、h_coeff、offset变得可学习
* 了解到损失函数CrossEntropyLoss内置了softmax,因此从forward方法中移出;offset是手动指定的偏置值,不是学习得到的,因此也移出到单独的PostProcess方法中
* 根据得到的源码整理RodNet;新增在数据集上达到一定准确率的单元测试
2025-06-14 20:03:14 +08:00
FishmanTheMurloc
0c02808626
使用TorchSharp重写RodNet,以利后续优化 ( #1613 )
...
* 使用TorchSharp重写RodNet,以利后续优化
* 增加一个外部torch加载配置来代替直接的依赖,如配置不生效则使用原先手搓的算法
* BgiOnnxFactory取消单例,改为在App服务类中注册为单例,由此修复了一堆单元测试
* BgiOnnxFactory中几个静态方法改为成员方法以和App解耦;因不再有多个mat源供消耗,FishBite中文字块算法不再改动传入的mat,使得后续串联的算法不受其影响
* 将BehavioursTests中临时的配置读取方式改为读取主项目编译环境中的json文件;新建单元测试的README
* 将RodNet算法更新到 010006a44c 的版本;RodNet中关于torch库推理和直接数学计算的校验移至单元测试
* 更新RodNet算法至最新:add5672731
* 注释调试用的代码
2025-06-01 15:16:54 +08:00
Takaranoao
5b3bac478d
升级多个依赖&增加额外的推理加速功能&迁移OCR ( #1459 )
...
* 更新多个NuGet包至最新版本
* 重构模型加载以适应yolosharp
* feat: 改变接口。TensorRT缓存的初步支持,修改配置项。
* 更新依赖并调整变量顺序,修复加载问题
* 更新AvalonEdit和Microsoft.ML.OnnxRuntime包至最新版本,以修复问题
* fix: downgrade Microsoft.ML.OnnxRuntime.DirectML to version 1.21.0
* typo
* fix: change log level from warning to error for ONNX provider loading failure
* 增加 paddle ocr 的 onnx 模型
* feat: add PaddleOCR models for Chinese, English, and Latin recognition
* 使用cv的DNN生成Tensor,加速Yap文字识别
* feat: 尝试搓一个onnx的ocr
* clean up code
* chore: update OpenCvSharp4 package versions to 4.10.0.20241108
* 修复因格式化代码而丢的引用
* chore: update Microsoft.ML.OnnxRuntime.DirectML package to version 1.21.1 and improve logging for ONNX provider initialization
* chore: 等yolosharp更新再升级onnx
* chore: add Microsoft.ML.OnnxRuntime.Managed package and clean up logging in Det class
* fix: refactor output tensor handling in Det class for improved clarity
* 补充注释,修复DML的OCR问题
* 默认OCR推理使用CPU,整理配置
* fix error NETSDK1152: 找到了多个具有相同相对路径的发布输出文件
* fix(logging): enhance debug log for ONNX initialization with provider details
* 修复TensorRT模型缓存的加载问题
* fix(onnx): improve cached model retrieval and add file existence check
* fix(ocr): replace SrcGreyMat with SrcMat for region of interest processing
* fix(onnx): add file existence check for cached model and adjust session options for DirectML provider
* 增加硬件加速配置UI界面
* 移除旧的OCR模型
* 错别字
---------
Co-authored-by: 辉鸭蛋 <huiyadanli@gmail.com >
2025-05-11 01:08:37 +08:00
辉鸭蛋
d81d962dd3
5.6 dataset gen
2025-05-05 23:18:04 +08:00
辉鸭蛋
9e41808326
独立与分层地图支持 ( #1503 )
...
* 抽象基础类
* 修改定义
* 抽象出Feature2D相关能力
* 新增地图基类实现
* 临时提交
* 迁移坐标计算
* 加载分层特征数据
* 新增独立地图 层岩巨渊,渊下宫,旧日之海
* 支持不切分特征点匹配
* 添加远古圣山,修改地图参数
* 提瓦特大陆的大地图匹配
* 提瓦特大陆地图大地图位置获取使用256级别的地图
* 替换大地图匹配类 BigMap.cs
* 替换小地图匹配类 EntireMap
* 修改tp的入参方式,删除无用类
* 兼容新提交的内容
* 修复类方法覆盖不生效的问题
* 修复定位问题,迁移部分 MapCoordinate 的代码。MapCoordinate 标记为废弃
* 更多坐标方法的迁移
* 修复不正确的坐标转换
* 是用正确的特征匹配
* 体积较小的地图动态生成特征
* 路径追踪窗体支持多地图
* 传送时切换独立地图地区
* 更新传送点信息
* 修改独立地图相关命名,使用 Scene(场景) 命名,和原神内部命名保持一致
* 录制支持多独立地图
* 修复地区切换失败的问题
2025-05-03 21:59:37 +08:00
辉鸭蛋
02dfd67fa0
新的特征点转换
2025-04-26 20:17:44 +08:00
FishmanTheMurloc
fce70c0e96
分解5星圣遗物 ( #1383 )
...
* 分解圣遗物基础设施建设
* 分解圣遗物独立任务基本功能完成:单独的启动按钮,正则表达式逐一筛选;代码文件整理到单独的文件夹
* 自动分解5星圣遗物功能初步完成
* 修复上次修改快速分解产生的问题,主要点击分解按钮时的bug,还有与五星分解步骤衔接的问题
* 针对切换队伍时,多语言识别效果不佳的情况,将用户设定的队伍名作为正则表达式进行模糊匹配,并在LogInfo输出相关提示;传送任务对任务取消进行单独的异常处理
* 一个便于测试分解圣遗物OCR识别和正则匹配结果的弹窗
2025-04-05 19:53:52 +08:00
Takaranoao
cbaf1f6c36
更新OpenCvSharp4版本到4.10.0,PaddleOCR到2.7.0.3,尝试修复bitblt导致崩溃的问题 ( #1381 )
2025-04-01 14:47:13 +08:00
FishmanTheMurloc
8f8aad4130
分解圣遗物支持多语言,顺便修了一下5.5版本快速选择筛选星级逻辑 ( #1369 )
2025-03-30 16:23:08 +08:00
FishmanTheMurloc
40cd76fbdc
Feat/multi lan ( #1364 )
...
* 多语言下拉框挪到其他设置下
* 使用正经的Fixture写法,杜绝并行测试时paddle崩溃的问题
* 适配不同主城的合成台的不同法语名
* 修正语言资源的正则表达式,好久没用了写错了好多;为AutoDomainTask新增的“地脉异常”、“点击任意位置关闭”添加多语言适配
2025-03-29 12:54:27 +08:00