Created
September 30, 2024 02:31
-
-
Save secemp9/6b7dc07c64e141beb8ae707f591bab63 to your computer and use it in GitHub Desktop.
fixed yacine code
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import cv2 | |
import numpy as np | |
import mediapipe as mp | |
# Initialize mediapipe Face Mesh and Hands solutions | |
mp_face_mesh = mp.solutions.face_mesh | |
mp_hands = mp.solutions.hands | |
mp_drawing = mp.solutions.drawing_utils | |
mp_drawing_styles = mp.solutions.drawing_styles | |
# Set up the webcam | |
cap = cv2.VideoCapture(0) | |
# Initialize Face Mesh and Hands | |
with mp_face_mesh.FaceMesh(max_num_faces=1, refine_landmarks=True, min_detection_confidence=0.5, min_tracking_confidence=0.5) as face_mesh, \ | |
mp_hands.Hands(max_num_hands=2, min_detection_confidence=0.5, min_tracking_confidence=0.5) as hands: | |
while cap.isOpened(): | |
ret, frame = cap.read() | |
if not ret: | |
break | |
# Convert the BGR image to RGB for processing | |
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) | |
# Process the face and hands in the frame | |
face_results = face_mesh.process(rgb_frame) | |
hand_results = hands.process(rgb_frame) | |
# Create a black image to draw the landmarks on | |
black_image = np.zeros(frame.shape, dtype=np.uint8) | |
# Draw face landmarks if detected | |
if face_results.multi_face_landmarks: | |
for face_landmarks in face_results.multi_face_landmarks: | |
mp_drawing.draw_landmarks( | |
image=black_image, | |
landmark_list=face_landmarks, | |
connections=mp_face_mesh.FACEMESH_TESSELATION, | |
landmark_drawing_spec=None, | |
connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_tesselation_style()) | |
mp_drawing.draw_landmarks( | |
image=black_image, | |
landmark_list=face_landmarks, | |
connections=mp_face_mesh.FACEMESH_CONTOURS, | |
landmark_drawing_spec=None, | |
connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_contours_style()) | |
mp_drawing.draw_landmarks( | |
image=black_image, | |
landmark_list=face_landmarks, | |
connections=mp_face_mesh.FACEMESH_IRISES, | |
landmark_drawing_spec=None, | |
connection_drawing_spec=mp_drawing_styles.get_default_face_mesh_iris_connections_style()) | |
# Draw hand landmarks if detected | |
if hand_results.multi_hand_landmarks: | |
for hand_landmarks in hand_results.multi_hand_landmarks: | |
mp_drawing.draw_landmarks( | |
image=black_image, | |
landmark_list=hand_landmarks, | |
connections=mp_hands.HAND_CONNECTIONS, | |
landmark_drawing_spec=mp_drawing_styles.get_default_hand_landmarks_style(), | |
connection_drawing_spec=mp_drawing_styles.get_default_hand_connections_style()) | |
# Resize the image to make it bigger | |
scale_factor = 1.5 # Adjust this value to change the window size | |
width = int(black_image.shape[1] * scale_factor) | |
height = int(black_image.shape[0] * scale_factor) | |
resized_image = cv2.resize(black_image, (width, height), interpolation=cv2.INTER_LINEAR) | |
# Display the annotated image | |
cv2.imshow('Face Mesh and Hands', resized_image) | |
# Break the loop if 'q' is pressed | |
if cv2.waitKey(1) & 0xFF == ord('q'): | |
break | |
# Release resources | |
cap.release() | |
cv2.destroyAllWindows() |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment