Rumah >Peranti teknologi >AI >Pengesanan jatuh, berdasarkan pengecaman tindakan manusia titik rangka, sebahagian daripada kod dilengkapkan dengan Chatgpt
Helo, semua.
Hari ini saya ingin berkongsi dengan anda projek pengesanan jatuh, lebih tepatnya, ia adalah pengecaman pergerakan manusia berdasarkan titik rangka.
Ia secara kasar dibahagikan kepada tiga langkah
Kod sumber projek telah dibungkus, lihat penghujung artikel untuk cara mendapatkannya.
Pertama, kita perlu mendapatkan strim video yang dipantau. Kod ini agak tetap, kita boleh terus biarkan chatgpt selesai
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.
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.
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:
mediapipe 32 titik tulang
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() )
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
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.
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).
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识别的骨骼点输入他的模型,实现动作分类。
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 帧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!