###こんにちは、みんな。
今日は、転倒検出プロジェクトについてお話したいと思います。正確には、骨格点に基づく人間の動作認識です。#大きく分けて 3 つのステップ
#人体を認識する0.chatgpt
#chatgpt によって書かれたこのコードは問題なく、直接使用できます。
しかし、メディアパイプを使用して人間のスケルトン ポイントを識別するなどのビジネス タスクに関しては、chatgpt によって与えられるコードは正しくありません。 chatgpt はビジネス ロジックから独立したツールボックスとして使用できると思います。chatgpt に任せて完成させることもできます。 したがって、今後のプログラマーに求められる要件は、ビジネスの抽象化能力がより重視されるようになると思います。早速、本題に戻りましょう。 1. 人体認識人体認識では、YOLOv5 などのターゲット検出モデルを使用できます。YOLOv5 モデルのトレーニングに関する多くの記事も以前に共有しました。 ただし、ここでは YOLOv5 ではなく、mediapipe を使用しました。 Mediapipe は CPU 上でより高速に動作し、スムーズに動作するためです。 2. スケルトンポイントの認識スケルトンポイントの認識にはアルファポーズやオープンポーズなど多くのモデルがあり、モデルごとに認識されるスケルトンポイントの数や位置が異なります。たとえば、次の 2 種類:mediapipe 32 ボーン ポイント
coco 17 ボーン ポイント
私は今でもボーン ポイントの認識に mediapipe を使用していますが、速度が速いことに加えて、もう 1 つの利点は、mediapipe が多くのボーン ポイント (そのうち 32 個) を認識し、ニーズを満たすことができることです。以下で使用する人体の動きの分類は骨格点に大きく依存しているためです。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() )
落下などの一連のアクションは N フレームで構成されます1 つのフレームごとに骨格点座標から構成される空間グラフを構築できます。骨格点をフレーム間で接続して時間グラフを形成します。骨格点の接続と時間フレームの接続により時空間グラフを構築できます。
時空間グラフ
時空間グラフ上で多層グラフの畳み込み演算を実行して、より高レベルの特徴マップを生成します。次に、それはアクション分類 (アクション分類) のための SoftMax 分類器に入力されます。Graph Convolution
当初は STGCN モデルをトレーニングする予定でしたが、落とし穴が多すぎたので、結局他の人を使って直接トレーニングすることにしました。モデル。 ピット 1. STGCN は OpenPose によって認識されるスケルトン ポイントをサポートしており、直接使用できるデータセット Kinetics-skeleton があります。落とし穴は、OpenPose のインストールが面倒で手順が多く、苦労したあげく諦めてしまうということです。 ピット 2。STGCN は、立ち上がる、歩く、落ちるなどの 60 のアクション カテゴリを含む NTU RGB D データ セットもサポートしています。このデータセットの人体には 25 個の骨格点が含まれており、座標データのみが含まれており、元のビデオは基本的に入手できないため、これらの 25 個の骨格点がどの位置に対応するのか、また、これら 25 個の骨格点を識別するためにどのモデルを使用できるのかを知る方法はありません。骨格ポイント. 苦労して、そして諦める。 上記の 2 つの大きな落とし穴により、STGCN モデルを直接トレーニングすることが不可能になりました。私は、アルファポーズを使用して 14 個のボーン ポイントを識別し、カスタム ボーン ポイントをサポートするように STGCN ソース コードを修正するオープン ソース ソリューションを見つけました。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 帧転倒検知、骨格点人間動作認識に基づき、コードの一部はChatgptで完成送入模型分类。
关于STGCN的原理,大家可以参考文章:https://www.jianshu.com/p/be85114006e3 总结的非常好。
需要源码的朋友留言区回复即可。
如果大家觉得本文对你有用就点个 在看 鼓励一下吧,后续我会持续分享优秀的 Python+AI 项目。
以上が転倒検知、骨格点人間動作認識に基づき、コードの一部はChatgptで完成の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。