遊戲中的影像識別:CV的新戰場
- 2019 年 12 月 24 日
- 筆記
騰訊互娛Turing Lab從創建開始,每周在內部進行分享讀書會,對業界的技術研究和騰訊互娛Turing Lab從創建開始,每周在內部進行分享讀書會,對業界的技術研究和應用進行討論。在此通過公眾號形式把相關有趣內容也推送給對新技術和業界趨勢感興趣的朋友。
和大量的所謂技術公眾號不同,儘管以AI為重心,但我們的分享不局限於AI論文,而是涉獵所有前沿技術領域,和自動化流程、數據處理、人工智慧、架構設計相關的有趣內容均會分享,希望各位在周末閑暇時有空閱讀了解。
分享人:王潔梅 騰訊互娛 工程師 | 編輯: 艾長青 騰訊互娛 研究員
概述
CV(Computer Vision)在現實世界的應用相對比較成功,如日常生活中的人臉識別,車牌識別,指紋比對,電子穩像,行人,車輛的跟蹤,等等。那麼在其他領域呢,比如大家常玩的手機遊戲,CV又可以有哪些應用呢?遊戲場景的影像和現實場景的影像還是有差別的,有些遊戲的場景相對比較複雜,如特效干擾、遊戲人物不似真人一樣有規則,藝術字體也不像車牌一樣字體固定,並且有統一底色等等;有些元素是相對比較簡單的,如遊戲中的固定位置的固定圖標等等。簡單的遊戲元素可以用傳統影像檢測的方法,也可以取得比較好的效果。本篇文章,將帶領大家一起分析常見的遊戲場景的識別。
1. 處理流程
遊戲場景的識別可以主要分為兩個模組,GameClient和CVServer, GameClient模組負責從手機或是PC端實時獲取影像,並轉發給CVServer。CVServer處理收到的遊戲影像,結果返給Game Client。Game Client根據需求進一步處理後,再回饋給遊戲端。流程如圖1所示。

圖 1 遊戲場景識別主流程
2. 應用舉例
上一小節主要跟大家分享了遊戲場景識別的主要流程,這一小節我們將主要分析影像識別在遊戲中的應用。
2.1 遊戲狀態的確定
每個遊戲UI稱為一個遊戲狀態。遊戲可被認為有很多不同的UI組成。先建立好這些UI的樣本庫,實時獲取一張遊戲畫面時,比對當前的影像和樣本影像,可判斷出當前的遊戲狀態。比對兩張影像是否相似的方法很多,這裡我們以特徵點匹配為例,主要步驟如下:
Step1:樣本影像的特徵點提取,測試影像的特徵點匹配

圖 2 特徵點提取
Step2:特徵點匹配

圖 3 特徵點匹配
Step3:匹配篩選

圖 4 根據ratio-test進行匹配篩選
ORB特徵點匹配是相對比較成熟的技術。在採集到的測試數據集中,會因為手機解析度,劉海或渲染的不同,導致影像的大小或UI渲染位置等差異比較大,常用的模板匹配很難適配這種情況。基於特徵點的匹配方案則不會存在這種情況,特徵點一般是指影像中的角點,或是顯著點。跟影像中物體元素所在的位置和大小關係不明顯,所以適用性更強。ORB特徵點是將FAST特徵點的檢測方法與BRIEF特徵描述子結合起來,並在它們原來的基礎上做了改進與優化。ORB特徵點具有旋轉不變性和尺度不變性。下面分別介紹特徵點提取、特徵點描述、特徵點匹配和特徵點篩選。
2.1.1 特徵點提取:FAST
FAST的基本思想,若某像素p與其周圍鄰域內(1到16),足夠多的像素點相差較大,則該像素可能是角點。原始的FAST特徵點是沒有尺度不變性的,OPENCV中的ORB的實現通過構建高斯金字塔,然後在每一層金字塔影像上檢測角點,來實現尺度不變性。原始的FAST也不具有方向不變性,ORB的論文中提出了一種利用灰度質心法來解決這個問題。對於任意一個特徵點p來說,定義p的鄰域像素的矩為

