Rumah  >  Artikel  >  Peranti teknologi  >  Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

PHPz
PHPzke hadapan
2023-04-12 08:19:022210semak imbas

Helo, semua.

Hari ini saya ingin berkongsi dengan anda projek pengesanan jatuh, lebih tepatnya, ia adalah pengecaman pergerakan manusia berdasarkan titik rangka.

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

Ia secara kasar dibahagikan kepada tiga langkah

  • Mengenal tubuh manusia
  • Mengenal rangka manusia Klik
  • Kategori Tindakan

Kod sumber projek telah dibungkus, lihat penghujung artikel untuk cara mendapatkannya.

0. chatgpt

Pertama, kita perlu mendapatkan strim video yang dipantau. Kod ini agak tetap, kita boleh terus biarkan chatgpt selesai

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

Kod yang ditulis oleh chatgpt ini tiada masalah dan boleh digunakan terus.

Tetapi apabila ia melibatkan tugas perniagaan, seperti menggunakan mediapipe untuk mengenal pasti titik rangka manusia, kod yang diberikan oleh chatgpt adalah tidak betul.

Saya rasa chatgpt​ boleh digunakan sebagai kotak alat, yang boleh bebas daripada logik perniagaan Anda boleh cuba meninggalkannya untuk chatgpt untuk diselesaikan.

Jadi, saya rasa keperluan untuk pengaturcara pada masa hadapan akan lebih memfokuskan pada keupayaan abstrak perniagaan. Tanpa berlengah lagi, mari kita kembali kepada topik.

1. Pengecaman tubuh manusia

Pengecaman tubuh manusia boleh menggunakan model pengesanan sasaran, seperti: YOLOv5​ Kami juga telah berkongsi banyak artikel tentang latihan model YOLOv5.

Tetapi di sini saya tidak menggunakan YOLOv5, tetapi mediapipe​. Kerana mediapipe berjalan lebih pantas dan berjalan lancar pada CPU.

2. Pengecaman titik tulang

Terdapat banyak model untuk mengenal pasti titik tulang, seperti alphapos dan openpose Bilangan dan kedudukan titik tulang yang dikenali oleh setiap model adalah berbeza. Contohnya, dua jenis berikut:

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

mediapipe 32 titik tulang

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

coco 17 titik tulang

Saya masih menggunakan mediapipe untuk pengecaman titik tulang Selain kelajuannya yang pantas, kelebihan lain ialah mediapipe boleh mengenali banyak titik tulang, 32 daripadanya, yang dapat memenuhi keperluan kita. Kerana klasifikasi tindakan tubuh manusia yang akan digunakan di bawah sangat bergantung pada titik rangka.

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. Pengecaman tindakan

Pengiktirafan tindakan menggunakan rangkaian konvolusi graf spatio-temporal berdasarkan pengecaman tindakan rangka Penyelesaian sumber terbuka ialah STGCN (Skeleton-. Rangkaian Konvolusi Graf Berasaskan)

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

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

Satu set tindakan, seperti: jatuh, terdiri daripada N bingkai, setiap bingkai boleh membina graf ruang yang terdiri daripada koordinat titik rangka. Titik rangka disambungkan antara bingkai untuk membentuk graf masa.

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

Graf spatial-temporal

Lakukan operasi konvolusi graf berbilang lapisan pada graf spatio-temporal untuk menjana peta ciri peringkat lebih tinggi. Kemudian ia adalah input kepada pengelas SoftMax untuk pengelasan tindakan (Pengkelasan Tindakan).

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

Graf convolution

Pada asalnya saya bercadang untuk melatih model STGCN, tetapi saya menghadapi terlalu banyak perangkap, jadi akhirnya saya hanya menggunakan orang lain untuk melatih model itu.

Pit 1. STGCN​ menyokong titik rangka yang diiktiraf oleh OpenPose​, dan terdapat dataset Kinetics-skeleton​ yang boleh digunakan secara langsung. Masalahnya ialah pemasangan OpenPose terlalu rumit dan memerlukan banyak langkah Selepas bergelut, anda berputus asa.

Pit 2. STGCN​ juga menyokong set data NTU RGB+D, yang mempunyai 60 kategori tindakan, seperti: berdiri, berjalan, jatuh, dsb. Tubuh manusia dalam set data ini mengandungi 25 titik rangka, hanya menyelaraskan data, dan video asal pada dasarnya tidak tersedia, jadi tidak ada cara untuk mengetahui kedudukan mana yang sepadan dengan 25 titik rangka ini dan model apa yang boleh digunakan untuk mengenal pasti 25 titik ini. mata rangka.

Dua perangkap besar di atas menjadikannya mustahil untuk melatih model STGCN secara langsung, saya menemui penyelesaian sumber terbuka, yang menggunakan alfapos untuk mengenal pasti 14 titik tulang, dan pada masa yang sama mengubah suai kod sumber STGCN untuk menyokong tersuai. titik tulang.

https://github.com/GajuuzZ/Human-Falling-Detect-Tracks

我看了下mediapipe包含了这 14 个骨骼点,所以可以用mediapipe识别的骨骼点输入他的模型,实现动作分类。

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

mediapipe 32个骨骼点

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

选出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个骨骼点

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

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

Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt

模型直接使用Human-Falling-Detect-Tracks项目已经训练好的,实际运行发现识别效果很差,因为没有看到模型训练过程,不确定问题出在哪。

有能力的朋友可以自己训练模型试试,另外,百度的Paddle​也基于STGCN​开发了一个跌倒检测模型,只支持摔倒这一种行为的识别。

当然大家也可以试试Transformer的方式,不需要提取骨骼点特征,直接将 N 帧Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt送入模型分类。

关于STGCN的原理,大家可以参考文章:https://www.jianshu.com/p/be85114006e3  总结的非常好。

需要源码的朋友留言区回复即可。

如果大家觉得本文对你有用就点个 在看 鼓励一下吧,后续我会持续分享优秀的 Python+AI 项目。

Atas ialah kandungan terperinci Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:51cto.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam