Spaces:
Runtime error
Runtime error
| import cv2 | |
| import mediapipe as mp | |
| from PIL import ImageFont, ImageDraw, Image | |
| import matplotlib.pyplot as plt | |
| import numpy as np | |
| import time | |
| mp_drawing = mp.solutions.drawing_utils | |
| mp_hands = mp.solutions.hands | |
| mp_drawing_styles = mp.solutions.drawing_styles | |
| # For webcam input: | |
| cap = cv2.VideoCapture(0) | |
| with mp_hands.Hands( | |
| 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 | |
| # Flip the image horizontally for a later selfie-view display, and convert | |
| # the BGR image to RGB. | |
| image = cv2.cvtColor(cv2.flip(image, 1), cv2.COLOR_BGR2RGB) | |
| # To improve performance, optionally mark the image as not writeable to | |
| # pass by reference. | |
| image.flags.writeable = False | |
| results = hands.process(image) | |
| # Draw the hand annotations on the image. | |
| image.flags.writeable = True | |
| image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR) | |
| image_height, image_width, _ = image.shape | |
| if results.multi_hand_landmarks: | |
| for hand_landmarks in results.multi_hand_landmarks: | |
| # μμ§λ₯Ό μ μΈν λλ¨Έμ§ 4κ° μκ°λ½μ λ§λ μμΉ κ΄κ³λ₯Ό νμΈνμ¬ νλκ·Έ λ³μλ₯Ό μ€μ ν©λλ€. μκ°λ½μ μΌμλ‘ νΈ μνμΈμ§ νμΈν©λλ€. | |
| thumb_finger_state = 0 | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_CMC].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_MCP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_MCP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_IP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_IP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP].y * image_height: | |
| thumb_finger_state = 1 | |
| index_finger_state = 0 | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_MCP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_PIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_PIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_DIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_DIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.INDEX_FINGER_TIP].y * image_height: | |
| index_finger_state = 1 | |
| middle_finger_state = 0 | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_MCP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_PIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_PIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_DIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_DIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.MIDDLE_FINGER_TIP].y * image_height: | |
| middle_finger_state = 1 | |
| ring_finger_state = 0 | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_MCP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_PIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_PIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_DIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_DIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.RING_FINGER_TIP].y * image_height: | |
| ring_finger_state = 1 | |
| pinky_finger_state = 0 | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_MCP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_PIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_PIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_DIP].y * image_height: | |
| if hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_DIP].y * image_height >= hand_landmarks.landmark[mp_hands.HandLandmark.PINKY_TIP].y * image_height: | |
| pinky_finger_state = 1 | |
| # μκ°λ½ μμΉ νμΈν κ°μ μ¬μ©νμ¬ κ°μ,λ°μ,보 μ€ νλλ₯Ό μΆλ ₯ ν΄μ€λλ€. | |
| font = ImageFont.truetype("fonts/gulim.ttc", 60) | |
| capture = image | |
| image = Image.fromarray(image) | |
| draw = ImageDraw.Draw(image) | |
| text = "" | |
| if middle_finger_state == 1 and ring_finger_state == 0 and pinky_finger_state == 0: | |
| text = "fuck you" | |
| if index_finger_state == 1 and middle_finger_state == 1: | |
| text = "κ°μ" | |
| time.sleep(0.2) | |
| cv2.imwrite('frame.png', capture) | |
| cap.release() | |
| cv2.destroyAllWindows() | |
| if thumb_finger_state == 1 and index_finger_state == 1 and middle_finger_state == 1 and ring_finger_state == 1 and pinky_finger_state == 1: | |
| text = "보" | |
| if index_finger_state == 0 and middle_finger_state == 0 and ring_finger_state == 0 and pinky_finger_state == 0: | |
| text = "μ£Όλ¨Ή" | |
| l,t,r,b = font.getbbox(text) | |
| w,h = r-l, b-t | |
| x = 50 | |
| y = 50 | |
| draw.rectangle((x, y, x + w, y + h), fill='black') | |
| draw.text((x, y), text, font=font, fill=(255, 255, 255)) | |
| image = np.array(image) | |
| 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()) | |
| cv2.imshow('MediaPipe Hands', image) | |
| if cv2.waitKey(5) & 0xFF == 27: | |
| break | |
| cap.release() | |
| cv2.destroyAllWindows() |