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已經在多個品類多款游戲的自動化測試上進行了驗證和應用,並取得了良好的效果。一個典型的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#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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM