MaaEnd IconRecognition基于C与ONNX的物品图标识别实现原理【免费下载链接】MaaEndMaaEnd 终末地小助手基于视觉 AI 的「明日方舟终末地」自动化工具项目地址: https://gitcode.com/gh_mirrors/maa/MaaEndMaaEnd 是一款基于视觉 AI 的《明日方舟终末地》自动化工具其中IconRecognition 物品图标识别组件负责在游戏中看懂背包、仓库、交易台等界面上的每一个物品给定一块屏幕区域它就能返回物品 ID、格子和置信度分数。本文带你拆解这个 C 核心模块的四步识别流水线、它如何与 ONNX 模型分工协作以及从哪些文件开始阅读源码最合适。IconRecognition 是什么只做认物品一件事IconRecognition是 MaaEnd 的 C Custom Recognition 组件对外只暴露一个recognizeAPI。调用方做两件事告诉它当前是什么界面grid_type如transfer背包/仓库、trade交易台、rewards奖励卡片等给它一块 Maa ROI1280x720 基准下的[x, y, w, h]区域。它则返回每个命中格子的物品 ID、坐标和匹配分数。需要强调的是它只负责定位与分类不负责进入界面、点击物品或流程跳转——那些由 Pipeline 或业务 Service 控制。这种识别与操作解耦是整个 MaaEnd 自动化的架构前提也让识别组件可以独立测试、独立迭代。组件入口在 agent/cpp-algo/source/IconRecognition/模块说明见 README.md。运行时它只读取三份公开资源物品目录recognition_items.json近 9000 行记录每个item_id的名称、分类、稀有度和图标资源图标资源assets/resource/image/IconRecognition/rarity/*.png按稀有度分组的物品图标多语言文案assets/locales/interface/*.json。识别流水线四步找格子 → 校颜色 → 配图标 → 滤结果抛开实现细节IconRecognition只做四件事详见 识别算法文档步骤做什么核心类1. 格子定位在 ROI 内找出全部物品格子GridDetector、GridProfiles、RegularLattice2. 颜色条校正用稀有度颜色条修正格子相位RarityClassifier、TrustedRarity3. 图标匹配逐格与候选模板做结构颜色匹配CandidateSelector、IconMatcher、SubpixelMatcher4. 结果过滤按阈值、纹理、排序去重后返回ForegroundTexture、ItemMatchLess第一步如何在屏幕上找到物品网格游戏界面里的物品是一格格排好的但分辨率、缩放、界面元素都会变化所以不能硬编码坐标。GridDetector的做法是结构候选从格框边缘和明暗差中找出可能的网格区域GridFeatures、GridGeometry、GridAnchors协作颜色条证据背包类界面格子底部有一条代表稀有度的窄色条只有同时满足宽度、厚度、连续性、背景对比和双边缘约束的窄条才被视为可靠的位置证据RarityClassifier.cpp规则网格拟合把离散的横纵观测拟合成一套统一的起点间距规则网格RegularLattice.cpp再由同一套浮点网格一次性投影出所有格子坐标避免逐格累加把取整误差传播下去双路对比颜色条候选与结构候选互相验证证据不足时保留保守的结构候选回退路径。此外组件内置 Win32 与 ADB 两套 1280x720 控制器的网格 profile见 grid-profiles.mdADB 放大画面会先临时归一化到标准 720p 逻辑密度再运行同一套算法最后把坐标映射回原图——调用方无需关心设备差异。第二步稀有度颜色条的先验价值识别背包物品时稀有度颜色条不只是装饰。在逐格匹配前RarityCandidates会先用颜色条把候选模板缩小到同稀有度集合首轮只比对同稀有度模板没达标再扩大到全候选。候选集小了匹配就更快、更稳——这是典型的用廉价先验换昂贵计算的工程取舍。第三步模板匹配 Lab 颜色空间 亚像素细化每个格子的图标匹配发生在输入原图上IconMatcher.cpp模板直接从 128px 原始图标资源缩放到当前格子尺寸同时考虑两路信号结构相似OpenCV 模板匹配得分颜色相似在 Lab 色彩空间中比较亮度与颜色分量——Lab 把明暗和颜色拆开比直接比 RGB 更能抵抗光照和背景差异。两路分数合并后若分数值得再看但还没达标SubpixelMatcher会在像素级再搜索更细的位置偏移SubpixelMatcher.h。还有两个很有工程味的细节低纹理拒绝ForegroundTexture会拒绝几乎空白、纹理方差不足的格子防止把空格或纯色块硬认成某物品遮挡恢复当最高候选的残差集中在格子上下边缘时EdgeOcclusion判定图标被工具栏等元素遮挡把实测遮挡带从匹配遮罩中清零后重新排名且只有恢复结果保持原最高候选不变、达到阈值时才采纳。第四步阈值、排序与去重只有最终分数达到请求阈值默认 0.85、且未被低纹理检查拒绝的结果才进入公开matches。结果先按分数降序同分再按格子 y、x 和物品 ID 比较ItemMatchLess开启去重后每个item_id只保留得分最高的格子。值得注意的是识别完成但没有命中对外返回no_match是正常结果而非异常只有网格定位完全失败才返回exception。请求与结果的完整类型定义见 IconRecognitionTypes.h。ONNX 与模板匹配MaaEnd 的双引擎分工一个常见的疑问MaaEnd 是视觉 AI工具为什么 IconRecognition 不用神经网络答案在于分工。MaaEnd 的 ONNX 推理集中在 MapLocator 模块YoloPredictor.h 和 CameraOrientationPredictor.h 引入onnxruntime_cxx_api.h运行时加载cls.onnx、preprocess.onnx、polar_with_ref.onnx等模型见 MapLocateAction.cpp由 CMakeLists.txt 统一链接ONNXRuntime用神经网络解决开放场景的地图定位这类没有固定答案的问题。而 IconRecognition 面对的是闭集识别物品图标是已知、可枚举的目录里有多少物品就有多少模板所以它选择了确定性视觉算法——模板匹配 颜色空间比较 几何拟合。这套方案的优势很直接无需训练数据新物品只要把图标和资源目录同步进来就能识别分数可复现同一张截图每次匹配结果一致便于回归测试界面适配可控每个grid_type都有明确的 profile 和遮罩策略行为边界清晰。一句话总结神经网络负责开放世界的看懂确定性算法负责已知物品集的认准两者通过同一个 C 算法核心协作构成 MaaEnd 的视觉 AI 底座。配套工具链与推荐阅读路径图标识别能稳定工作离不开一条数据先行的资源流水线tools/icon_recognition/ 下的download.py、catalog.py、publish.py负责图标素材的下载、目录生成与发布校验item_transfer/则处理同图标组物品的映射生成确保recognition_items.json与游戏素材保持同步。如果你想继续深入建议按这条路径阅读外部契约参数、参考 ROI、返回值IconRecognition 开发者使用指南模块职责与数据流内部架构文档算法细节网格定位、匹配、遮挡恢复识别算法文档网格 profile 维护网格配置维护测试与人工审核图测试文档测试代码位于 test/编排入口IconRecognizer.cppMaaFramework 适配层见 IconRecognitionRecognition.cpp从一个格子如何被认出来到整个目录如何被维护IconRecognition 展示了视觉自动化工具最务实的一面不追求炫技的模型而是把几何先验、颜色空间和确定性匹配用到极致。理解了这个模块你就掌握了 MaaEnd 大部分业务任务自动囤货、背包收纳、交易识别背后共同的识别基础。【免费下载链接】MaaEndMaaEnd 终末地小助手基于视觉 AI 的「明日方舟终末地」自动化工具项目地址: https://gitcode.com/gh_mirrors/maa/MaaEnd创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
汽车电子实战知识体系:故障树驱动的修车级技术指南 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 1:25:26
STM32嵌入式开发入门指南:从零基础到独立做项目的完整认知框架 STM32 这个名字,在嵌入式圈子里几乎是绕不开的。不管你是电子专业的学生、刚入行的硬件工程师,还是做了多年应用层开发想往下沉一层的软件人,迟早都会跟它打交道。我见过太多人第一次拿到 STM32 开发板时的状态:板子插上电&#x… · 2026/9/26 1:25:14
二分查找算法配 TaoToken:从边界条件到工程落地的完整实践 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 1:25:14
多核缓存一致性深度解析:从MESI到目录协议与伪共享优化 前阵子写缓存一致性第一篇的时候,我主要把视角放在“是什么”和“为什么需要”上,讲了多核处理器里数据不一致是怎么冒出来的,以及窥探协议的基本思路。结果后台收到不少留言,问得最多的几类问题:MESI状态机到底怎么转… · 2026/9/26 2:10:32
K均值聚类与Apriori应用探索中医证素数据分析 随着数据科学在医学领域的逐步渗透,如何通过大数据分析为中医诊疗提供理论支持和实践指导,成为了一个重要课题。中医证素数据作为一个复杂的多维数据集合,涵盖了大量的疾病信息和患者特征,其潜在的关联关系对于中医证型的研究和个性化治疗具有重要价值。
本文将结合K均值聚… · 2026/9/26 2:10:25
从tar.gz到实战:用Rust核心的tokenizers训练高性能BPE分词器 简介:tokenizers-0.10.2.tar.gz 是 Hugging Face 团队开源的 Rust 高性能分词器 Python 库官方源码包,面向 NLP 开发者和预训练模型使用者,解决文本切分与词表构建等基础环节的效率问题。该版本压缩包共 131 个文件,约 206KB&… · 2026/9/26 2:10:25
闽乐电热客户认可吗,市场评价好吗 当产线停在中途,人们开始认真搜索一家工厂的名字深夜的车间里,一台注塑机的模具加热圈突然失效,整条产线安静了下来。设备工程师拆下已经变形的旧件,采购人员对着屏幕上五花八门的型号反复比对——外形看着差不多,介质… · 2026/9/26 2:10:25
老机器也能装 Win11:Rufus 制作启动 U 盘的完整教程 老机器也能装 Win11:Rufus 制作启动 U 盘的完整教程 【免费下载链接】rufus The Reliable USB Formatting Utility 项目地址: https://gitcode.com/GitHub_Trending/ru/rufus
Rufus 是一款可格式化 U 盘并制作 Windows、Linux 等系统启动盘的 USB 格式化工具… · 2026/9/26 2:10:25
数据库课后习题答案别硬背:当测试用例集刷,效率翻倍 简介:万常选版《数据库原理与设计》课后习题答案资源,覆盖第2至6章及第9章,适合正在学习关系模型、数据库建模、关系数据理论与模式求精的本科生、自学者作为复习与自测材料。压缩包共7个文件,含3个doc参考答案、2个sql示例脚本、… · 2026/9/26 0:00:21
OpenClaw 替代品?Hermes Agent 踩坑实录:macOS 飞书接入 TaoToken 配置 /* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/9/26 0:00:40
向下兼容与向上兼容:接口设计中的兼容性策略与工程实践 一次版本升级事故,是很多团队绕不过去的坎。线上环境里,服务端明明已经上线了新版接口,老的移动端还在照着旧文档传参数。请求一到网关,校验直接拒绝,用户操作失败,客服群炸了锅,开发群里开始互… · 2026/9/26 0:00:46