摔倒檢測,基于骨骼點人體動作識別,部分代碼用 Chatgpt 完成
哈嘍,大家好。
今天給大家分享一個摔倒檢測項目,準(zhǔn)確地說是基于骨骼點的人體動作識別。
大概分為三個步驟
- 識別人體
- 識別人體骨骼點
- 動作分類
項目源碼已經(jīng)打包好了,獲取方式見文末。
0. chatgpt
首先,我們需要獲取監(jiān)控的視頻流。這段代碼比較固定,我們可以直接讓chatgpt完成
chatgpt寫的這段代碼是沒有問題的,可以直接使用。
但后面涉及到業(yè)務(wù)型任務(wù),比如:用mediapipe?識別人體骨骼點,chatgpt給出的代碼是不對的。
我覺得chatgpt?可以作為一個工具箱,能獨立于業(yè)務(wù)邏輯,都可以試著交給chatgpt完成。
所以,我覺得未來對程序員的要求會更加注重業(yè)務(wù)抽象的能力。扯遠(yuǎn)了,言歸正傳。
1. 人體識別
人體識別可以用目標(biāo)檢測模型,比如:YOLOv5?,之前我們也分享過好多訓(xùn)練YOLOv5模型的文章。
但這里我沒有用YOLOv5?,而是用mediapipe?。因為mediapipe?運行速度更快,在 CPU 上也能流暢地運行。
2. 骨骼點識別
識別骨骼點的模型有很多,如:alphapose、openpose,每種模型識別出來的骨骼點個數(shù)和位置都有所差異。比如下面這兩種:
mediapipe 32個骨骼點
coco 17個骨骼點
骨骼點的識別我仍然使用mediapipe?,除了速度快,另一個優(yōu)勢是mediapipe識別的骨骼點多,有 32 個,能滿足我們的使用。因為下面要用的人體動作分類,強(qiáng)依賴于骨骼點。
3. 動作識別
動作識別使用的是基于骨架動作識別的時空圖卷積網(wǎng)絡(luò),開源方案是STGCN(Skeleton-Based Graph Convolutional Networks)
https://github.com/yysijie/st-gcn
一組動作,如:摔倒,由 N 幀組成,每一幀可以構(gòu)造出以骨骼點坐標(biāo)組成的空間圖,骨骼點在幀之間連接起來就構(gòu)成時間圖,骨骼點的連接和時間幀的連接便可以構(gòu)造一張時空圖。
時空圖
在時空圖上進(jìn)行多層圖卷積運算,便可生成更高層次的特征圖。然后輸入到SoftMax分類器進(jìn)行動作分類(Action Classification)。
圖卷積
本來我打算訓(xùn)練STGCN模型的,但遇到的坑實在是太多了,最后直接用了別人訓(xùn)練好的模型。
坑1. STGCN? 支持 OpenPose? 識別的骨骼點,有數(shù)據(jù)集Kinetics-skeleton?可以直接用。坑的地方在于OpenPose安裝太麻煩,需要一堆步驟,掙扎后放棄。
坑2. STGCN? 還支持 NTU RGB+D數(shù)據(jù)集,該數(shù)據(jù)集有 60 個動作分類,如:起立、行走、摔倒等。這份數(shù)據(jù)集的人體包含 25 個骨骼點,只有坐標(biāo)數(shù)據(jù),原始視頻基本搞不到,所以沒辦法知道這 25 個骨骼點對應(yīng)哪些位置,以及用什么模型能識別出這 25 個骨骼點,掙扎后放棄。
上面兩個大坑,導(dǎo)致沒法直接訓(xùn)練STGCN?模型,找了一個開源的方案,它用的是alphapose?識別 14 個骨骼點,同時修改STGCN源碼支持自定義骨骼點。
https://github.com/GajuuzZ/Human-Falling-Detect-Tracks
我看了下mediapipe包含了這 14 個骨骼點,所以可以用mediapipe識別的骨骼點輸入他的模型,實現(xiàn)動作分類。
mediapipe 32個骨骼點
選出14個關(guān)鍵骨骼點
14個骨骼點提取代碼:
STGCN?原始方案構(gòu)造的空間圖只支持openpose?18個骨骼點和NTU RGB+D數(shù)據(jù)集25個骨骼點
修改這部分源碼,以支持自定義的14個骨骼點
模型直接使用Human-Falling-Detect-Tracks項目已經(jīng)訓(xùn)練好的,實際運行發(fā)現(xiàn)識別效果很差,因為沒有看到模型訓(xùn)練過程,不確定問題出在哪。
有能力的朋友可以自己訓(xùn)練模型試試,另外,百度的Paddle?也基于STGCN?開發(fā)了一個跌倒檢測模型,只支持摔倒這一種行為的識別。
當(dāng)然大家也可以試試Transformer的方式,不需要提取骨骼點特征,直接將 N 幀圖片送入模型分類。
關(guān)于STGCN的原理,大家可以參考文章:https://www.jianshu.com/p/be85114006e3 總結(jié)的非常好。
需要源碼的朋友留言區(qū)回復(fù)即可。
如果大家覺得本文對你有用就點個 在看 鼓勵一下吧,后續(xù)我會持續(xù)分享優(yōu)秀的 Python+AI 項目。