关键点说明
mediapipe手势识别可以识别出手部的21个关键点
获取关键点坐标
模型给出的结果是归一化的坐标比例,要获取在图像中的坐标需要乘以图像的宽高
x = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].x * image_widthy = hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].y * image_height
示例代码
import cv2import mediapipe as mpimport numpy as npKey_Esc = 27mp_drawing = mp.solutions.drawing_utilsmp_drawing_styles = mp.solutions.drawing_stylesmp_hands = mp.solutions.hands# For webcam input:cap = cv2.VideoCapture(0)with mp_hands.Hands(# model_complexity=0,min_detection_confidence=0.5,min_tracking_confidence=0.5) as hands:while cap.isOpened():success, image = cap.read()if not success:print("Ignoring empty camera frame.")# If loading a video, use 'break' instead of 'continue'.continue# To improve performance, optionally mark the image as not writeable to# pass by reference.image.flags.writeable = Falseimage = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)results = hands.process(image)print('Handedness:', results.multi_handedness)# print(results.multi_hand_landmarks)# Draw the hand annotations on the image.image.flags.writeable = Trueimage = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)if results.multi_hand_landmarks:for hand_landmarks in results.multi_hand_landmarks:mp_drawing.draw_landmarks(image,hand_landmarks,mp_hands.HAND_CONNECTIONS,mp_drawing_styles.get_default_hand_landmarks_style(),mp_drawing_styles.get_default_hand_connections_style())# Flip the image horizontally for a selfie-view display.cv2.imshow('MediaPipe Hands', np.rot90(cv2.resize(cv2.flip(image, 1), (320, 240))))if cv2.waitKey(5) == Key_Esc:breakcap.release()
