Mediapipe 全身侦测
这篇教学会使用 MediaPipe 的全身侦测模型 ( Holistic ) 侦测人体,抓取头、四肢等躯干部位,再透过 OpenCV 读取摄影镜头图像进行辨识,将五官、头手四肢躯干标记出节点以及骨架。
因为程序使用 Jupyter 搭配 Tensorflow 进行开发,所以请先阅读“使用 Anaconda”和“使用 MediaPipe”,安装对应的软件包,如果不要使用 Juputer,也可参考“使用 Python 虚拟环境”,建立虚拟环境进行实作。
使用 MediaPipe,侦测并绘制身体骨架
Mediapipe Holistic 集合了人体姿势、面部标志和手部追踪三种模型与相关的算法,可以侦测身体姿势、脸部网格、手掌动作,完整侦测则会产生 543 个侦测节点 ( 33 个姿势节点、468 个脸部节点和每只手 21 个手部节点 )。
下方的程序码延伸“读取并播放影片”文章的范例,搭配 mediapipe 全身侦测的方法,透过摄影镜头获取图像后,即时标记出身体骨架和动作。
import cv2
import mediapipe as mp
mp_drawing = mp.solutions.drawing_utils # mediapipe 繪圖方法
mp_drawing_styles = mp.solutions.drawing_styles # mediapipe 繪圖樣式
mp_holistic = mp.solutions.holistic # mediapipe 全身偵測方法
cap = cv2.VideoCapture(0)
# mediapipe 啟用偵測全身
with mp_holistic.Holistic(
min_detection_confidence=0.5,
min_tracking_confidence=0.5) as holistic:
if not cap.isOpened():
print("Cannot open camera")
exit()
while True:
ret, img = cap.read()
if not ret:
print("Cannot receive frame")
break
img = cv2.resize(img,(520,300))
img2 = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # 將 BGR 轉換成 RGB
results = holistic.process(img2) # 開始偵測全身
# 面部偵測,繪製臉部網格
mp_drawing.draw_landmarks(
img,
results.face_landmarks,
mp_holistic.FACEMESH_CONTOURS,
landmark_drawing_spec=None,
connection_drawing_spec=mp_drawing_styles
.get_default_face_mesh_contours_style())
# 身體偵測,繪製身體骨架
mp_drawing.draw_landmarks(
img,
results.pose_landmarks,
mp_holistic.POSE_CONNECTIONS,
landmark_drawing_spec=mp_drawing_styles
.get_default_pose_landmarks_style())
cv2.imshow('oxxostudio', img)
if cv2.waitKey(5) == ord('q'):
break # 按下 q 鍵停止
cap.release()
cv2.destroyAllWindows()
微信扫码关注
抖音扫码关注