化工具 MAA:圖像識(shí)別是怎么認(rèn)出游戲界面的)
扒一扒明日方舟自動(dòng)化工具 MAA圖像識(shí)別是怎么認(rèn)出游戲界面的【免費(fèi)下載鏈接】MaaAssistantArknights《明日方舟》小助手全日常一鍵長(zhǎng)草| A one-click tool for the daily tasks of Arknights, supporting all clients.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights每天早上的日常——喚醒、自動(dòng)公招、基建換班、掃蕩作戰(zhàn)、領(lǐng)郵件手動(dòng)做完至少要四十分鐘。MaaAssistantArknights下稱 MAA是一款明日方舟自動(dòng)化工具把這四十分鐘壓縮成一次點(diǎn)擊它定時(shí)截取游戲畫面認(rèn)出當(dāng)前停在哪個(gè)界面再點(diǎn)對(duì)應(yīng)的位置。這篇文章把源碼翻了一遍重點(diǎn)講清楚這類工具的兩個(gè)核心問(wèn)題它怎么看懂屏幕又怎么把看懂的結(jié)果變成一次真實(shí)的點(diǎn)擊。 MAA 怎么跑起來(lái)從 clone 到一鍵長(zhǎng)草想最快看到效果走命令行這條線最直接。克隆倉(cāng)庫(kù)git clone https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights構(gòu)建用 CMake Presets 管理Windows 下直接選 Visual Studio 預(yù)設(shè)Linux 下是 Ninja。裝好之后整個(gè)工作流就幾條命令maa install安裝 MaaCore 核心和資源包maa init交互式填寫模擬器地址和客戶端類型然后maa startup把游戲拉進(jìn)主界面maa fight 1-7自動(dòng)打完指定關(guān)卡。第一遍跑完終端里會(huì)刷出一串識(shí)別日志模擬器上的角色自己點(diǎn)完了所有按鈕——這就是后面要拆的那套東西在干活。本節(jié)就當(dāng)一份極簡(jiǎn)的 MAA 使用教程GUI 版本的流程與之等價(jià)連上模擬器勾選要跑的日常點(diǎn)開始。這張圖是 MAA 的主界面左側(cè)是任務(wù)鏈勾選喚醒、公招、換班、理智作戰(zhàn)……中間是候選關(guān)卡和資源閾值設(shè)置右側(cè)日志里每一行都是一次公招 OCR 的結(jié)果。日志值得多看一眼公招識(shí)別結(jié)果近衛(wèi)干員 醫(yī)療干員 近戰(zhàn)位 治療 群攻——這是從像素里逐字讀出來(lái)的不是游戲把數(shù)據(jù)遞給程序的。? 機(jī)制拆解一張截圖走完看圖、定位、點(diǎn)擊MAA 的主循環(huán)樸素得幾乎有點(diǎn)反高潮截一張圖判斷現(xiàn)在是什么界面是預(yù)期界面就點(diǎn)不是就等一會(huì)兒再截。所有學(xué)問(wèn)都在第二步里。輸入是一張截圖。處理這一層的是 Vision 模塊里的一組識(shí)別器每個(gè)負(fù)責(zé)回答一類問(wèn)題Matcher做模板匹配拿預(yù)制的開始行動(dòng)按鈕小圖在截圖上逐像素滑動(dòng)比對(duì)命中就給出中心坐標(biāo)OCRer跑一個(gè) ONNX 模型微軟開源的推理運(yùn)行時(shí)加載訓(xùn)練好的神經(jīng)網(wǎng)絡(luò)做推理識(shí)別文字讀出關(guān)卡編號(hào)、倉(cāng)庫(kù)里的材料數(shù)量FeatureMatcher用特征點(diǎn)匹配在模板容易失手的復(fù)雜場(chǎng)景里補(bǔ)位。輸出統(tǒng)一收斂成語(yǔ)義信息 坐標(biāo)交給任務(wù)層消費(fèi)。這套流程就是游戲圖像識(shí)別自動(dòng)化的標(biāo)準(zhǔn)打法不關(guān)心游戲內(nèi)部是什么只關(guān)心屏幕上出現(xiàn)了什么。官方文檔里的模板匹配示例只要開始行動(dòng)按鈕出現(xiàn)在畫面里無(wú)論皮膚配色怎么變模板都能匹配上——這是 MAA 識(shí)別能力的底層依據(jù)。任務(wù)層的每個(gè)任務(wù)繼承自AbstractTaskrun()方法本質(zhì)是個(gè)帶重試的循環(huán)_run()失敗就睡task_delay再試實(shí)在不行交給on_run_fails()決定是回主界面恢復(fù)還是放棄報(bào)錯(cuò)。單個(gè)任務(wù)又能拆成若干插件靠register_plugin()把選干員點(diǎn)確認(rèn)彈窗這類小動(dòng)作掛進(jìn)去。關(guān)鍵在于任務(wù)鏈的編排順序和每個(gè)任務(wù)的參數(shù)全部來(lái)自 JSON 配置而不是代碼——游戲版本更新改了界面時(shí)典型修法是換掉資源包里的某張小圖或改一條配置核心不用重新編譯。工程取舍C、圖像識(shí)別和三層 Controller從目錄結(jié)構(gòu)就能看出 MAA 是一個(gè)核心、多個(gè)殼C20 寫的 MaaCore 干所有實(shí)事上面套 WPF GUIWindows、macOS GUI、命令行外加一排語(yǔ)言綁定。有三個(gè)取舍值得掰扯。為什么是 C 而不是 Python。游戲自動(dòng)化工具每秒都在處理圖像解碼、匹配、模型推理Python 的 GIL 和內(nèi)存模型扛不住多實(shí)例長(zhǎng)跑更實(shí)際的是C 能編譯成單一核心庫(kù)Python、Java、Rust、Go、Dart 的綁定都只是對(duì) C 接口的封裝。如果核心用 Python 寫Dart 里那套完整的 Flutter 嵌入方案基本不成立。為什么走圖像識(shí)別而不是讀內(nèi)存或注入。讀內(nèi)存快且準(zhǔn)但游戲反作弊直接能檢測(cè)而且官服、B 服、Yostar 海外服各家的內(nèi)存布局都不同。圖像識(shí)別把游戲當(dāng)純黑盒程序只做看屏幕和點(diǎn)按鈕兩件事操作路徑跟人一模一樣一套代碼跨所有客戶端通吃。代價(jià)是脆弱——UI 一改、彈窗一擋、DPI 一縮放都可能失手所以上面那套重試循環(huán)和資源熱更新機(jī)制才必須存在。為什么 Controller 單獨(dú)抽一層。點(diǎn)擊坐標(biāo) (x, y) 有三種實(shí)現(xiàn)AdbController走 ADB 通道連模擬器和真機(jī)Win32Controller操作本地窗口MinitouchController用注入式觸摸驅(qū)動(dòng)。任務(wù)代碼不關(guān)心底下是哪一種換設(shè)備只改一個(gè)連接參數(shù)。二次開發(fā)與集成路徑想基于 MAA 做點(diǎn)自己的東西入口有三類。新任務(wù)繼承AbstractTaskPlugin再注冊(cè)進(jìn)任務(wù)任務(wù)鏈編排由 JSON 定義插件機(jī)制看 src/MaaCore/Task/配置格式參考 docs/maa_tasks_schema.json語(yǔ)言集成C 接口在 include/MaaCore.hsrc/下的 Python、Java、Rust、Golang、Dart 綁定全是它的薄封裝識(shí)別與控制擴(kuò)展新識(shí)別器加在 src/MaaCore/Vision/新控制后端加在 src/MaaCore/Controller/另外src/Golang/里帶了一個(gè) HTTP 服務(wù)把 MAA 掛到無(wú)頭服務(wù)器上、用 REST 請(qǐng)求觸發(fā)日常是社區(qū)搭定時(shí)任務(wù)最常見的姿勢(shì)。局限與適用邊界說(shuō)實(shí)話MAA 只服務(wù)明日方舟這一個(gè)游戲想換到別的游戲模板圖和任務(wù)配置要全部重做基本等于重做半個(gè)項(xiàng)目。游戲大改 UI 的過(guò)渡期識(shí)別會(huì)失效得等資源包更新或者自己動(dòng)手補(bǔ)模板。還有合規(guī)和賬號(hào)風(fēng)險(xiǎn)問(wèn)題圖像識(shí)別雖然非侵入但非侵入不等于零風(fēng)險(xiǎn)用之前自己掂量。結(jié)語(yǔ)想做自己游戲自動(dòng)化的重點(diǎn)看 Vision 加 Controller 的分層這套識(shí)別器與設(shè)備后端解耦的拆法可以直接搬走想學(xué)帶重試和插件機(jī)制的狀態(tài)機(jī)怎么設(shè)計(jì)的把AbstractTask.cpp通讀一遍篇幅不長(zhǎng)但每個(gè)分支都有講究只想躺平的裝個(gè) release 版本點(diǎn)下開始每天省下的四十分鐘就是凈賺。【免費(fèi)下載鏈接】MaaAssistantArknights《明日方舟》小助手全日常一鍵長(zhǎng)草| A one-click tool for the daily tasks of Arknights, supporting all clients.項(xiàng)目地址: https://gitcode.com/GitHub_Trending/ma/MaaAssistantArknights創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考