Heim  >  Artikel  >  Technologie-Peripheriegeräte  >  Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

PHPz
PHPznach vorne
2023-04-12 08:19:022210Durchsuche

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.

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

ist grob in drei Schritte unterteilt:

  • Erkennen Sie den menschlichen Körper erhalten Sie es.
  • 0. chatgpt
  • Zuerst müssen wir den überwachten Videostream abrufen. Dieser Code ist relativ fest. Wir können ihn direkt von chatgpt vervollständigen lassen.
Aber wenn es um geschäftliche Aufgaben geht, wie beispielsweise die Verwendung von Mediapipe zur Identifizierung menschlicher Skelettpunkte, ist der von chatgpt angegebene Code falsch.

Ich denke, dass Chatgpt als Toolbox verwendet werden kann, die unabhängig von der Geschäftslogik sein kann. Sie können versuchen, die Fertigstellung Chatgpt zu überlassen.

Ich denke also, dass sich die Anforderungen an Programmierer in Zukunft stärker auf geschäftliche Abstraktionsfähigkeiten konzentrieren werden. Kommen wir ohne weitere Umschweife zurück zum Thema.

1. Zur Erkennung des menschlichen Körpers können Zielerkennungsmodelle verwendet werden, wie zum Beispiel: YOLOv5. Wir haben bereits viele Artikel über das Training von YOLOv5-Modellen geteilt.

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigtAber 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-Punkte

Coco 17 Bone-Punkte

Für die Erkennung von Bone-Punkten verwende ich noch Mediapipe. Ein weiterer Vorteil sind neben der Geschwindigkeit die Bones Von mediapipe anerkannt Es gibt 32 Punkte, die unsere Bedürfnisse erfüllen können. Denn die nachfolgend verwendete Klassifizierung menschlicher Körperbewegungen basiert stark auf Skelettpunkten.

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)Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

https://github.com /yysijie /st-gcn

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

Eine 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

Führen Sie mehrschichtige Diagrammfaltungsoperationen für das Raum-Zeit-Diagramm durch, um Feature-Maps höherer Ebene zu generieren. Anschließend wird es zur Aktionsklassifizierung (Aktionsklassifizierung) in den SoftMax-Klassifikator eingegeben.

Graphfaltung

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigtUrsprü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 Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

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识别的骨骼点输入他的模型,实现动作分类。

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

mediapipe 32个骨骼点

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

选出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​原始方案构造的空间图只支持openpose​18个骨骼点和NTU RGB+D数据集25个骨骼点

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

修改这部分源码,以支持自定义的14个骨骼点

Die Sturzerkennung basiert auf der Erkennung menschlicher Skelettpunkte. Ein Teil des Codes wird mit Chatgpt vervollständigt

模型直接使用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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:51cto.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen