Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

導語

  2020年7月,我們探討了AI與自動化測試的關係,並向大家介紹了騰訊互動娛樂事業群TuringLab團隊出版的《AI自動化測試:技術原理、平臺搭建與工程實踐》一書。這本書將TuringLab團隊基於深度學習的自動化AI測試框架基礎的開發與應用經驗詳細的展示在讀者面前,與讀者分享了騰訊遊戲是如何將AI技術與自動化測試相結合完成測試需求的。在文章推送(超鏈接:https://mp.weixin.qq.com/s/vKhfddXnWZFXcQmU1734xQ)後,不少用戶留言反饋了對書中提到的AI 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開源發佈:基於圖像的遊戲場景自動化框架

目前Game AI SDK已經在多個品類多款遊戲的自動化測試上進行了驗證和應用,並取得了良好的效果。一個典型的AI SDK應用示意圖如下所示:


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架


l 左側為遊戲終端設備,運行待自動化測試的遊戲;

l 右側為遊戲自動化框架AI SDK,根據輸入圖像決策遊戲操作;

l AI Client連接了遊戲終端設備和AI SDK,從終端設備上實時獲取遊戲圖像,並將AI SDK決策的遊戲操作轉換為觸屏操作

二、 AI SDK架構介紹

1、 技術架構

AI SDK整體技術框架如下圖所示,主要包含IO Service、Manager Center、UI自動化、遊戲場景識別、AI自動化等幾個模塊。


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

各模塊的核心功能如下:

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自動化根據用戶配置定義進入特定遊戲場景,遊戲場景自動化則在遊戲場景中進行戰鬥、駕駛、升級等各種遊戲自動化操作。兩個階段可以不斷循環重複,每個階段的數據流程如下:


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

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 固定物體目標

主要採用各種模板匹配算法檢測遊戲場景中的固定目標物,如遊戲中的按鈕、圖標、技能狀態等。該方法會返回場景中檢測到的目標物以及像素座標。


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

l 形變物體目標

主要採用卷積神經網絡檢測遊戲場景中的圖像形狀易發生變化的目標物,如遊戲角色、建築物、車輛、怪物等。該方法會返回場景中目標物的位置及類別。


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

l 像素目標

檢測出遊戲圖像檢測區域內滿足特定條件的像素點,該方法會返回符合條件的所有像素點集合。


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

l 數字

該方法會返回遊戲場景中檢測區域內的數字和其所在的像素位置等信息。


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

l 血條

該方法會返回遊戲場景中檢測區域內的血量百分比和血條位置等信息。

Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架


在實際應用中,通常我們將一個目標物和幾個同類別的目標物定義為一個task任務,一個複雜的遊戲場景可能包含幾十個需要識別的task任務。要完成一次場景識別,需要所有task任務都完成。遊戲場景識別模塊的技術架構如下圖所示:


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

1、為了降低任務檢測的時間消耗(如果場景識別耗費太多時間,那麼場景識別之後進行的AI決策就會存在很高的時延,嚴重製約AI自動化的表現),採用了多檢測任務並行運行的方式,充分利用多核CPU資源。

2、對於採用深度網絡模型進行檢測的可形變目標物,任務耗時往往比較長,會嚴重影響每一次場景識別的性能。這裡對深度網絡模型進行了裁剪優化,減少卷積核數目、減少全連接層神經元個數,在保證識別準確率的情況下,儘量降低深度網絡模型的性能開銷。

3、針對遊戲場景的圖像特點,如遊戲圖像中存在很多的“半透明”的情況。即在識別目標物的時候,會受到背景圖像的嚴重干擾,如下面圖例所示。在遊戲場景中,除了前置的圖標不變外,圖標的背景會不斷髮生變化。直接使用常見的模板匹配方法檢測這些“半透明”目標物都不夠理想,針對此類問題,場景識別模塊的算法也做了專門的優化。


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

2、 遊戲AI自動化

遊戲AI自動化模塊主要從場景識別模塊得到識別結果,進行AI決策,並輸出遊戲操作(遊戲操作通常為點擊、滑動某個像素座標點或區域)。遊戲AI是一個複雜的問題,從簡單的硬編碼規則、狀態機、行為樹AI,到模仿學習、強化學習等基於深度學習的AI,再到蒙特卡洛搜索樹AI,不同類型遊戲的AI決策往往需要不同的AI方法,或者多種AI方法來解決。為了便於擴展和支持不同類型遊戲的AI算法,AI自動化模塊被設計為插件運行模式,不同的AI算法以插件的形式實現,並由AI自動化模塊加載運行。

AI自動化模塊包含兩種插件,分別是Env插件和AI插件。Env插件主要是獲取場景識別的結果,並轉化為特定的數據特徵,數據特徵可以是圖像像素值,也可以是其它類型的結構化數據,或者兩者的合集。AI插件主要是遊戲AI算法的實現,根據Env插件轉化後的數據特徵,進行遊戲動作決策。Env插件和AI插件的運行示意圖如下:


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

每一次遊戲場景自動化過程中,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自動化模塊的技術架構如下:


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

除了提供插件系統及其運行框架外,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類等多種類型的遊戲場景中進行了自動化驗證,取得了不錯的應用效果。能夠針對多種遊戲場景進行自動化測試,且不需要遊戲端提供任何接口。一些遊戲中的應用效果視頻如下:


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

從運行方式上,AI SDK可在本地部署運行,進行單獨的遊戲AI自動化測試。如果要進行批量大規模自動化測試,也可以部署在雲端,提供線上遊戲AI自動化測試服務,如下圖所示:


Game AI SDK開源發佈:基於圖像的遊戲場景自動化框架

五、 總結和展望

本文介紹了基於圖像的遊戲場景自動化框架,框架的優點是不依賴遊戲端提供接口或數據,方案通用性強,可適用於絕大多數遊戲場景的自動化測試。且遊戲場景自動化插件完成後,隨著遊戲版本的迭代更新,只要遊戲的玩法不改變,已經實現的自動化過程一般不需要做修改,自動化過程維護的成本比較低,不需要隨著遊戲內部實現的改變而修改。

  同時AI SDK目前也存在一些問題,尤其在易用性方面,如何讓使用者更容易的使用是下一步要解決的問題。雖然AI SDK內置了常用遊戲AI算法,提供了常見遊戲類型的AI自動化框架模板,可以有效的降低接入新遊戲進行遊戲場景自動化的成本,但對使用者也有一定能力要求。我們也在嘗試將一些簡單且通用性強的AI自動化過程來通過工具配置的方式讓用戶來完成,讓一些普通用戶也能夠完成一些場景的AI自動化。其次,在場景識別模塊,提升目標物識別準確率,對實現AI自動化有諸多好處。而在提升識別準確率的同時降低性能開銷,也是需要持續優化的問題。

目前騰訊Turing Lab編著的關於AI SDK及其應用的書籍《AI自動化測試:技術原理、平臺構建與工程實踐》已上架可於京東進行購買(超鏈接:https://item.jd.com/12679219.html#none)。AI ADK也已經對外開源開放,歡迎各位開發者下載體驗。(超鏈接:https://wetest.qq.com/product/game_ai_sdk)

AI SDK 技術交流Q群|1095989343

性能測試技術交流群:720150565

查看PerfDog詳情:https://perfdog.qq.com/?ADTAG=media.dev_website


分享到:


相關文章: