摘要:本案例使用Windows版本的ModelBox SDK進行二次開發,主要是針對姿態匹配案例開發實踐,
本文分享自華為云社區《姿態匹配:抖抖手動動腳勤做深呼吸》,作者:吳小魚,
在之前發布的AI說ModelBox推理真的高效嗎一文中,我們使用雙階段單人人體關鍵點檢測作為案例對比測驗了ModelBox的性能,作為一個性能測驗案例我們只是簡單的將檢測到的關鍵點畫在原圖上,并未進行進一步的應用開發,昨晚做夢,夢到關鍵點檢測案例哭訴大材小用為何對它棄之不理明明廣闊天地大有可為,愧疚之下連夜寫了這篇動手動腳的案例 ,最終效果如下:

畫面左上角隨機繪制一個標準姿勢,同時檢測用戶的姿態與標準姿勢進行相似性比對,得分繪制在畫面中央,如果得分超過閾值,則視為姿態一致,將更新下一個標準姿勢,
本案例使用Windows版本的ModelBox SDK進行二次開發,如果對此還不熟悉,請先閱讀ModelBox端云協同AI開發套件(Windows)開發環境篇,如果對ModelBox AI應用開發感興趣,歡迎參加我們的ModelBox實戰營,
工程目錄
本案例是在single_human_pose應用基礎上修改而來,案例所需資源(代碼、模型、測驗資料等)均可從obs桶下載,工程目錄與原始版本基本一致,下面列出其中不一樣的地方:
single_human_pose ├─data │ └─norm_kpts.npy // 標準姿態關鍵點 ├─etc │ └─flowunit // 功能單元目錄 │ ├─draw_pose // 關鍵點繪制功能單元 │ ├─draw_pose.py // 關鍵點繪制功能單元入口檔案 │ ├─draw_pose.toml // 關鍵點繪制功能單元組態檔 │ ├─draw_utils.py // 關鍵點匹配演算法 │ └─smooth.py // 平滑演算法,使關鍵點更穩定 │ ├─... // 其他功能單元 ├─graph │ └─single_human_pose.toml // 默認技能流程圖,使用攝像頭運行 ├─... └─build_project.sh
主要的不同點有兩處:
1.我們希望姿態與標準姿態匹配得分超過閾值后持續展示幾幀匹配結果,使結果更可感,這就需要draw_pose單元是有序的,所以我們在關鍵點繪制功能單元組態檔draw_pose.toml中將單元型別改為流單元:
# Flowunit Type stream = true # Whether the flowunit is a stream flowunit
同時要在draw_pose.py中補充流單元需實作的介面data_pre、data_post:
def data_pre(self, data_context): # Before streaming data starts return modelbox.Status() def data_post(self, data_context): # After streaming data ends return modelbox.Status()
2.draw_utils.py中新增關鍵點匹配演算法,主要思路是將檢測到的關鍵點對檢測框進行歸一化處理后與標準關鍵點計算oks:
def compute_kpts_oks(self, dt_kpts, area=1): g = np.array(self.target_kpt) xg = g[:, 0] yg = g[:, 1] d = np.array(dt_kpts) xd = d[:, 0] yd = d[:, 1] vd = d[:, 2] dx = xd - xg dy = yd - yg e = (dx ** 2 + dy ** 2) / self.variances / (area + np.spacing(1)) / 2 e = e[vd > self.kpts_thre] return np.sum(np.exp(-e)) / e.shape[0] if e.shape[0] else 0.0
為防止某些低置信度關鍵點漂移影響相似性計算,我們只取置信度大于kpts_thre的關鍵點計算得分,
此外,一時手癢替換了人形檢測模型,檢測的前后處理以及技能流程圖稍有改變;如果使用原本的檢測模型只修改上述部分也可以正常運行,由于本專案隨機選擇標準姿勢,所以只提供了使用攝像頭運行的技能流程圖,
運行專案
打開工程目錄下bin/mock_task.toml檔案,設定其中的任務輸入和任務輸出配置為如下內容:
[input] type = "url" url = "0" # 任務輸出,目前僅支持"webhook", 和本地輸出"local"(輸出到螢屏,url="0", 輸出到rtsp,填寫rtsp地址) # (local 還可以輸出到本地檔案,這個時候注意,檔案可以是相對路徑,是相對這個mock_task.toml檔案本身) [output] type = "local" url = "0:Pose"
即使用編號為0的攝像頭(默認為PC自帶的攝像頭),輸出畫面顯示到名為Pose的本地螢屏視窗中,
執行bin/main.bat 運行應用,就可以開始伸展胳膊腿兒了:
另外,巨佬飛戈在single_human_pose應用基礎上開發了體感小游戲,有興趣的朋友可以玩一下,
可以看到,在基礎案例上進行簡單的二次開發即可得到一個可玩應用,期待大家腦洞大開讓基礎案例們都可以一展抱負
11月3號晚19點,將進行AI養豬 實時看護豬的健康直播,華為云AI發燒友在線帶你學習ModelBox框架,快速AI應用,實作AI監測豬的健康狀態,
參與直播互動,有機會贏取華為自拍桿、雷柏機械鍵盤、ModelArts書籍等多重好禮,還等什么,馬上報名吧!
報名鏈接:http://su.modelarts.club/5a7o
點擊關注,第一時間了解華為云新鮮技術~
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/526865.html
標籤:其他
