Better Genshin Impact项目中卡维邀约事件的文本修正分析
引言:自动化邀约系统的技术挑战
在原神(Genshin Impact)这款开放世界角色扮演游戏中,邀约事件(Hangout Event)是玩家与特定角色互动的重要方式。Better Genshin Impact项目作为一个自动化辅助工具,面临着准确识别和处理邀约选项的技术挑战。本文将以卡维(Kaveh)角色的邀约事件为例,深入分析项目中文本识别与修正的技术实现。
卡维邀约事件的技术架构
邀约配置系统的核心设计
Better Genshin Impact项目采用JSON配置文件来管理所有角色的邀约选项,具体实现位于 GameTask/AutoSkip/Assets/hangout.json 文件中。卡维角色的邀约配置如下:
"卡维结局1:未来蓝图": [
"一起去说服刚刚的委托人吧",
"尝试一下新的风格"
],
"卡维结局2:契约达成": [
"一起去说服刚刚的委托人吧",
"可以找其他商人筹款"
],
"卡维结局3:闲时小聚": [
"做些别的事转换心情",
"卡维为什么当设计师呢",
"去找熟人问问"
],
"卡维结局4:群星之下": [
"做些别的事转换心情",
"卡维为什么当设计师呢",
"还是先别管这个了"
],
"卡维结局5:第1堂课": [
"做些别的事转换心情",
"找份其他工作赚钱"
]
文本识别技术栈
项目采用多模态技术方案进行文本识别:
| 技术组件 | 功能描述 | 应用场景 |
|---|---|---|
| PaddleOCR | 光学字符识别引擎 | 选项文字提取 |
| OpenCV | 图像处理库 | 区域检测与预处理 |
| 模板匹配 | 图标识别 | 选项框定位 |
| 颜色识别 | 特殊文字检测 | 橙色优先级选项 |
文本修正的关键技术实现
1. 区域定位算法
// 选项文字区域计算算法
Rect r = default;
var captureArea = TaskContext.Instance().SystemInfo.ScaleMax1080PCaptureRect;
var assetScale = TaskContext.Instance().SystemInfo.AssetScale;
if (IconRect.Left > captureArea.Width / 2) {
// 右边的选项
r = new Rect(IconRect.Right, IconRect.Top - IconRect.Height * 2 / 3,
captureArea.Width - IconRect.Right - (int)(10 * assetScale),
IconRect.Height + IconRect.Height * 4 / 3);
} else if (IconRect.Right < captureArea.Width / 2) {
// 左边的选项
r = new Rect((int)(10 * assetScale), IconRect.Top - IconRect.Height * 2 / 3,
IconRect.Left - (int)(10 * assetScale),
IconRect.Height + IconRect.Height * 4 / 3);
}
2. 文本匹配与修正流程
3. 多语言支持与编码处理
项目采用统一的文本处理工具类:
// 文本预处理工具方法
public static string RemoveAllEnter(string text) {
return text.Replace("\r", "").Replace("\n", "");
}
// OCR识别结果处理
var text = OcrFactory.Paddle.Ocr(hangoutOption.TextRect!.SrcMat);
hangoutOption.OptionTextSrc = StringUtils.RemoveAllEnter(text);
卡维邀约的具体修正案例
分支选项的关键词匹配策略
卡维邀约包含5个不同结局,每个结局对应特定的对话选项组合。系统通过精确的关键词匹配来实现自动化选择:
| 结局名称 | 关键词组合 | 选择逻辑 |
|---|---|---|
| 未来蓝图 | "说服委托人" + "新风格" | 建筑设计师路线 |
| 契约达成 | "说服委托人" + "其他商人" | 商业合作路线 |
| 闲时小聚 | "转换心情" + "设计师原因" + "找熟人" | 社交互动路线 |
| 群星之下 | "转换心情" + "设计师原因" + "不管了" | 浪漫结局路线 |
| 第1堂课 | "转换心情" + "其他工作" | 职业转变路线 |
文本相似度处理技术
为了解决OCR识别可能出现的误差,项目实现了智能匹配算法:
// 关键词模糊匹配实现
foreach (var hangoutOption in hangoutOptionList) {
foreach (var str in chooseList) {
if (hangoutOption.OptionTextSrc.Contains(str)) {
// 执行选择逻辑
HangoutOptionClick(hangoutOption);
_logger.LogInformation("邀约分支[{Text}]关键词[{Str}]命中",
_config.AutoHangoutEndChoose, str);
return;
}
}
}
技术优化与性能考量
1. 识别准确率提升策略
- 区域自适应计算:根据屏幕分辨率和UI缩放比例动态调整识别区域
- 多帧验证机制:对关键选项进行多次识别以确保准确性
- 错误处理机制:当识别到异常位置选项时记录日志并跳过
2. 性能优化措施
// 邀约选项选择频率控制
if ((DateTime.Now - _prevHangoutExecute).TotalMilliseconds < 1200) {
return; // 避免频繁执行
}
_prevHangoutExecute = DateTime.Now;
3. 用户体验优化
- 可配置延迟:用户可设置选择选项前的等待时间
- 背景运行支持:游戏最小化时仍可执行自动化
- 详细日志记录:所有操作都有完整的日志追踪
技术挑战与解决方案
挑战1:多分辨率适配
问题:不同设备和分辨率下UI元素位置变化 解决方案:基于相对坐标和缩放系数的动态计算
挑战2:文本识别误差
问题:OCR识别可能存在字符错误 解决方案:关键词模糊匹配和多次验证机制
挑战3:实时性要求
问题:游戏画面变化快速,需要实时响应 解决方案:高效的图像处理算法和频率控制
总结与展望
Better Genshin Impact项目在卡维邀约事件的文本处理上展现了成熟的技术方案:
- 配置驱动设计:通过JSON文件管理所有邀约选项,便于维护和扩展
- 多技术融合:结合OCR、图像处理和模板匹配等多种技术
- 智能匹配算法:支持关键词模糊匹配,提高识别容错率
- 性能优化:合理的频率控制和资源管理确保流畅运行
未来可进一步优化的方向包括:
- 深度学习模型的应用提高文本识别准确率
- 多语言支持的扩展
- 更智能的选项预测算法
通过持续的技术迭代,Better Genshin Impact项目为游戏自动化领域提供了有价值的实践经验和技术参考。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



