前言
什么是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列,如下图所示
版权归原作者 尘光123 所有, 如有侵权,请联系我们删除。