Game AI SDK 開源釋出:基於影像的遊戲場景自動化框架
導語
2020年7月,我們探討了AI與自動化測試的關係,並向大家介紹了騰訊互動娛樂事業群TuringLab團隊出版的《AI自動化測試:技術原理、平臺搭建與工程實踐》一書。這本書將TuringLab團隊基於深度學習的自動化AI測試框架基礎的開發與應用經驗詳細的展示在讀者面前,與讀者分享了騰訊遊戲是如何將AI技術與自動化測試相結合完成測試需求的。在文章推送(超連結:https://mp.weixin.qq.com/s/vKhfddXnWZFXcQmU1734xQAI)後,不少使用者留言反饋了對書中提到的 SDK的濃厚興趣,並詢問如何下載使用。
現在,Game AI SDK開源版本正式對外發布!歡迎各位開發者下載體驗(超連結:https://wetest.qq.com/product/game_ai_sdk)。
本篇文章將用4k字左右的篇幅,向讀者們詳細介紹Game AI SDK的相關內容。同時,為了更好的瞭解使用者的使用反饋和意見,TuringLab團隊的技術大佬們建立了技術交流QQ群(群號:1095989343),歡迎大家加入。
基於影像的遊戲場景自動化框架
一、 概述
在自動化測試領域,針對遊戲場景的自動化是一個難點,目前還沒有通用的技術方案。這是由於遊戲是高度個性化的產品,不同品類遊戲玩法差異極大。每款遊戲通常都是獨立設計開發,遊戲開發商也不對外暴露統一的介面,這也意味著傳統的基於API介面進行自動化的方案在遊戲領域並不通用。此外,期待遊戲開發商對外提供統一的自動化介面,也是件不現實的事情。
為了支援遊戲場景的自動化,基於影像識別和遊戲AI等方面技術,騰訊Turing Lab開發了基於遊戲影像的AI自動化框架——Game AI SDK。整個方案不依賴遊戲開發商提供任何API介面,以遊戲影像作為輸入,以觸屏操作為輸出,類似於我們人類玩遊戲的過程。示意圖如下所示:
目前Game AI SDK已經在多個品類多款遊戲的自動化測試上進行了驗證和應用,並取得了良好的效果。一個典型的AI SDK應用示意圖如下所示:
l 左側為遊戲終端裝置,執行待自動化測試的遊戲;
l 右側為遊戲自動化框架AI SDK,根據輸入影像決策遊戲操作;
l AI Client連線了遊戲終端裝置和AI SDK,從終端裝置上實時獲取遊戲影像,並將AI SDK決策的遊戲操作轉換為觸屏操作
二、 AI SDK架構介紹
1、 技術架構
AI SDK整體技術框架如下圖所示,主要包含IO Service、Manager Center、UI自動化、遊戲場景識別、AI自動化等幾個模組。
各模組的核心功能如下:
l IO Service
負責AI SDK的輸入輸出控制,輸入為遊戲影像,輸出為點選、滑動等遊戲動操作;同時還負責AI SDK內部服務狀態的上報。
l Manager Center
從IO Service接收輸入影像,分發給UI自動化模組或AI自動化模組,並轉發UI自動化和AI自動化的遊戲動作輸出;同時也負責AI SDK服務狀態的異常監控等。
l UI自動化
通過影像識別演算法,識別遊戲影像中使用者配置的UI按鈕或彈窗,並根據使用者配置的UI操作,決策出該如何進行UI自動化流程,並最終進入遊戲場景中。
l 遊戲場景識別
根據使用者定義的場景識別配置檔案,識別遊戲場景內的遊戲元素(敵人、血條、技能狀態、數字等)。場景識別的各項遊戲元素的結果,將作為特徵資料輸入給AI自動化模組,具體需要識別哪些遊戲元素,根據AI需求自行定義。
l AI自動化
根據場景識別後得到的特徵資料,進行AI決策,輸出遊戲操作,遊戲操作通常為點選某個畫素、在某畫素區間滑動。
1、 資料流程
AI SDK自動化流程可分為遊戲UI自動化和遊戲場景自動化兩個階段,UI自動化根據使用者配置定義進入特定遊戲場景,遊戲場景自動化則在遊戲場景中進行戰鬥、駕駛、升級等各種遊戲自動化操作。兩個階段可以不斷迴圈重複,每個階段的資料流程如下:
1) 遊戲UI自動化階段
l AI Client從手機端獲取遊戲影像後,經過1、2、3步驟將影像傳送給UI自動化模組
l UI自動化模組識別UI介面中的按鈕或彈窗,決策出需要進行的UI操作,並經過4、5、6步驟將UI動作輸出至AI Client
經過若干次UI自動化操作後,遊戲從UI場景進入到遊戲場景,進入遊戲場景自動化階段。
2) 遊戲場景自動化階段
l AI Client從手機端獲取遊戲影像,經過1、2、7步驟將影像傳送給遊戲場景識別模組,並識別出遊戲場景中各項遊戲元素
l AI自動化模組經步驟8獲取到識別結果後,根據遊戲AI演算法或特定邏輯規則決策出AI動作,經9、10、11步驟將AI動作輸出至AI Client
經過一段時間的遊戲場景自動化操作,遊戲場景結束,又返回到UI自動化階段。
三、 遊戲場景自動化
由於遊戲品類比較多,從格鬥遊戲、賽車游到FPS射擊遊戲,不同遊戲場景的遊戲玩法差異極大;遊戲畫面中的元素包括敵人、道具、怪物甚至卡牌,不同遊戲畫面中需要識別的遊戲元素也存在極大差異。能夠適用於多種遊戲場景的自動化是AI SDK的核心功能,下面主要介紹AI SDK針對遊戲場景的自動化方案。
1、 遊戲場景識別
遊戲場景識別模組中提供了模板匹配、梯度模板匹配、特徵點匹配、目標檢測、深度神經網路等多種演算法,識別遊戲場景中的遊戲元素,並對外輸出影像識別結果。具體識別哪些元素,使用者可由場景識別配置檔案自行定義。在AI SDK的場景識別中,主要將遊戲中需要識別的元素分為以下幾類:
l 固定物體目標
主要採用各種模板匹配演算法檢測遊戲場景中的固定目標物,如遊戲中的按鈕、圖示、技能狀態等。該方法會返回場景中檢測到的目標物以及畫素座標。
l 形變物體目標
主要採用卷積神經網路檢測遊戲場景中的影像形狀易發生變化的目標物,如遊戲角色、建築物、車輛、怪物等。該方法會返回場景中目標物的位置及類別。
l 畫素目標
檢測出遊戲影像檢測區域內滿足特定條件的畫素點,該方法會返回符合條件的所有畫素點集合。
l 數字
該方法會返回遊戲場景中檢測區域內的數字和其所在的畫素位置等資訊。
l 血條
該方法會返回遊戲場景中檢測區域內的血量百分比和血條位置等資訊。
在實際應用中,通常我們將一個目標物和幾個同類別的目標物定義為一個task任務,一個複雜的遊戲場景可能包含幾十個需要識別的task任務。要完成一次場景識別,需要所有task任務都完成。遊戲場景識別模組的技術架構如下圖所示:
1、為了降低任務檢測的時間消耗(如果場景識別耗費太多時間,那麼場景識別之後進行的AI決策就會存在很高的時延,嚴重製約AI自動化的表現),採用了多檢測任務並行執行的方式,充分利用多核CPU資源。
2、對於採用深度網路模型進行檢測的可形變目標物,任務耗時往往比較長,會嚴重影響每一次場景識別的效能。這裡對深度網路模型進行了裁剪優化,減少卷積核數目、減少全連線層神經元個數,在保證識別準確率的情況下,儘量降低深度網路模型的效能開銷。
3、針對遊戲場景的影像特點,如遊戲影像中存在很多的“半透明”的情況。即在識別目標物的時候,會受到背景影像的嚴重干擾,如下面圖例所示。在遊戲場景中,除了前置的圖示不變外,圖示的背景會不斷髮生變化。直接使用常見的模板匹配方法檢測這些“半透明”目標物都不夠理想,針對此類問題,場景識別模組的演算法也做了專門的優化。
2、 遊戲AI自動化
遊戲AI自動化模組主要從場景識別模組得到識別結果,進行AI決策,並輸出遊戲操作(遊戲操作通常為點選、滑動某個畫素座標點或區域)。遊戲AI是一個複雜的問題,從簡單的硬編碼規則、狀態機、行為樹AI,到模仿學習、強化學習等基於深度學習的AI,再到蒙特卡洛搜尋樹AI,不同型別遊戲的AI決策往往需要不同的AI方法,或者多種AI方法來解決。為了便於擴充套件和支援不同型別遊戲的AI演算法,AI自動化模組被設計為外掛執行模式,不同的AI演算法以外掛的形式實現,並由AI自動化模組載入執行。
AI自動化模組包含兩種外掛,分別是Env外掛和AI外掛。Env外掛主要是獲取場景識別的結果,並轉化為特定的資料特徵,資料特徵可以是影像畫素值,也可以是其它型別的結構化資料,或者兩者的合集。AI外掛主要是遊戲AI演算法的實現,根據Env外掛轉化後的資料特徵,進行遊戲動作決策。Env外掛和AI外掛的執行示意圖如下:
每一次遊戲場景自動化過程中,Env外掛和AI外掛的執行過程如下:
l 進入遊戲場景時,觸發AI外掛的OnEnter介面呼叫
l Env外掛的IsStart介面根據場景識別結果,判斷遊戲場景開始執行時,觸發AI外掛的OnStart介面呼叫
l 之後進入AI主迴圈,AI外掛呼叫Env外掛的GetState介面獲取場景識別結果特徵資料,進行AI決策,輸出遊戲動作action,然後呼叫Env外掛的DoAction介面執行遊戲動作
l Env外掛的IsOver介面根據場景識別結果,判斷遊戲場景結束時,觸發AI外掛的OnOver介面呼叫
l 離開遊戲場景時,觸發AI外掛的OnLeave介面呼叫
如果需要擴充套件新的遊戲AI自動化功能,按照要求實現Env外掛和AI外掛介面即可。為了便於實現外掛,AI SDK中提供了兩組API介面,分別是Action API和Agent API。其中Action API對遊戲中常見的各種動作進行封裝,直接呼叫其中介面就可以輸出各種遊戲動作;Agent API用於獲取遊戲場景識別的各項結果,可以方便地獲取遊戲中各種目標物或按鈕、圖示狀態等資訊。值得注意的是,Env外掛和AI外掛並不是一一對應的關係,如果不同遊戲的AI演算法是一樣的,只有特徵資料的解析方式存在不一致,那麼AI外掛就可以對應不同的Env外掛。AI自動化模組的技術架構如下:
除了提供外掛系統及其執行框架外,AI SDK中還內建了強化學習、模仿學習地AI外掛和Env外掛,使用者可以直接使用,不需要做任何改動。此外還提供了常見遊戲型別的AI自動化演算法框架,其中已經實現了AI外掛和Env外掛的諸多功能。可基於這些常見遊戲型別的演算法框架,再結合自身的特殊自動化需求,實現Env外掛和AI外掛。
在實際的遊戲場景自動化中,有以下幾點需要注意:
1、 單純的一個AI演算法很難滿足實際自動化需求,往往需要在AI演算法之上附加一定的規則,如採用模仿學習AI+少量規則的方式來實現;
2、 為了在遊戲場景自動化過程中覆蓋更多的情況,可以在特定AI演算法之上附加一定的隨機性,讓AI能探索更多的場景;
3、 遊戲場景識別的結果不能達到百分之百準確無誤,針對識別結果做一些簡單的過濾或處理,能很好的提升AI自動化的魯棒性;
4、 由於所有的遊戲動作最終以模擬觸屏的方式執行,控制好遊戲動作中觸屏的時長、滑動的畫素距離都能提升我們AI的表現。
四、 應用舉例
目前AI SDK已經在競速類、賽車類、FPS類、MOBA類、MMO類等多種型別的遊戲場景中進行了自動化驗證,取得了不錯的應用效果。能夠針對多種遊戲場景進行自動化測試,且不需要遊戲端提供任何介面。一些遊戲中的應用效果視訊如下:
從執行方式上,AI SDK可在本地部署執行,進行單獨的遊戲AI自動化測試。如果要進行批量大規模自動化測試,也可以部署在雲端,提供線上遊戲AI自動化測試服務,如下圖所示:
五、 總結和展望
本文介紹了基於影像的遊戲場景自動化框架,框架的優點是不依賴遊戲端提供介面或資料,方案通用性強,可適用於絕大多數遊戲場景的自動化測試。且遊戲場景自動化外掛完成後,隨著遊戲版本的迭代更新,只要遊戲的玩法不改變,已經實現的自動化過程一般不需要做修改,自動化過程維護的成本比較低,不需要隨著遊戲內部實現的改變而修改。
同時AI SDK目前也存在一些問題,尤其在易用性方面,如何讓使用者更容易的使用是下一步要解決的問題。雖然AI SDK內建了常用遊戲AI演算法,提供了常見遊戲型別的AI自動化框架模板,可以有效的降低接入新遊戲進行遊戲場景自動化的成本,但對使用者也有一定能力要求。我們也在嘗試將一些簡單且通用性強的AI自動化過程來通過工具配置的方式讓使用者來完成,讓一些普通使用者也能夠完成一些場景的AI自動化。其次,在場景識別模組,提升目標物識別準確率,對實現AI自動化有諸多好處。而在提升識別準確率的同時降低效能開銷,也是需要持續優化的問題。
目前騰訊Turing Lab編著的關於AI SDK及其應用的書籍《AI自動化測試:技術原理、平臺構建與工程實踐》已上架可於京東進行購買(超連結:https://item.jd.com/12679219.html#noneAI)。 ADK也已經對外開源開放,歡迎各位開發者下載體驗。(超連結:https://wetest.qq.com/product/game_ai_sdk)
AI SDK 技術交流Q群|1095989343
效能測試技術交流群:720150565
檢視PerfDog詳情:https://perfdog.qq.com/?ADTAG=media.dev_website
相關文章
- Game AI SDK開源版本釋出:基於影像的遊戲場景自動化框架GAMAI遊戲框架
- facebook instant game 釋出指南-小遊戲 SDKGAM遊戲
- 【開源】釋出一個基於JavaFX的小遊戲:CrazyAlphaJava遊戲
- 基於Selenium + Python的web自動化框架PythonWeb框架
- 基於WebGL HTML5 的場景小遊戲WebHTML遊戲
- 基於DotNetty實現自動釋出 - 自動檢測程式碼變化Netty
- 基於AI的移動端自動化測試框架的設計與實踐AI框架
- 基於Redis訊息的訂閱釋出應用場景Redis
- 剛剛,華為全場景 AI 計算框架MindSpore開源!AI框架
- Java + SikuliX 基於影像實現自動化測試Java
- web自動化測試框架-03 介紹標籤,背景,場景,場景大綱Web框架
- 基於Selenium+Python的web自動化測試框架PythonWeb框架
- 一種基於 cypress 的 UI 自動化測試框架UI框架
- jenkins實踐篇(1)——基於分支的自動釋出Jenkins
- 基於DotNetty實現自動釋出 - 實現一鍵打包釋出Netty
- 生成式AI助力遊戲開發:騰訊推出3D虛擬場景自動生成解決方案AI遊戲開發3D
- 基於Python3.7 Robot Framework自動化框架搭建PythonFramework框架
- Netflix釋出用於Spring Boot的GraphQL的開源服務框架DGSSpring Boot框架
- 第 1 天|基於 AI 進行遊戲開發:5 天建立一個農場遊戲!AI遊戲開發
- 【開源】小程式、小遊戲和Web運動引擎 to2to 釋出遊戲Web
- 基於微服務SDK框架與JavaAgent技術,低成本助力應用高效釋出微服務框架Java
- 自動駕駛方程式賽車,微軟釋出機器學習開源框架 | AI一週學術自動駕駛微軟機器學習框架AI
- 利用人工智慧實現基於影像的自動化檢查人工智慧
- 基於開源IM即時通訊框架MobileIMSDK:RainbowChat v10.0版已釋出框架AI
- 基於開源IM即時通訊框架MobileIMSDK:RainbowChat v8.1版已釋出框架AI
- 基於開源IM即時通訊框架MobileIMSDK:RainbowChat v8.2版已釋出框架AI
- 基於影像差異識別與頁面自動遍歷的開源 web ui 測試庫WebUI
- 前端開發:基於cypress的自動化實踐前端
- 音數協敖然釋出《超級數字場景源動力——遊戲科技與創新應用研究》報告遊戲
- Knativa 基於流量的灰度釋出和自動彈性實踐
- [自動化]基於kolla的自動化部署ceph叢集
- 市場洞察 – 基於知名 IP 的移動遊戲表現遊戲
- Unity遊戲框架設計之場景管理器Unity遊戲框架
- metersphere 介面自動化中sql場景使用SQL
- 【開源公告】H5、小程式自動化測試框架FAutoTest正式開源H5框架
- 基於Python+requests搭建的自動化框架-實現流程化的介面串聯Python框架
- 在2020年,開一場線上遊戲釋出會遊戲
- LOVEPHP-WEB全棧開源框架釋出PHPWeb全棧框架