頭條資訊 - 為您提供最新最全的新聞資訊,每日實時更新

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

科技數碼 DeepTech深科技

一位名為 Agustinus Nalwan 的奶爸曾經從事遊戲開發、計算機視覺、3D 動畫等方面的工作,疫情期間,他為兩歲半的兒子 Dexie 製作了一款名為 Griffin 的視覺互動遊戲。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨 Dexie 的遊戲體驗

Griffin 本意為獅身鷹臉的神獸,在《哈利波特》中,格蘭芬多學院(Gryffindor)即指金色的 Griffin。Nalwan 的兒子 Dexie 非常喜歡老鷹,所以 Nalwan 便以 Griffin 為原型製作了這樣一款遊戲。在 Medium 上,他發佈了製作過程的細節並公佈了遊戲的開源代碼。本文著重介紹其製作過程。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨傳說中的 griffin

所需模塊:3D 遊戲引擎;身體姿勢估計;動作映射和手勢識別;通信系統。

所需硬件:NVIDIA Jetson AGX Xavier;顯示器;Sony IMX327 攝像頭;萬能膠帶。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨 NVIDIA Jetson AGX Xavier、Sony IMX327 攝像頭和萬能膠帶

製作過程

一、構建 3D 遊戲引擎

Griffin 系統用第三視角渲染 3D 世界,既可以看到雄鷹的翅膀隨著玩家同步擺動,又可以更加逼真地模擬真實飛行。專業的 3D 遊戲引擎有 Unity 和 Unreal,但都不能在 Ubuntu OS 或 ARM 上運行,因此 Nalwan 找到了一個可以在 OpenGL 上運行的 C++ 開源飛行模擬器,並對其作出了一些修改。

首先,他將基於按鍵的飛行控制系統改成了基於手勢識別的飛控。

其次,他重構了靜態 3D 模型,來符合鷹的身體結構。原始的飛行器模型與鷹不同的是,飛行器是一個保持不變的形體,以機身為軸線轉動,而鷹則有一對不斷運動的翅膀。因此,他使用 3D 作圖工具 Blender,改變了原始機身的骨骼動畫系統,把機翼作為兩個單獨的 3D 模型加到機身上,作為鷹的兩翼。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨 Blender 中編輯的鷹的 3D 模型

接著,他設置了不同的遊戲狀態,使得可以通過玩家的動作直接重新開始遊戲。遊戲中的鷹有兩種狀態,或站立在樹枝上,或飛翔在藍天裡。

最後,他使用 libSFML 添加了音效,當鷹一起飛,就會伴隨著鷹的嘯聲和急促的風聲。

二、構建身體姿勢識別

這一模塊是通過對身體各個部位的確認,來識別不同的身體姿勢,以代表不同的遊戲指令。通過檢測手臂的姿態、臉部的位置等,系統就能確定玩家的特定姿勢,觸發動畫中鷹的動作效果。

其中涉及到一個名為 OpenPose 的開源庫,其包含各種手勢識別、姿勢識別、面部識別的 AI 模型,而 Nalwan 使用了名為 COCO 的身體姿勢模型。該模型含有 18 個骨骼節點捕捉器,能實時識別人體的 18 個關節,Griffin 用到了其中 6 個關節。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨 COCO 關節點圖

OpenPose 建立在 PyTorch 框架之上,該框架在 NVIDIA AGX Xavier 中運行幀率很低,只有 4FPS。Nalwan 則使用 torch2trt 工具,將 PyTorch 模型移植到 TensorRT 中,大大加快了幀率,達到 100FPS。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨人體姿態識別

不過,該模型的關節識別有時候會出錯,偶爾會識別到一些其他物件,而不是玩家本人。為此,Nalman 添加了輔助 AI 模型來解決這個問題,他使用 Amazon SageMaker JumpStart,這是 AWS 近日發佈的一款工具,可以輕易在 TensorFlowHub 和 PyTorchHub 部署 AI 模型,一共有 150 多種型號可選。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨錯誤情況

這種 AI 輔助模型具有對象檢測功能,可以確定玩家主體的邊界框,這樣系統就不會把一些雜物識別成人物關節了。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨人體邊框以外的關節點被排除在外

三、構建動作映射和手勢識別

該模塊將通過玩家的 6 個關節識別出遊戲的各種指令:

第一,身體傾斜。玩家通過傾斜身體控制鷹在飛行途中的轉向。系統根據手臂與水平面的角度來計算傾斜程度,從而控制轉向幅度。在這裡 Nalwan 選擇了肘關節作為參考點,而非腕關節,是因為腕關節常常出畫或被遮擋。

