FGA 贡献指南:从图像识别原理到 1440p 坐标体系的开发实战

发布时间:2026/10/3 8:24:31
FGA 贡献指南:从图像识别原理到 1440p 坐标体系的开发实战
移动开发GUI 自动化计算机视觉【免费下载链接】FGAAuto-battle app for F/GO Android项目地址https://gitcode.com/gh_mirrors/fg/FGA点击查看免费下载导读本文以 FGAFate Grand AutomataF/GO Android 自动战斗应用的 CONTRIBUTING.md 为核心面向希望参与 FGA 源码开发的 Kotlin/Android 开发者系统讲解两大核心技术主题FGA 的图像匹配流水线截图如何被缩放、裁剪并交给 OpenCV 匹配与FGA 的 1440p 坐标体系Location/Region 坐标如何定义、换算与使用。读完本文你将掌握如何准备开发环境与版本号调试技巧、新增脚本图片的 720p 规格要求、使用 Photopea 提取坐标的完整工作流、以及xFromCenter()/xFromRight()等坐标辅助方法的底层实现原理。全文以仓库实际源码为佐证读者可对照 libautomata 与 scripts 模块深入验证。一、开发环境与项目结构1.1 前置要求与工具链根据 CONTRIBUTING.md 的说明参与 FGA 开发需要具备Kotlin 与 Android 开发基础并准备以下工具Android Studio官方推荐的 IDE用于打开工程、编译与调试可用的模拟器或 Android 真机用于验证脚本改动若对 Kotlin/Android 尚不熟悉官方建议先学习 Kotlin 入门 与 Android Kotlin 基础课程。1.2 环境准备步骤官方建议的起步流程为Fork 仓库并克隆到本地用 Android Studio 打开工程按 issue 名称创建并切换新分支规范做法是执行git checkout -b issue-name调试前修正versionCode将其设置为当前设备上已安装 FGA 版本的版本号。默认值为 1而 Android 不允许安装比现有版本更旧的 APK因此这一步骤可以避免调试时出现降级安装失败的问题。该字段位于 app/build.gradle 中。1.3 四大模块结构从仓库目录结构看FGA 被拆分为四个核心模块目录职责app/应用中的 Android 部分承载 UI、MediaProjection、AccessibilityService 及其它工具类libautomata/编写脚本所需的方法库方法实现采用依赖注入dependency-injected例如 ImageMatcher、Location 等prefs/用户偏好设置的实现scripts/应用功能的脚本本体如 AutoBattle、AutoLottery 等坐标定义集中在 scripts/.../locations 目录下。其中libautomata是理解本文两大主题的关键模块图像匹配与坐标换算的底层能力都定义在这里而scripts模块则基于这些能力编写具体功能。二、FGA 如何搜索图片图像匹配流水线2.1 六步匹配流程CONTRIBUTING.md 详细描述了 FGA 截图后的匹配步骤截图以设备原始分辨率截取屏幕灰度化并缩放到 720p将截图转为灰度图并缩放到 720p裁剪到游戏区域去除平板设备的蓝色边条blue bars或自定义游戏区域模式下的黑色边条black bars进一步裁剪到搜索区域将截图裁剪到本次搜索指定的 Region目标图片灰度化若待搜索的图片是彩色的会先转为灰度图OpenCV 匹配在裁剪后的截图中搜索目标图片默认最小相似度为80%该阈值可在Fine-Tune微调设置中修改。关于相似度阈值官方文档特别提醒Region.exists(image)中的手动相似度值在大多数情况下应当避免使用任何低于 65% 的相似度都意味着图片与屏幕并不匹配此时应优先检查模板图本身。2.2 源码层的印证上述流程可以在 ImageMatcher.kt 的exists()/findAll()实现中找到对应物exists()通过checkConditionLoop轮询条件直到匹配成功或超时默认扫描间隔约 330ms见scanIntervalfindAll()先取截图screenshotManager.getScreenshot().crop(transform.toImage(region))即以Image 坐标720p裁剪 Region然后调用findMatches(pattern, similarity ?: platformImpl.prefs.minSimilarity)——这里的minSimilarity正是 Fine-Tune 设置中可调的默认 80% 相似度与文档所述一致匹配结果再经transform.fromImage(...)反变换回脚本坐标并叠加 Region 的左上角位置还原为屏幕上的绝对坐标。2.3 为什么新增图片必须 720p由于第 2 步会将截图统一缩放到 720p任何新增到 FGA 的图片都必须以 720p 规格制作否则匹配模板与实际截图存在分辨率差会直接导致匹配失败或相似度下降。这一点在后续坐标提取工作流中见第三节会再次用到。三、FGA 如何处理 Location/Region 坐标1440p 坐标系3.1 坐标体系总览为了更高的精度FGA 采用1440p 坐标进行脚本定位而图像检测使用 720p。关键规则如下Location(x0, y0)位于第二节匹配流程第 3 步裁剪后游戏区域的左上角y1440对应屏幕底部x 轴右边界取决于设备屏幕比例16:9 屏幕1280x720 或 1920x1080右下角坐标为(2560, 1440)18:9 屏幕2560x1080右下角坐标为(3413, 1440)计算方式为2560 / 1080 * 1440。3.2 坐标辅助方法Location与Region提供了两个常用辅助方法xFromCenter()将x0视作屏幕游戏区域水平中心xFromRight()将x0视作屏幕游戏区域右边缘。类似的 y 轴方法也存在但在功能脚本中很少使用。这些方法的定义位于 IScriptAreaTransforms.kt 接口其实现见 ScriptAreaTransforms.ktoverride fun Location.xFromCenter() this Location(scriptArea.center.x, 0) override fun Location.xFromRight() this Location(scriptArea.right, 0)可以看到xFromCenter()实际是以脚本区域中心点 x 坐标为基准做偏移xFromRight()则是以脚本区域右边界 x 坐标为基准做偏移。scriptArea由 Scale.kt 与 GameAreaManager.kt 协作计算GameAreaManager保存脚本尺寸默认为 1440p与图片尺寸默认为 720pScriptAreaTransforms通过scriptToScreen比例把游戏区域换算成脚本坐标区域。3.3 实战中的坐标示例在 Locations.kt 中随处可见这种用法例如val continueRegion Region(120, 1000, 800, 300).xFromCenter() val menuSelectQuestClick (if (isWide) Location(-460, 440) else Location(-270, 440)) .xFromRight() val menuStartQuestClick (if (isWide) Location(-350, -160) else Location(-160, -90)) .xFromRight() .yFromBottom()continueRegion表示从屏幕中心向右 120px 起、宽 800 高 300 的区域menuSelectQuestClick依据设备宽窄isWide选择不同偏移再从屏幕右边缘向左定位menuStartQuestClick同时叠加了xFromRight()与yFromBottom()即从右下角方向定位。从这些代码可以推断坐标值不写死为某一台设备的绝对像素而是通过isWide分支与中心/边缘锚点适配多种屏幕比例这正是 1440p 坐标系的价值所在。Location与Region还内置了常用的运算符与属性见 Location.kt 与 Region.ktLocation支持times(scale)缩放、plus/minus偏移并实现了按 y 优先、x 其次的compareToRegion支持times(scale)、plus/minus(Location)并提供center、right、bottom等属性及clip()、contains()方法构造时还要求width、height必须为正数require校验。四、如何确定新坐标Photopea 实操工作流CONTRIBUTING.md 给出了确定新坐标的完整步骤以下假设使用免费在线编辑器 PhotopeaPhotoshop 亦可截图截取你想要处理的界面打开图片在 Photopea 中打开截图开启标尺选择View - Rulers显示侧边标尺便于裁剪与测量去除黑/蓝边条若存在黑边或蓝边先将其裁掉。建议放大到 350% 以上操作按住鼠标左键从左侧标尺拖出蓝色参考线同时按住 Shift 键可保证参考线落在整数像素位置将参考线对准黑/蓝边的边缘。若左右两侧都有边条则会得到左右两条参考线缩小视图后用选区工具左侧虚线矩形按钮或按 M 键从左侧参考线顶部拖到右侧参考线底部然后通过顶部Image菜单选择Crop完成裁剪缩放到 720p选择Image - Image Size在 Height 字段输入 720 并确认图片即被缩放为 720p。注意虽然 FGA 坐标以 1440p 度量但这里用 720p 是为了后续提取新图片测量坐标确保 Move 工具被选中左上角鼠标光标按钮或按 V 键。从左侧标尺拖出垂直参考线、从顶部标尺拖出水平参考线工具提示会显示参考线的 X/Y 位置将这些数值记录下来若需复核再次拖拽参考线即可720p 转 1440p将记录的 X/Y 数值乘以 2。例如x650换算为x1300针对居中元素修正大多数 FGO 按钮和窗口都贴在屏幕中心。例如确认支持列表更新的按钮始终位于屏幕中心右侧 100 像素处1440p 下为 200 像素。此时需要从 X 位置减去 640即图片宽度的一半1280 / 2若 X 位于屏幕左侧修正后会变为负数。随后使用Location.xFromCenter()与Region.xFromCenter()将这种相对中心的坐标告知 FGA。这一步与 ScriptAreaTransforms.kt 的实现完全对应xFromCenter()把负值/正值解释为相对scriptArea.center.x的偏移因此中心右侧 200px即可写作Location(200, y).xFromCenter()或Region(200, y, w, h).xFromCenter()与示例中continueBoostClick Location(-20, 1120).xFromCenter()中心左侧 20px的写法一致。五、如何在 Android Studio 中使用第三方模拟器Bluestacks/Nox/Memu官方文档补充了在 Android Studio 中接入第三方模拟器的方法安装 ADB 工具使用自定义模拟器必须依赖 ADBAndroid Debug Bridge开启 USB 调试在模拟器中启用 USB 调试ADB 连接在 ADB 工具所在目录打开终端/命令行执行adb connect localhost:####其中####是模拟器指定的默认端口例如Bluestacks 使用localhost:5555。连接成功后该模拟器即可作为调试目标出现在 Android Studio 中与真机调试流程一致。六、贡献流程要点小结综合 CONTRIBUTING.md 与源码参与 FGA 开发的核心要点可以归纳为分支规范按 issue 命名创建分支git checkout -b issue-name工作集中在单一分支上调试版本把versionCode设为设备上已安装的 FGA 版本号避免 Android 降级安装限制导致调试失败图片规格新增模板图片统一 720p与匹配流水线第 2 步保持一致坐标规范以 1440p 坐标编写脚本优先使用xFromCenter()/xFromRight()这类锚点方法而不是写死绝对坐标以兼容不同屏幕比例相似度纪律默认相似度 80%避免在Region.exists(image)中手动传低于 65% 的相似度值可验证依据图像匹配的默认相似度与轮询逻辑见 ImageMatcher.kt坐标换算见 ScriptAreaTransforms.kt坐标用例见 Locations.kt。翻译类贡献则无需改动源码直接前往 POEditor 对应项目添加或编辑翻译即可官方在 CONTRIBUTING.md 中提供了加入链接。通过以上规范开发者可以高效、稳定地向 FGA 提交高质量的脚本、坐标与模板图改动。赞分享移动开发GUI 自动化计算机视觉【免费下载链接】FGAAuto-battle app for F/GO Android项目地址https://gitcode.com/gh_mirrors/fg/FGA点击查看免费下载相关推荐FGA图像识别技术深度解析从原理到实战的完整指南FGA图像识别技术深度解析从原理到实战的完整指南 还在为手动刷素材而烦恼吗每天重复点击相同的技能按钮手指都快麻木了FGA的图像识别技术正是为了解决这一痛移动开发GUI 自动化计算机视觉最完整的Slicer医学影像坐标系解析从原理到实战转换最完整的Slicer医学影像坐标系解析从原理到实战转换 你还在为医学影像坐标转换头疼吗一文解决Slicer中LPS/RAS/IJK混乱难题 医学影像处理中最医疗健康图像处理数据可视化桌面应用3D渲染OctoPrint耗材管理实战指南构建智能3D打印物料跟踪系统OctoPrint耗材管理实战指南构建智能3D打印物料跟踪系统 OctoPrint作为业界领先的3D打印机Web控制界面不仅提供远程打印控制功能更通过其强物联网后端上一篇企业级MySQL数据库表结构自动同步多数据库配置与Shell脚本调度终极指南下一篇BlobFuse2 vs BlobFuse v1为什么2026年前必须完成迁移关键差异对比创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考