來玩!電腦端的手勢姿態估計,隔空寫字、繪圖,有攝像頭就行
在 CV 領域,人體姿態估計(human pose estimation)利用目標檢測模型和姿態估計模型來識別出人體各個關節的位置和網格,并已在動作識別、動畫、游戲、運動捕捉系統中有著廣泛的應用。
但遺憾的是,人體姿態估計常常見諸于學術研究中,普通讀者很難親身體驗它的神奇成像效果。
近日,機器之心在 GitHub 上發現了一個有趣的項目「air-drawing」,作者創建了一個利用深度學習的工具,使你在配有攝像頭的電腦端可以獲得自己的手勢姿態估計成像圖。

項目地址:https://github.com/loicmagne/air-drawing
此外,作者使用的深度學習模型還可以預測「向上」或「向下」的手勢動作。動態效果展示圖如下:

小編也嘗試在自己的電腦上捕捉到了手勢姿態估計網格圖:
然后試著寫了兩個字「中國」,不知各位讀者認得出來嗎?!
試玩地址:https://loicmagne.github.io/air-drawing/
作者表示,試玩過程中不會收集用戶信息。作者還優化了代碼,使得該工具可以在大多數電腦上運行。電腦上的網絡攝像頭質量會對成像效果產生影響,調高屏幕亮度有助于更快地觸發攝像頭,并提升快門速度和幀率。如果手部一部分在框架之外,則手部檢測無法正常工作。在繪圖寫字時,保持手指向上,手指向下時會影響指尖的檢測。
技術細節
這個可以隔空作畫的工具使用深度學習來完成,實現 pipeline 包含兩個步驟:手勢檢測以及預測所要畫的圖,這兩個過程都是通過深度學習來完成的。其中,手勢檢測使用了手部追蹤解決方案 MediaPipe toolbox。
MediaPipe toolbox 項目地址:
https://google.github.io/mediapipe/solutions/hands.html
繪圖預測部分只用到了手指位置相關技術。輸入是一個 2D 點序列(實際上,該項目使用的是手指的速度和加速度,而不是位置,來保持預測的平移不變),輸出是二元分類「向上(pencil up)」或「向下(pencil down)」。
此外,項目作者還使用了簡單的雙向 LSTM 架構,并且做了一個小數據集(大約 50 個樣本),數據標注使用「python-stuff/data-wrangling/」工具。一開始,項目作者想做一個實時的「向上 / 向下」預測,即在用戶繪畫的同時做出預測。然而,由于任務太難,導致結果很差,因此采用雙向 LSTM。
關于深度學習 pipeline 細節,你可以在 jupyter-notebook 中的 python-stuff/deep-learning / 了解更多信息。
該應用程序可以在用戶端使用,作者將 PyTorch 模型轉換為. onnx,然后使用 ONNX Runtime,它非常方便,可以兼容很多層。
總體來說,這個 pipeline 還需要進一步完善,一些改進的想法包括:
- 使用更大的數據集和更多的用戶數據;
- 對手指信號進行處理和平滑,減少對相機質量的依賴,提高模型的泛化能力。
作者答疑
可以隔空繪畫的這個項目引來了眾多網友的討論,有人不禁感慨,「這太酷了!讓我想起迪士尼的廣告,他們會用發光的魔杖畫出米老鼠的頭。」

在網友表達驚喜的同時,也有人提出了自己的疑惑。項目作者在 reddit 上對部分網友的的疑問進行解答,我們列舉其中一部分。
有網友表示,這是一個不錯的項目,并有疑問——RNN 是從頭開始訓練的,還是在預訓練模型的基礎上進行微調的?
作者表示:「模型是從頭開始訓練的,但使用預訓練模型可能是一個不錯的建議。」

還有網友提問:「預測是實時的嗎?那樣的話,這將是一個真正的魔法。」
作者表示,預測是實時的。但遺憾的是,實時性能不是很好,所以必須使用雙向 LSTM。

還有網友建議「使用 transformer 可以獲得更好的性能」。
對于這個建議,作者表示自己曾嘗試過自注意力層,但是結果并不理想。如果有一個更大數據集的話,采用 transformer 效果會更好。
