import cv2 import gradio as gr import mediapipe as mp mp_drawing = mp.solutions.drawing_utils mp_drawing_styles = mp.solutions.drawing_styles mp_hands = mp.solutions.hands # For static images: def fun(img): print(type(img)) with mp_hands.Hands(static_image_mode=True,max_num_hands=2,min_detection_confidence=0.5) as hands: #for idx, file in enumerate(IMAGE_FILES): # Read an image, flip it around y-axis for correct handedness output (see # above). #cv2.imwrite('img.png',img[:,:,::-1]) #image = cv2.flip(cv2.imread('./img.png'), 1) image = cv2.flip(img[:,:,::-1], 1) # Convert the BGR image to RGB before processing. results = hands.process(cv2.cvtColor(image, cv2.COLOR_BGR2RGB)) print(type(results.multi_handedness)) if results.multi_handedness == None: return(cv2.imread('nohands.png')) # Print handedness and draw hand landmarks on the image. print('Handedness:', results.multi_handedness) #if not results.multi_hand_landmarks: # continue image_height, image_width, _ = image.shape annotated_image = image.copy() for hand_landmarks in results.multi_hand_landmarks: print('hand_landmarks:', hand_landmarks) print( f'Index finger tip coordinates: (', f'{hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].x * image_width}, ' f'{hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].y * image_height})' ) mp_drawing.draw_landmarks( annotated_image, hand_landmarks, mp_hands.HAND_CONNECTIONS, mp_drawing_styles.get_default_hand_landmarks_style(), mp_drawing_styles.get_default_hand_connections_style()) res = cv2.flip(annotated_image, 1) #cv2.imwrite('res.png',res[:,:,::-1]) print(res.shape) return res[:,:,::-1] image = gr.inputs.Image(source='webcam') keypoint = gr.outputs.Image() examples = ['ex1.jpg'] css = """ footer {display:none !important} .output-markdown{display:none !important} .gr-button-primary { z-index: 14; height: 43px; width: 130px; left: 0px; top: 0px; padding: 0px; cursor: pointer !important; background: none rgb(17, 20, 45) !important; border: none !important; text-align: center !important; font-family: Poppins !important; font-size: 14px !important; font-weight: 500 !important; color: rgb(255, 255, 255) !important; line-height: 1 !important; border-radius: 12px !important; transition: box-shadow 200ms ease 0s, background 200ms ease 0s !important; box-shadow: none !important; } .gr-button-primary:hover{ z-index: 14; height: 43px; width: 130px; left: 0px; top: 0px; padding: 0px; cursor: pointer !important; background: none rgb(37, 56, 133) !important; border: none !important; text-align: center !important; font-family: Poppins !important; font-size: 14px !important; font-weight: 500 !important; color: rgb(255, 255, 255) !important; line-height: 1 !important; border-radius: 12px !important; transition: box-shadow 200ms ease 0s, background 200ms ease 0s !important; box-shadow: rgb(0 0 0 / 23%) 0px 1px 7px 0px !important; } .hover\:bg-orange-50:hover { --tw-bg-opacity: 1 !important; background-color: rgb(229,225,255) !important; } """ intf = gr.Interface(fn=fun, inputs=image, outputs=keypoint, title="Keypoint Detection | Data Science Dojo", examples=examples, css=css) intf.launch(inline=False,debug=True)