第二,手臂旋轉。在站立時旋轉手臂,鷹也會跟著撥動翅膀,這單純是一個趣味性互動畫面。系統根據手肘與水平面的夾角計算鷹翼的傾角,同時再增加 15 度,使得畫面更加生動。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨身體傾斜和手臂旋轉的動作映射

第三,下蹲。這也是一個沒有具體功能的動作,代表雄鷹起飛前的起勢動作。系統計算頸部到鼻子的長度與肩膀長度的比例,作為蹲伏偏移量。蹲的幅度越大,頸部到鼻子的距離就越小,而肩膀長度不變。之所以不直接計算頸部到鼻子的長度,是因為玩家到相機的距離不同,這個長度也不同,會影響到就算結果,從而不能觸發雄鷹的下蹲動作。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨下蹲動作映射

第四,起飛姿勢。該姿勢識別通過兩肩的中心點的探測,如果在一秒內該點上下移動的幅度大於閾值,則判定為起飛姿勢。觸發起飛姿勢後,雄鷹就會跳出樹枝,騰空而起。

第五,重新啟動姿勢。當玩家轉身背對相機,左右肩交換位置,系統判定為重新啟動。重新啟動後,雄鷹將再次站在樹枝上,等待起飛。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨起飛和復位姿勢識別

四、整合系統

在完成了上述三個模塊的基礎上,下一步就是把三者整合起來。連接關節識別模塊和手勢識別模塊不難,因為兩者都是由 Python 編寫。但把這兩者和 3D 引擎結合就出現了難題,因為 3D 引擎是由 C++ 編寫的,而用 Python 訪問 OpenGL 基本是不可能的。

為此,Nalwan 選擇通過 socket 來整合該系統,這是 TCP 協議使用的一種低級通信機制。由於兩個模塊在同一電腦中運行,延遲將被控制在 5 毫秒以內。通信層由一個在 Python 應用中的客戶端模塊、和一個在 C++ 應用中的服務器模塊組成。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨 Griffin 的整體架構圖

校準與測試

一切準備好後,Nalwan 對 Griffin 系統進行了測試,在執行以上的節點捕捉、姿勢識別和 3D 渲染的同時,整體的幀率達到 60FPS。

Nalwan 向兒子 Dexie 演示瞭如何玩這個遊戲,兒子看著電視裡的雄鷹和爸爸是一樣的姿勢,感到十分興奮。Dexie 上手玩的時候,一下子就玩了半個小時,扮演著雄鷹的身份,在藍天下翱翔、在峽谷裡躲避。

程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源

圖丨 Dexie 的飛行體驗

對於 Nalwan 來說,這也是好事,一方面兒子玩的開心了,另一方面,兒子玩累了睡得很早,晚上 Nalwan 就不會被熊孩子打擾了。

總結

在 Nalwan 看來,這次製作遊戲的實踐也讓他受益匪淺,他總結了如下的一些收穫。

1.Torch2trt 能自動將 PyTorch 模型移植到 TensorRT 中去,大大加快 AI 模型的運行速率。

2.NVIDIA Jetson AGX Xavier 性能非常強勁,可以連貫地運行包含 30 個實時 1080p 視頻的視覺模型。

3.Amazon SageMaker JumpStart 提供了海量的流行 AI 模型供開發者使用。

4.構建 3D 遊戲引擎讓他回憶起了之前作為遊戲和電影 SFX 開發者的身份,刷新了對自己 OpenGL、C++ 和計算機圖形學能力的認知。

5. 他本可以通過 Unity Engine 和 Kinect sensor 在 Xbox 中構建 Griffin,但是自己動手 DIY 一個遊戲遠比這有趣得多。

6. 在遊戲裡扮演一隻老鷹是很累人的,要一直舉著自己的手臂。然而,真正的老鷹會藉助氣流,保持它們滑翔的姿態。

-End-

參考:

https://agustinus-nalwan.medium.com/making-my-toddlers-dream-of-flying-come-true-with-ai-tech-85e40d7144a2

轉載請超鏈接註明:頭條資訊 » 程序員奶爸為兒子自制視覺互動遊戲,相關代碼已開源
免責聲明
    :非本網註明原創的信息,皆為程序自動獲取互聯網,目的在於傳遞更多信息,並不代表本網贊同其觀點和對其真實性負責;如此頁面有侵犯到您的權益,請給站長發送郵件,並提供相關證明(版權證明、身份證正反面、侵權鏈接),站長將在收到郵件24小時內刪除。
加載中...