In this video lesson we show you how to create simple Python classes to parse the data from mediapipe hand Landmarks and pose estimation. With these two classes, it is very easy to parse the most important data generated by mediapipe.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | import cv2 print(cv2.__version__) class mpPose: import mediapipe as mp def __init__(self,still=False,upperBody=False, smoothData=True, tol1=.5, tol2=.5): self.myPose=self.mp.solutions.pose.Pose(still,upperBody,smoothData,tol1,tol2) def Marks(self,frame): frameRGB=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) results=self.myPose.process(frameRGB) poseLandmarks=[] if results.pose_landmarks: for lm in results.pose_landmarks.landmark: poseLandmarks.append((int(lm.x*width),int(lm.y*height))) return poseLandmarks class mpHands: import mediapipe as mp def __init__(self,maxHands=2,tol1=.5,tol2=.5): self.hands=self.mp.solutions.hands.Hands(False,maxHands,tol1,tol2) def Marks(self,frame): myHands=[] frameRGB=cv2.cvtColor(frame,cv2.COLOR_BGR2RGB) results=self.hands.process(frameRGB) if results.multi_hand_landmarks != None: for handLandMarks in results.multi_hand_landmarks: myHand=[] for landMark in handLandMarks.landmark: myHand.append((int(landMark.x*width),int(landMark.y*height))) myHands.append(myHand) return myHands width=1280 height=720 cam=cv2.VideoCapture(4,cv2.CAP_DSHOW) cam.set(cv2.CAP_PROP_FRAME_WIDTH, width) cam.set(cv2.CAP_PROP_FRAME_HEIGHT,height) cam.set(cv2.CAP_PROP_FPS, 30) cam.set(cv2.CAP_PROP_FOURCC,cv2.VideoWriter_fourcc(*'MJPG')) findHands=mpHands(2) findPose=mpPose() while True: ignore, frame = cam.read() frame=cv2.resize(frame,(width,height)) handData=findHands.Marks(frame) for hand in handData: for ind in [0,5,6,7,8]: cv2.circle(frame,hand[ind],25,(255,0,255),3) poseData=findPose.Marks(frame) if len(poseData)!=0: cv2.circle(frame,poseData[0],5,(0,255,0),3) cv2.imshow('my WEBcam', frame) cv2.moveWindow('my WEBcam',0,0) if cv2.waitKey(1) & 0xff ==ord('q'): break cam.release() |