mediapipe的安装使用需要python >= 3.7的版本
# MediaPipe是一个用于构建机器学习管道的框架,用于处理视频、音频等时间序列数据。这个跨平台框架适用于桌面/服务器、Android、iOS和嵌入式设备,如Raspberry Pi和Jetson Nano。
# mediapipe.solutions.hands # 手部关键点检测
# mediapipe.solutions.pose # 人体姿态检测
# mediapipe.solutions.face_mesh# 人脸网状检测
# mediapipe.solutions.face_detection # 人脸识别
。。。。。。
人体姿态检测关键点绘制基础代码
import cv2 as cv import mediapipe as mp import time # 2 #mediapipe.solutions.drawing_utils.draw_landmarks()绘制关键点的连线 mpDraw = mp.solutions.drawing_utils #mediapipe.solutions.pose.Pose()姿态关键点检测函数 mpPose = mp.solutions.pose pose = mpPose.Pose() # pose = mpPose.Pose(static_image_mode=False, # 静态图模式,False代表置信度高时继续跟踪,True代表实时跟踪检测新的结果 # #upper_body_only=False, # 是否只检测上半身 # smooth_landmarks=True, # 平滑,一般为True # min_detection_confidence=0.5, # 检测置信度 # min_tracking_confidence=0.5) # 跟踪置信度 # # 检测置信度大于0.5代表检测到了,若此时跟踪置信度大于0.5就继续跟踪,小于就沿用上一次,避免一次又一次重复使用模型 pTime = 0 # 设置第一帧开始处理的起始时间 cap = cv.VideoCapture('video/JUMP.mp4') cv.namedWindow("frame", cv.WINDOW_NORMAL) # 创建一个可调整大小的窗口 # 或者设置窗口大小 #w,h = 640,480 #cap.set(3, w) #cap.set(4, h) while True: ret,frame = cap.read() frame_RGB = cv.cvtColor(frame,cv.COLOR_BGR2RGB) # 3.将图像传给姿态识别模型,返回关键点信息 res = pose.process(frame_RGB) # 查看体态关键点坐标: # landmark # { # x: 0.33543533086776733 # y: 0.7013387680053711 # z: 0.45365121960639954 # visibility: 0.9783190488815308 # } #print(res.pose_landmarks) if res.pose_landmarks: # 绘制姿态坐标点,frame为画板,传入姿态点坐标,坐标连线 #mediapipe.solutions.drawing_utils.draw_landmarks()绘制关键点的连线 # mpDraw.draw_landmarks(frame,res.pose_landmarks) mpDraw.draw_landmarks(frame,res.pose_landmarks,mpPose.POSE_CONNECTIONS) for id,lm in enumerate(res.pose_landmarks.landmark): h,w,c = frame.shape # print('id:',id) # print('lm:\n',lm) cx,cy = int(lm.x*w),int(lm.y*h) cv.circle(frame,(cx,cy),10,(255,0,0),cv.FILLED) #cv.LINE_AA:给出了抗锯齿的线条,非常适合曲线。(cv.LINE_AA=16) #cv.LINE_4: 4 连通线 #cv.LINE_8: 8 连通线,默认。 #cv.FILLED: cv.FILLED=-1 if ret== True: #变量“ cTime”,“ pTime”和“ fps”用于计算每秒的读取帧 cTime = time.time()#用于获取当前时间的时间戳(从 1970 年 1 月 1 日 00:00:00 到当前时间的秒数) fps = 1/(cTime-pTime) pTime = cTime cv.putText(fr