Hallo zusammen.
Heute möchte ich ein Projekt zur Sturzerkennung mit Ihnen teilen, genauer gesagt, es handelt sich um die Erkennung menschlicher Bewegungen basierend auf Skelettpunkten.
ist grob in drei Schritte unterteilt:
Aber hier verwende ich nicht YOLOv5, sondern mediapipe. Denn Mediapipe läuft schneller und läuft flüssig auf der CPU.
2. Knochenpunkterkennung
Es gibt viele Modelle zur Identifizierung von Knochenpunkten, wie z. B. Alphapose und Openpose. Die Anzahl und Position der von jedem Modell erkannten Knochenpunkte ist unterschiedlich. Zum Beispiel die folgenden zwei Typen:
Mediapipe 32 Bone-PunkteCoco 17 Bone-Punkte
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) results = pose.process(image) if not results.pose_landmarks: continue # 识别人体骨骼点 image.flags.writeable = True image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) mp_drawing.draw_landmarks( image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS, landmark_drawing_spec=mp_drawing_styles.get_default_pose_landmarks_style() )
3. Die Aktionserkennung verwendet ein räumlich-zeitliches Graph-Faltungsnetzwerk, das auf der Skelett-Aktionserkennung basiert. Die Open-Source-Lösung ist STGCN (Skeleton-Based Graph Convolutional Networks)
https://github.com /yysijie /st-gcnEine Reihe von Aktionen, wie z. B. Fallen, besteht aus N Frames. Jeder Frame kann ein Raumdiagramm erstellen, das aus Skelettpunktkoordinaten besteht, die zwischen Frames verbunden sind, um ein Zeitdiagramm zu bilden . Durch die Verbindung von Knochenpunkten und die Verbindung von Zeitrahmen kann ein Raum-Zeit-Diagramm erstellt werden.Raum-Zeit-Diagramm
Ursprünglich hatte ich vor, das STGCN-Modell zu trainieren, bin aber auf zu viele Fallstricke gestoßen, sodass ich am Ende ein von anderen trainiertes Modell verwendet habe.
Pit 1. STGCN unterstützt von OpenPose erkannte Skelettpunkte und es gibt einen Datensatz „Kinetics-skeleton“, der direkt verwendet werden kann. Die Gefahr besteht darin, dass die Installation von OpenPose zu umständlich ist und viele Schritte erfordert. Nach dem Kampf geben Sie auf.
Pit 2. STGCN unterstützt auch den NTU RGB+D-Datensatz, der 60 Aktionskategorien enthält, wie zum Beispiel: Aufstehen, Gehen, Fallen usw. Der menschliche Körper in diesem Datensatz enthält 25 Skelettpunkte, nur Koordinatendaten, und das Originalvideo ist grundsätzlich nicht verfügbar. Daher gibt es keine Möglichkeit zu wissen, welchen Positionen diese 25 Skelettpunkte entsprechen und welches Modell zur Identifizierung dieser 25 verwendet werden kann Skelettpunkte. Dann aufgeben.
Die beiden oben genannten großen Fallstricke machten es unmöglich, das STGCN-Modell direkt zu trainieren. Ich habe eine Open-Source-Lösung gefunden, die Alphapose zur Identifizierung von 14 Bone-Punkten verwendete, und den STGCN-Quellcode so geändert, dass er benutzerdefinierte Bone-Punkte unterstützt.https://github.com/GajuuzZ/Human-Falling-Detect-Tracks
我看了下mediapipe包含了这 14 个骨骼点,所以可以用mediapipe识别的骨骼点输入他的模型,实现动作分类。
mediapipe 32个骨骼点
选出14个关键骨骼点
14个骨骼点提取代码:
KEY_JOINTS = [ mp_pose.PoseLandmark.NOSE, mp_pose.PoseLandmark.LEFT_SHOULDER, mp_pose.PoseLandmark.RIGHT_SHOULDER, mp_pose.PoseLandmark.LEFT_ELBOW, mp_pose.PoseLandmark.RIGHT_ELBOW, mp_pose.PoseLandmark.LEFT_WRIST, mp_pose.PoseLandmark.RIGHT_WRIST, mp_pose.PoseLandmark.LEFT_HIP, mp_pose.PoseLandmark.RIGHT_HIP, mp_pose.PoseLandmark.LEFT_KNEE, mp_pose.PoseLandmark.RIGHT_KNEE, mp_pose.PoseLandmark.LEFT_ANKLE, mp_pose.PoseLandmark.RIGHT_ANKLE ] landmarks = results.pose_landmarks.landmark joints = np.array([[landmarks[joint].x * image_w, landmarks[joint].y * image_h, landmarks[joint].visibility] for joint in KEY_JOINTS])
STGCN原始方案构造的空间图只支持openpose18个骨骼点和NTU RGB+D数据集25个骨骼点
修改这部分源码,以支持自定义的14个骨骼点
模型直接使用Human-Falling-Detect-Tracks项目已经训练好的,实际运行发现识别效果很差,因为没有看到模型训练过程,不确定问题出在哪。
有能力的朋友可以自己训练模型试试,另外,百度的Paddle也基于STGCN开发了一个跌倒检测模型,只支持摔倒这一种行为的识别。
当然大家也可以试试Transformer的方式,不需要提取骨骼点特征,直接将 N 帧Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt送入模型分类。
关于STGCN的原理,大家可以参考文章:https://www.jianshu.com/p/be85114006e3 总结的非常好。
需要源码的朋友留言区回复即可。
如果大家觉得本文对你有用就点个 在看 鼓励一下吧,后续我会持续分享优秀的 Python+AI 项目。
Das obige ist der detaillierte Inhalt vonDie Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!