,其中 I(x,y)為點(x,y)處的灰度值,影像的質心為:

,特徵點和質心的夾角,即為FAST特徵點的方向:


圖5 FAST 特徵點圖示(影像來自論文:Faster and better: A machine learning approach to corner detection)
2.1.2 特徵點描述:BRIEF
BRIEF演算法的核心思想是在關鍵點P的周圍以一定的方式選取N個點對,然後把這N個點對的對比結果組合成一個長度為n的二值碼串,作為該關鍵點的描述子。ORB在計算BRIEF描述子的時候,建立的坐標系是以關鍵點為圓心,以特徵點P和取點區域的質心(Q)的連線為X軸建立的二維坐標系。圓心是固定的,以PQ為x軸坐標,垂直方向為y軸坐標,在不同的旋轉角度下,同一特徵點取出來的點對是一致的,這就解決了旋轉一致性的問題。

圖6 BRIEF描述子旋轉一致性
2.1.3 特徵點匹配:Hamming Distance
兩個等長二進位串的漢明距離是兩個二進位串對應位置的不同字元的個數。ORB中用Hamming Distance來衡量兩個描述子之間的距離。
2.1.4 特徵點篩選:Ratio-Test
Ratio-Test用來剔除距離比例(最近鄰距離/第二近鄰距離)近似的模糊匹配點對。這裡使用一個參數ratio來控制剔除距離比例在一定範圍之外的特徵點。由下圖所示,可知ratio為0.75左右時,可以把正確匹配和錯誤匹配情況的最好的分離。

圖 7 最近鄰距離和第二近鄰距離的ratio圖,實線為匹配正確時的ratio的pdf,虛線為錯誤匹配時的ratio的pdf。影像來自論文:D. G. Lowe. Distinctive imagefeatures from scale-invariant keypoints, 2004
2.2 場景覆蓋率
基於特徵點匹配的方法,也可用在場景覆蓋率的應用上。首先是載入核心場景的模板影像,AI在運行過程中會採集大量的遊戲運行中的遊戲截圖。基於這些遊戲截圖形成的測試數據集,遍歷每一張測試數據集,分別基於部分影像的特徵點演算法匹配核心場景影像和測試影像,全影像的特徵點匹配方法匹配核心場景影像和測試影像,最終篩選出匹配結果,過濾得到匹配到的核心場景的影像。通過匹配到的核心場景的影像和數目,推測AI運行過程中的場景覆蓋情況。
2.3 遊戲中數字的識別
遊戲中的數字影像很多,如關卡數,得分數,倒計時數等,我們可以基於CNN的方法對數字進行識別。基於CNN的分類方法很早就被提出,早期比較經典的CNN網路是1998年提出的Lenet網路,Lenet網路採用2層卷積,2層池化層,2層全連接層,最後一層softmax層組成。輸入的是數字影像,輸出的是數字影像的類別。

圖 6 Lenet網路
我們可以先對全數字影像進行分割,分割成一個一個獨立的數字,然後通過Lenet網路對每一個數字影像進行預測,輸出的數字影像類別即為識別出的數字,最後再對全數字進行組裝,得到最後的全數字識別結果。

圖 7 數字識別過程
隨著網路結構加深,卷積功能的加強,以及GPU和大數據帶來的歷史機遇,CNN近些年呈現爆炸式發展。而且CNN不僅用於分類,還可以用來對物體檢測,即最後一層由原來的輸出物體的類別,到輸出物體在影像中的位置和在此位置處的物體的類別。我們可以採用折中速度和準確度的演算法YOLOV3,並基於工程的影像特徵,基於減少網路層個數和減少特徵圖個數兩個方向去優化網路,近一步優化網路速度。

圖 8遊戲中的數字影像

