我寫了一個“槍槍爆頭”的視覺AI自瞄程式

前言

前段時間在網上看到《警惕AI外掛!我寫了一個槍槍爆頭的視覺AI,又親手“殺死”了它》 這個影片,引起了我極大的興趣。

影片中提到,在國外有人給使命召喚做了個AI程式來實現自動瞄準功能。它跟傳統外掛不一樣,該程式不需要用遊戲記憶體資料,也不往伺服器傳送作弊指令,只是透過計算機視覺來分析遊戲畫面,定位敵人,把準星移動過去,跟人類玩家操作一模一樣,因此反外掛程式無法檢測到它。而且更恐怖的是這AI程式全平臺通用,不管是X-box,PS4還是手機,只要能把畫面接出來,把操作送進去,就可以實現“槍槍爆頭”。

我寫了一個“槍槍爆頭”的視覺AI自瞄程式

外網的那個開發者用的是基於方框的目標檢測,但是像射擊遊戲需要定位人體的場景,其實有比方框檢測更好的演算法。up主就利用了幾個小時的時間就寫出來了一個效果更好,功能更誇張的AI程式,也就是利用人體關節點檢測技術,透過大量真人圖片訓練出來的視覺AI,可以把影片和圖片里人物的關節資訊提取出來 並給出每個部位中心點的精確畫素座標,而且雖然訓練的是是真人圖片,但是給它遊戲裡的人物,他也一樣能把人體關節定位出來。

可以說由於這類AI程式的出現,現在fps遊戲的形式就是山雨欲來風滿樓,十分嚴峻啊!

下面,我們先開始介紹這個視覺AI自動瞄準的製作思路,然後再談談這個問題帶來的影響以及如何解決這個問題。

一、核心功能設計

總體來說,我們首先需要訓練好一個人體關節點檢測的AI視覺模型,然後將遊戲畫面實時送入AI視覺模型中,再反饋出遊戲人物各個部位的畫素位置,然後確定瞄準點,並將滑鼠移動到瞄準點位置。

拆解需求後,整理出核心功能如下:

訓練人體關節點檢測模型

輸入影片或圖片到AI視覺模型,並輸出瞄準點位置。

自動操作滑鼠移動到對應瞄準位置

最終想要實現的效果如下圖所示:

我寫了一個“槍槍爆頭”的視覺AI自瞄程式

二、核心實現步驟

1。訓練人體關節點檢測模型

在這一部分,我打算使用由微軟亞洲研究院和中科大提出High-Resoultion Net(HRNet)來進行人體關節點檢測,該模型透過在高解析度特徵圖主網路逐漸並行加入低解析度特徵圖子網路,不同網路實現多尺度融合與特徵提取實現的,所以在目前的通用資料集上取得了較好的結果。

1。1 HRNet程式碼庫安裝

按照官方的install指導命令,安裝十分簡單。我是採用本地原始碼安裝方式。

1。2 人體關鍵點資料集下載

對於Images一欄的綠色框需要下載三個大的檔案,分別對應的是訓練集,驗證集和測試集:

http://images。cocodataset。org/zips/train2017。zip

http://images。cocodataset。org/zips/val2017。zip

http://images。cocodataset。org/zips/test2017。zip

對於Annotations一欄綠色框需要下載一個標註檔案:

http://images。cocodataset。org/annotations/annotations_trainval2017。zip

將檔案解壓後,可以得到如下目錄結構:

其中的 person_keypoints_train2017。json 和 person_keypoints_val2017。json 分別對應的人體關鍵點檢測對應的訓練集和驗證集標註。

在原生代碼庫datasets目錄下面新建立coco目錄,將上面的訓練集,驗證集以及標註檔案放到原生代碼的coco目錄下面

1。3 環境配置與模型訓練

核心訓練程式碼如下:

訓練結果:

我寫了一個“槍槍爆頭”的視覺AI自瞄程式

2。輸入影片或圖片實時反饋瞄準點座標

2。1 實時讀取螢幕畫面

在一個 1920×1080 的螢幕上,screenshot()函式要消耗100微秒,基本達到實時傳入遊戲畫面要求。

