안녕하세요 여러분.
오늘 저는 넘어짐 감지 프로젝트를 여러분과 공유하고 싶습니다. 정확하게는 골격점을 기반으로 한 인간의 움직임 인식입니다.
은 크게 3단계로 나누어집니다.
프로젝트 소스 코드가 패키지되어 있습니다. 방법은 기사 끝 부분을 참조하세요. 그것을 얻으십시오.
먼저 모니터링되는 비디오 스트림을 가져와야 합니다. 이 코드는 비교적 고정되어 있습니다. chatgpt가 직접 작성한 이 코드는 문제가 없으며 직접 사용할 수 있습니다.
그러나 미디어파이프를 사용하여 인체 골격 지점을 식별하는 등의 비즈니스 작업에서는 chatgpt에서 제공하는 코드가 올바르지 않습니다.
chatgpt는 비즈니스 로직과 독립적인 도구 상자로 사용될 수 있다고 생각합니다. 완료하려면 chatgpt에 맡겨두는 것이 좋습니다. 그래서 앞으로 프로그래머에 대한 요구 사항은 비즈니스 추상화 기능에 더 중점을 둘 것이라고 생각합니다. 더 이상 고민하지 않고 주제로 돌아가겠습니다. 1. 인체 인식인체 인식은 YOLOv5와 같은 표적 탐지 모델을 사용할 수 있습니다. 또한 이전에 YOLOv5 모델 훈련에 대한 많은 기사를 공유했습니다. 하지만 여기서는 YOLOv5가 아닌 미디어파이프를 사용합니다. 미디어파이프는 더 빠르게 실행되고 CPU에서 원활하게 실행되기 때문입니다. 2. 뼈점 인식알파포즈, 오픈포즈 등 뼈점을 식별하는 모델이 많이 있습니다. 각 모델에서 인식하는 뼈점의 수와 위치가 다릅니다. 예를 들어 다음 두 가지 유형은mediapipe 32 Bone Points
coco 17 Bone Points
저는 아직도 Bone Point 인식을 위해 Mediapipe를 사용하고 있습니다. 속도 외에도 또 다른 장점은 뼈를 인식한다는 것입니다. 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() )3. 동작 인식동작 인식은 스켈레톤 동작 인식을 기반으로 한 시공간 그래프 컨볼루션 네트워크를 사용합니다. 오픈 소스 솔루션은 STGCN(Skeleton-Based Graph Convolutional Networks)https://github.com /yysijie /st-gcn
낙하 등의 일련의 동작은 N개의 프레임으로 구성됩니다. 각 프레임은 프레임 간 골격점을 연결하여 시간 그래프를 형성하는 공간 그래프를 구성할 수 있습니다. , 뼈점의 연결과 시간 프레임의 연결을 통해 시공간 그래프를 구성할 수 있습니다.
시공간 그래프
시공간 그래프에 대해 다층 그래프 컨볼루션 작업을 수행하여 더 높은 수준의 특징 맵을 생성합니다. 그런 다음 동작 분류(Action Classification)를 위해 SoftMax 분류기에 입력됩니다.
Graph convolution
원래는 STGCN 모델을 학습시키려고 했으나, 함정이 너무 많아 결국 남들이 학습시킨 모델을 직접 사용하게 되었습니다.
Pit 1. STGCN은 OpenPose에서 인식하는 스켈레톤 포인트를 지원하며, 직접 사용할 수 있는 Kinetics-skeleton 데이터셋이 있습니다. 함정은 OpenPose 설치가 너무 번거롭고 많은 단계가 필요하다는 것입니다. Pit 2. STGCN은 일어서기, 걷기, 넘어지기 등 60가지 동작 범주가 있는 NTU RGB+D 데이터 세트도 지원합니다. 이 데이터 세트의 인체에는 25개의 골격점이 포함되어 있고 좌표 데이터만 있으며 원본 영상은 기본적으로 사용할 수 없으므로 이 25개의 골격점이 어느 위치에 해당하는지, 어떤 모델을 사용하여 이 25개를 식별할 수 있는지 알 수 없습니다. 뼈대 포인트. 그러면 포기하세요. 위의 두 가지 큰 함정으로 인해 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!