微信公众号:OpenCV开发者联盟
关注获取更多计算机视觉与深度学习知识
姿态评估landmark介绍
MediaPipe支持姿态评估,我刚开始看到很激动,然后用一个视频测试一下,发现无论多少个人,它只会找一个,后来我看了官方文档才知道,它只支持一个人,不支持多人得姿态评估,这样就显得比较鸡肋!而且感觉好坑,说明开源就是用来挖坑的,连谷歌都避免不了。姿态评估支持的landmark点位图如下:
理论上这样的,但是我测试发现,当有背景干扰或者遮挡重叠等情况下,就会出现各自找不到关键点的情况。
单人姿态评估
单人姿态评估只要调用MediaPipe相关API函数就好了,主要师要注意两个相关的参数配置
min_detection_confidence
min_tracking_confidence
取值范围均为0~1之间,默认为0.5,参考官方的代码,运行测试如下图:
相关代码如下:
with mp_pose.Pose(
static_image_mode=True,
min_detection_confidence=0.5) as pose:
image.flags.writeable = False
image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
results = pose.process(image)
# Draw the pose annotation on the image.
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)
mp_drawing.draw_landmarks(
image,
results.pose_landmarks,
mp_pose.POSE_CONNECTIONS)
# Flip the image horizontally for a selfie-view display.
cv2.imshow('MediaPipe Pose', image)
cv2.imwrite('D:/mpp.png', image)
多人姿态评估
官方的代码只支持单人姿态评估,不管图象中有多少人,只会选择其中之一!所以我不得不借助OpenVINO中的行人检测模型,先给图象来一波行人检测,然后拆分为多个ROI行人区域,分别进行姿态评估,这样算是支持多人了,运行结果如下:
相关代码如下:
with mp_pose.Pose(
static_image_mode=True,
min_detection_confidence=0.5) as pose:
frame = cv2.imread("D:/images/alex.jpg")
img1 = cv2.resize(frame, (w, h))
img1 = img1.transpose(2, 0, 1)
inf_start = time.time()
res = exec_net.infer(inputs={input_blob: [img1]})
inf_end = time.time() - inf_start
print("infer time(ms):%.3f" % (inf_end * 1000))
ih, iw, ic = frame.shape
res = res[out_blob]
for obj in res[0][0]:
if obj[2] > 0.95:
xmin = int(obj[3] * iw)
ymin = int(obj[4] * ih)
xmax = int(obj[5] * iw)
ymax = int(obj[6] * ih)
# cv2.rectangle(frame, (xmin, ymin), (xmax, ymax), (0, 255, 255), 2, 8)
roi = frame[ymin:ymax, xmin-10:xmax+10, :]
image_height, image_width, _ = roi.shape
# Convert the BGR image to RGB before processing.
results = pose.process(cv2.cvtColor(roi, cv2.COLOR_BGR2RGB))
mp_drawing.draw_landmarks(
roi,
results.pose_landmarks,
mp_pose.POSE_CONNECTIONS)
cv2.imwrite('D:/alex.png', frame)
这样就支持视频跟图象任意人数的姿态评估了,调包开发的天又亮了~~~~~
扫码关注
OpenCV开发者联盟,
后台回复 “源码” 获取完整演示程序
专注各种语言的OpenCV开发教程分享
OpenCV周边开发技术应用!
扫码查看OpenCV+Pytorch系统化学习路线图
推荐阅读
CV全栈开发者说 - 从传统算法到深度学习怎么修炼
Pytorch轻松实现经典视觉任务
教程推荐 | Pytorch框架CV开发-从入门到实战
OpenCV4 C++学习 必备基础语法知识三
OpenCV4 C++学习 必备基础语法知识二
OpenCV4.5.4 人脸检测+五点landmark新功能测试
OpenCV4.5.4人脸识别详解与代码演示
OpenCV二值图象分析之Blob分析找圆