如果不需要擷取整個螢幕,還有一個可選的region引數。你可以把擷取區域的左上角XY座標值和寬度、高度傳入擷取。

我寫了一個“槍槍爆頭”的視覺AI自瞄程式

2。2 讀取圖片反饋座標

可以選擇人體關節點檢測數目,包括上半身6個關鍵點、上半身11個關鍵點以及全身17個關鍵點,然後構建探測器。

人體關節點對應序號:

因此如果為了自動瞄準頭部實現“槍槍爆頭”,僅需要反饋 0: “nose”的座標點就行了。

程式碼如下:

輸出結果:[701。179 493。55]

我寫了一個“槍槍爆頭”的視覺AI自瞄程式

可以看到雖然訓練的是真人圖片,但是給它遊戲裡的人物,它也一樣能把人體關節定位出來。

深度神經網路之所以厲害,就是因為它有一定的演繹推廣能力。沒見過的東西,他也能靠著層次線索分析一波,結果往往也挺準。而且遊戲場景是現實場景的簡化之後的結果,環境和光影都要簡單的多,能把現實世界分析明白的視覺AI,對付個3D遊戲更是小菜一碟了。

3。自動移動滑鼠到對應的座標點

3。1 移動滑鼠

移動到指定位置:

將滑鼠移動到指定的座標;duration 的作用是設定移動時間,所有的gui函式都有這個引數,而且都是可選引數。

獲取滑鼠位置:

3。2 控制滑鼠點選

單擊滑鼠:

雙擊滑鼠:

點選 & 釋放:

至此,視覺AI自瞄程式已經基本設計完成。最終實現效果可以參見這個up主的影片。

window。DATA。videoArr。push({“title”:“我寫了一個“槍槍爆頭”的視覺AI自瞄程式”,“vid”:“u3328dsok2m”,“img”:“http://inews。gtimg。com/newsapp_ls/0/14654863044_640480/0”,“desc”:“”})

【亦】警惕AI外掛!我寫了一個槍槍爆頭的視覺AI,又親手“殺死”了它

三、引發的思考

也正如up主所說,視覺AI給FPS遊戲帶來的這一輪重大危機!

這類視覺AI程式目前存在三個威脅:

準確性

隱蔽性

通用性

第一個威脅就是超越人類的準確性。雖然人腦的高層次演繹歸納能力是遠勝於AI的,但是在低階資訊處理速度和精確度上,人類就很難比得過專精某個功能的AI了,比如在人體關節定位這件事上,給出人體每個部位的中心位置只需要幾毫秒,而且精確到畫素點,而同樣一張圖片給人類看個幾毫秒,都不一定能夠看清人在哪,更別說定位關節移動滑鼠了。

第二個威脅就是無法被外掛程式檢測的隱蔽性。和傳統外掛不一樣,傳統外掛要操作遊戲的記憶體資料或者檔案資料,從而獲取遊戲世界的資訊。讓開掛的人打出一些正常玩家不可能實現的作弊操作。而視覺AI是完全獨立於遊戲資料之外的,和人一樣,也是透過實時觀察畫面傳送滑鼠和鍵盤指令,所以傳統的反外掛程式只能反個寂寞。

第三個威脅就是適用全平臺的通用性。首先這個AI視覺模型是透過大量真人照片訓練出來的,但是能夠識別遊戲中的人物,這意味著可以攻陷大部分FPS遊戲。AI操作遊戲和人操作遊戲互動方式是沒區別的,所以衍生出更大的問題,只要能把畫面接入到這個模型中,就可以攻陷任意一種遊戲平臺,包括電腦、主機、手機等,無論你做的多封閉,生態維護的多好,在視覺AI面前眾生平等。

那麼我們該如何解決這個問題呢?

up主提到可以透過演算法檢測遊戲異常操作,這也是一種思路,但是實現起來還是比較困難,畢竟可以讓AI更像人類的操作。

而我想到之前比較火的deepfake,那麼我們是不是可以透過對抗樣本來解決這個問題呢,使得視覺AI識別錯誤?

說了那麼多,其實也沒有什麼好的結論,只能說技術的發展是在不斷對抗中前進以及規範。

TAG: AI遊戲視覺滑鼠訓練