零基礎(chǔ)python入門(mén)教程:python666.cn 大家好,歡迎來(lái)到 Crossin的編程教室~ 幾天不見(jiàn),Crossin 又去做什么游戲去了呢?這次我做的不是游戲,而是游戲機(jī)!而且是體感游戲機(jī)。 說(shuō)到體感游戲,現(xiàn)在大家可能最多想到的是 switch 上的健身環(huán)大冒險(xiǎn)。 但往前幾年,其實(shí)還有另一個(gè)非常火的體感游戲設(shè)備,就是 xbox 上的 kinect。和 switch 用帶有傳感器的手柄來(lái)識(shí)別玩家動(dòng)作不同,kinect 使用的是一組攝像頭,通過(guò)圖像來(lái)識(shí)別玩家的動(dòng)作。 我這次做的 demo,就是一個(gè)使用攝像頭的動(dòng)作識(shí)別系統(tǒng)。理論上來(lái)說(shuō),這個(gè)識(shí)別系統(tǒng)只需要普通的電腦和普通的攝像頭就可以運(yùn)行。不過(guò)我最近正好拿到一樣好東西,它可以讓我這次的開(kāi)發(fā)效率和運(yùn)行效率都大大提高。 這就是我說(shuō)的好東西,全名是 Jetson AGX Orin,是 NVIDIA 的AI邊緣計(jì)算設(shè)備。什么叫做邊緣計(jì)算,簡(jiǎn)單來(lái)說(shuō)就是對(duì)于數(shù)據(jù)的處理盡可能和產(chǎn)生數(shù)據(jù)的應(yīng)用在一起。比如像機(jī)器人、像自動(dòng)駕駛。這種場(chǎng)景對(duì)計(jì)算的實(shí)時(shí)性要求高,不好說(shuō)把數(shù)據(jù)傳到計(jì)算中心,靠機(jī)房的大家伙們處理完再把結(jié)果返回給設(shè)備。所以對(duì)于邊緣計(jì)算設(shè)備來(lái)說(shuō),一是要計(jì)算能力夠強(qiáng),二就是要足夠小,不僅是體積小,而且要能耗小。 這款 AGX Orin 就是 NVIDIA Jetson 系列的最新款。新到什么程度,就是目前市面上還沒(méi)有現(xiàn)貨可以買(mǎi),只能預(yù)定。所以我這臺(tái)可以說(shuō)是一個(gè)全球限量版。和之前上一代 Jetson AGX Xavier 相比,它的性能提升到了8倍,可達(dá)到每秒 275 萬(wàn)億次計(jì)算。這個(gè)程度已經(jīng)相當(dāng)于內(nèi)置了GPU的服務(wù)器,而它的大小則小到可以托在手掌上。 除了強(qiáng)大的硬件之外,這里面自然也少不了 NVIDIA AI 相關(guān)軟件的支持。并且對(duì)于大多數(shù)常見(jiàn)AI應(yīng)用,比如人臉識(shí)別、物體識(shí)別、動(dòng)作識(shí)別、自然語(yǔ)言處理、語(yǔ)音合成等等等等,它都提供了一些預(yù)訓(xùn)練好的模型。這個(gè)簡(jiǎn)直太方便了。 開(kāi)機(jī)安裝好 JetPack 開(kāi)發(fā)套件,這里就有了很多可以運(yùn)行的測(cè)試程序來(lái)讓你體驗(yàn)。官方文檔里也提供了很多示例來(lái)幫助開(kāi)發(fā)者上手。 這里是我運(yùn)行視覺(jué)和對(duì)話式AI基準(zhǔn)測(cè)試的結(jié)果: 可以看到跟上一代產(chǎn)品相比有非常顯著提升: 在官方的 Hello AI World 里,也提供了一些 demo。 比如物體識(shí)別,識(shí)別一幀畫(huà)面只需要十幾毫秒,完全可以用在實(shí)時(shí)的視頻監(jiān)控,甚至正在進(jìn)行的游戲當(dāng)中。 還有這樣一個(gè) demo: 好家伙,這不我一半的工作量已經(jīng)完成了嘛。 拿到人體姿態(tài)數(shù)據(jù)之后,我們就可以用各種動(dòng)作對(duì)應(yīng)的數(shù)據(jù)來(lái)訓(xùn)練一個(gè)分類器。然后通過(guò)分類器來(lái)識(shí)別攝像頭實(shí)時(shí)拍攝到的用戶姿態(tài),判斷出動(dòng)作。再根據(jù)識(shí)別出的動(dòng)作,向系統(tǒng)發(fā)送鍵盤(pán)指令。這樣就完成了一個(gè)簡(jiǎn)單的基于人體動(dòng)作的交互系統(tǒng)。 在 NVIDIA 智能物聯(lián)網(wǎng)的 github 倉(cāng)庫(kù)里,我發(fā)現(xiàn)了一個(gè)類似的項(xiàng)目,用手勢(shì)去操作瀏覽網(wǎng)頁(yè)。 https://github.com/NVIDIA-AI-IOT/trt_pose_hand 里面使用 SVM 支持向量機(jī)來(lái)訓(xùn)練手勢(shì)分類器,這個(gè)用到 Python 的 scikit-learn 模塊。我們的第二部分也可以用同樣的方法,只不過(guò)我們使用的是人體全身模型。 為了訓(xùn)練出分類器,我們需要一點(diǎn)樣本數(shù)據(jù)。 之后,就是通過(guò) pynput 模塊發(fā)送鍵盤(pán)制令。 將以上這些全部合在一起,就得到了我們想要的功能: 一個(gè)可以用動(dòng)作來(lái)玩游戲的系統(tǒng) 對(duì)于 Orin 來(lái)說(shuō),用在這個(gè)項(xiàng)目上其實(shí)有點(diǎn)大炮打蚊子了,因?yàn)樽藨B(tài)判斷和動(dòng)作識(shí)別用的都是預(yù)訓(xùn)練模型,實(shí)時(shí)的計(jì)算量并不算大。但它的軟件環(huán)境和開(kāi)發(fā)社區(qū)資源確實(shí)大大提升了我這次的開(kāi)發(fā)效率。 唯一不足的就是從我家的網(wǎng)絡(luò)連 github、apt、pip 都太慢了,以至于花了不少時(shí)間在環(huán)境安裝上,如果相關(guān)資源能有一套國(guó)內(nèi)鏡像就更好了。 最后有一個(gè)小彩蛋,你們是否留意到我用來(lái)演示的游戲 KOF97。在2009年,也就是 kinect 正式發(fā)布的前一年,我做的碩士畢業(yè)設(shè)計(jì),其實(shí)就是:使用單攝像機(jī)的人機(jī)交互系統(tǒng) 而在其中的動(dòng)作識(shí)別部分,用的同樣也是 SVM 支持向量機(jī)。在答辯時(shí),我用的演示游戲,就是 KOF97 在論文最后的工作展望里,我曾寫(xiě)到: 沒(méi)想到,在13年后,我自己把這個(gè)坑填上了。這不禁讓我又想到喬布斯曾說(shuō)的:
本文代碼基于NVIDIA官方示例修改: https://github.com/NVIDIA-AI-IOT/trt_pose_hand 運(yùn)行環(huán)境: NVIDIA Jetson AGX Orin JetPack 5.0 Python 3.8.10 代碼已開(kāi)源,獲取代碼請(qǐng)?jiān)诠娞?hào)“Crossin的編程教室”回復(fù)關(guān)鍵詞: 動(dòng)作識(shí)別 |
|
联系客服
微信扫码,添加客服企业微信
客服QQ:
1732698931联系电话:4000-999-276
客服工作时间9:00-18:00,晚上非工作时间,请在微信或QQ留言,第二天客服上班后会立即联系您。