0


基于mediapipe的人体33个关键点坐标(BlazePose)

前言

什么是BlazePose

BlazePose是一种轻量化的卷积神级网络架构,适用于单人的关键点检测,在人体身上标注33个关键点,在单个中层手机CPU上的执行速度要比OpenPose在20核桌面CPU[5]上快25-75倍。

人体33个关键点

33个关键点如下图所示
在这里插入图片描述

33个关键点坐标代码实现

导入库

import cv2
import mediapipe as mp
from tqdm import tqdm
import time
import matplotlib.pyplot as plt
%matplotlib inline

导入模型

mp_pose=mp.solutions.pose
mp_drawing=mp.solutions.drawing_utils
pose=mp_pose.Pose(static_image_mode=True,#选择静态图片还是连续视频帧
                 model_complexity=2,#选择人体姿态关键点检测模型,0性能差但快,2性能好但慢,1介于之间
                 smooth_landmarks=True,#是否选择平滑关键点
                 min_detection_confidence=0.5,#置信度阈值
                 min_tracking_confidence=0.5)#追踪阈值

读入图像

img=cv2.imread('C:\\Users\\123\\Desktop\\2022-6-28.jpg')
img_RGB=cv2.cvtColor(img,cv2.COLOR_BGR2RGB)#BGR转RGB

关键点检测结果

results=pose.process(img_RGB)
results.pose_landmarks

此时会输出关键点检测结果,如下图所示
在这里插入图片描述

关键点连接(人体骨架)

mp_pose.POSE_CONNECTIONS

输出如图所示
在这里插入图片描述
求关键点的归一化坐标,可用数字表示

results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_ELBOW]
或
results.pose_landmarks.landmark[13]

获取坐标值

results.pose_landmarks.landmark[13].x

求指定关键点像素坐标

h=img.shape[0]
w=img.shape[1]
results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_ELBOW].x*w
results.pose_landmarks.landmark[mp_pose.PoseLandmark.LEFT_ELBOW].x*h

解析指定关键点的真实物理坐标

results.pose_world_landmarks.landmark[mp_pose.PoseLandmark.NOSE]
或
results.pose_world_landmarks.landmark[23]

将33个关键点坐标汇总

import numpy as np
coords=np.array(results.pose_landmarks.landmark)
#汇总所有点的XYZ坐标
def get_x(each):return each.x
def get_y(each):return each.y
def get_z(each):return each.z
#分别获取关键点XYZ坐标
points_x=np.array(list(map(get_x,coords)))
points_y=np.array(list(map(get_y,coords)))
points_z=np.array(list(map(get_z,coords)))
#将三个方向坐标合并
points=np.vstack((points_x,points_y,points_z)).T

此时points就变成了33行3列,如下图所示
在这里插入图片描述


本文转载自: https://blog.csdn.net/qq_64605223/article/details/125606507
版权归原作者 尘光123 所有, 如有侵权,请联系我们删除。

“基于mediapipe的人体33个关键点坐标(BlazePose)”的评论:

还没有评论