大家好,歡迎來到 Crossin的程式設計教室~
幾天不見,Crossin 又去做什麼遊戲去了呢?這次我做的不是遊戲,而是遊戲機!而且是體感遊戲機。
說到體感遊戲,現在大家可能最多想到的是 switch 上的健身環大冒險。
但往前幾年,其實還有另一個非常火的體感遊戲裝置,就是 xbox 上的 kinect。和 switch 用帶有感測器的手柄來識別玩家動作不同,kinect 使用的是一組攝像頭,通過影像來識別玩家的動作。
我這次做的 demo,就是一個使用攝像頭的動作識別系統。理論上來說,這個識別系統只需要普通的電腦和普通的攝像頭就可以執行。不過我最近正好拿到一樣好東西,它可以讓我這次的開發效率和執行效率都大大提高。
這就是我說的好東西,全名是Jetson AGX Orin,是 NVIDIA 的AI邊緣計算裝置。什麼叫做邊緣計算,簡單來說就是對於資料的處理儘可能和產生資料的應用在一起。比如像機器人、像自動駕駛。這種場景對計算的實時性要求高,不好說把資料傳到計算中心,靠機房的大傢伙們處理完再把結果返回給裝置。所以對於邊緣計算裝置來說,一是要計算能力夠強,二就是要足夠小,不僅是體積小,而且要能耗小。
這款 AGX Orin 就是 NVIDIA Jetson 系列的最新款。新到什麼程度,就是目前市面上還沒有現貨可以買,只能預定。所以我這臺可以說是一個全球限量版。和之前上一代 Jetson AGX Xavier 相比,它的效能提升到了8倍,可達到每秒 275 萬億次計算。這個程度已經相當於內建了GPU的伺服器,而它的大小則小到可以託在手掌上。
除了強大的硬體之外,這裡面自然也少不了 NVIDIA AI 相關軟體的支援。並且對於大多數常見AI應用,比如人臉識別、物體識別、動作識別、自然語言處理、語音合成等等等等,它都提供了一些預訓練好的模型。這個簡直太方便了。
開機安裝好 JetPack 開發套件,這裡就有了很多可以執行的測試程式來讓你體驗。官方文件裡也提供了很多示例來幫助開發者上手。
這裡是我執行視覺和對話式AI基準測試的結果:
可以看到跟上一代產品相比有非常顯著提升:
在官方的 Hello AI World 裡,也提供了一些 demo。
比如物體識別,識別一幀畫面只需要十幾毫秒,完全可以用在實時的視訊監控,甚至正在進行的遊戲當中。
還有這樣一個 demo:
好傢伙,這不我一半的工作量已經完成了嘛。
拿到人體姿態資料之後,我們就可以用各種動作對應的資料來訓練一個分類器。然後通過分類器來識別攝像頭實時拍攝到的使用者姿態,判斷出動作。再根據識別出的動作,向系統傳送鍵盤指令。這樣就完成了一個簡單的基於人體動作的互動系統。
在 NVIDIA 智慧物聯網的 github 倉庫裡,我發現了一個類似的專案,用手勢去操作瀏覽網頁。
https://github.com/NVIDIA-AI-IOT/trt\_pose\_hand
裡面使用 SVM 支援向量機來訓練手勢分類器,這個用到 Python 的 scikit-learn 模組。我們的第二部分也可以用同樣的方法,只不過我們使用的是人體全身模型。
為了訓練出分類器,我們需要一點樣本資料。
之後,就是通過 pynput 模組傳送鍵盤制令。
將以上這些全部合在一起,就得到了我們想要的功能:
一個可以用動作來玩遊戲的系統
視訊演示:耗時2天,我自制了一臺體感遊戲機_嗶哩嗶哩_bilibili
對於 Orin 來說,用在這個專案上其實有點大炮打蚊子了,因為姿態判斷和動作識別用的都是預訓練模型,實時的計算量並不算大。但它的軟體環境和開發社群資源確實大大提升了我這次的開發效率。
唯一不足的就是從我家的網路連 github、apt、pip 都太慢了,以至於花了不少時間在環境安裝上,如果相關資源能有一套國內映象就更好了。
最後有一個小彩蛋,你們是否留意到我用來演示的遊戲 KOF97。在2009年,也就是 kinect 正式釋出的前一年,我做的碩士畢業設計,其實就是:使用單攝像機的人機互動系統
而在其中的動作識別部分,用的同樣也是 SVM 支援向量機。在答辯時,我用的演示遊戲,就是 KOF97
在論文最後的工作展望裡,我曾寫到:
沒想到,在13年後,我自己把這個坑填上了。這不禁讓我又想到賈伯斯曾說的:
相信我們生命中曾經經歷的那些點,將在未來的某一天以某種方式串連起來。史蒂夫·賈伯斯
本文程式碼基於NVIDIA官方示例修改:
https://github.com/NVIDIA-AI-...\_pose\_hand
執行環境:
NVIDIA Jetson AGX Orin
JetPack 5.0
Python 3.8.10
程式碼已開源:http://python666.cn/c/2
獲取更多教程和案例,
歡迎搜尋及關注:Crossin的程式設計教室
每天5分鐘,輕鬆學程式設計。