圖 9 數字識別和重組的過程
2.4 固定位置固定圖標的識別
模板匹配的應用很多,我們就固定按鈕的識別,提示資訊的識別,卡住狀態的檢測這三個方面舉例說明。遊戲主介面中,英雄的技能,裝備,操作鍵等這些按鈕一般都是在固定位置。提取按鍵為可用狀態時的按鈕圖標作為模板,實時獲取的遊戲介面檢測到模板,檢測到就說明當前這個按鈕可用。遊戲AI獲取這些按鍵的資訊後,即可採取相應的策略,如釋放技能,購買裝備等。遊戲提示資訊也是類似,遊戲介面中固定位置出現一些提示資訊,如圖7中顯示的路線指示資訊,遊戲結束狀態(成功/失敗)等,遊戲運行狀態(開始)等。我們先採集這些提示資訊出現的位置,以及這些提示圖標模板,在遊戲實時運行過程中,在出現的位置處,實時匹配是否和採集的圖標模板匹配,如果匹配到了,說明當前出現了此提示資訊。如匹配到遊戲成功圖標,則在此局中的AI策略應該給予獎勵,相反應該給予懲罰等。

圖 10 固定Button的識別

圖 11 遊戲提示圖標的識別
模板匹配的思想是在一幅影像中尋找與另一幅模板影像最匹配部分。流程如圖12所示。

圖 12 模板匹配的過程
模板匹配的處理步驟如下:
- Step1:從原影像的左上角開始,從左向右,從上到下,步長為1,採用滑動窗口的方式,依次去計算模板影像和窗口子影像的相似度。
- Step2:把相似結果存在結果矩陣中。
- Step3:最終在結果矩陣中找到最佳匹配值,如果越相似,值越大,那麼結果矩陣中最亮的部分,即為最佳匹配。
openCV中提供了介面函數cv2.matchTemplate(src, tmpl, method) 進行模板匹配,其中method表示匹配方法的選擇。
2.5 基於像素特徵的物體過濾
根據各通道顏色值的範圍,對檢測區域內像素進行過濾,可以得到符合這種顏色特徵的目標物在什麼位置。
遊戲中血條的顏色特徵也是比較明顯的。如紅色血條的R通道值比較大;綠色血條的G通道值比較大; 藍色血條的B通道值比較大。我們提取血條的顏色特徵,根據顏色特徵可以過濾出血條像素點,很多像素點組成了血條,計算血條的連通區域,可以知道血條的長度,進而可以知道血量百分比。通過血條像素點的過濾,我們即可知道當前遊戲主介面友方單位(綠色血條或藍色血條),敵方單位(紅色血條)的位置屬性,血量百分比屬性。根據這些屬性遊戲AI可以採取逃跑,向前攻擊,組隊等不同的策略。

圖 13 血條百分比計算的流程
MOBA類遊戲,常在小地圖中,出現我方塔和敵方塔。提取塔的顏色範圍R(0, 90),G(90, 190),B(110,200)。在小地圖範圍內,過濾像素灰度值在此範圍內的像素點,即可知道我方(敵方)塔在什麼位置,以及塔的血量(像素點的多少)。如果小地圖中出現了自己的英雄,且自己英雄頭像周圍有綠色外接圓,我們也可以提取出綠色外接圓的像素值範圍R(80, 140),G(170, 210),B(70,110).通過各個通道灰度值過濾出自己英雄在什麼位置,進而進行尋路或是策略選擇等。

圖 14 MOBA類遊戲中小地影像素點篩選的應用
2.6 其他
影像識別在遊戲中的應用還有很多,比如遊戲場景中的行人檢測,英雄檢測,花屏檢測,空氣牆,穿模,去重等等。
3 總結
本篇文章主要介紹了影像識別在遊戲中的應用,如遊戲狀態的確定,場景覆蓋率的計算,遊戲中數字的識別,固定位置固定圖標的識別等。希望讀者看了本篇文章後,對影像識別在遊戲中的應用有進一步的認識。
關於騰訊WeTest
騰訊WeTest是由騰訊官方推出的一站式品質開放平台。十餘年品質管理經驗,致力於品質標準建設、產品品質提升。騰訊WeTest為移動開發者提供兼容性測試、雲真機、性能測試、安全防護、企鵝風訊(輿情分析)等優秀研發工具,為百餘行業提供解決方案,覆蓋產品在研發、運營各階段的測試需求,歷經千款產品磨礪。金牌專家團隊,通過5大維度,41項指標,360度保障您的產品品質。

