Skip to content

A finger gesture detection program using MediaPipe and OpenCV that translates hand gestures into romantic love messages.

Notifications You must be signed in to change notification settings

ByteBreakerGhost-69/LoveSign

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 

Repository files navigation

import cv2
import mediapipe as mp

# Inisialisasi MediaPipe Hands
mp_hands = mp.solutions.hands
hands = mp_hands.Hands(static_image_mode=False, max_num_hands=2, min_detection_confidence=0.7)
mp_drawing = mp.solutions.drawing_utils

# Fungsi untuk mendeteksi jari yang terangkat
def fingers_up(hand_landmarks):
    tips_ids = [
        mp_hands.HandLandmark.THUMB_TIP,
        mp_hands.HandLandmark.INDEX_FINGER_TIP,
        mp_hands.HandLandmark.MIDDLE_FINGER_TIP,
        mp_hands.HandLandmark.RING_FINGER_TIP,
        mp_hands.HandLandmark.PINKY_TIP
    ]
    pip_ids = [
        mp_hands.HandLandmark.THUMB_IP,
        mp_hands.HandLandmark.INDEX_FINGER_PIP,
        mp_hands.HandLandmark.MIDDLE_FINGER_PIP,
        mp_hands.HandLandmark.RING_FINGER_PIP,
        mp_hands.HandLandmark.PINKY_PIP
    ]

    fingers = []
    for tip, pip in zip(tips_ids, pip_ids):
        if hand_landmarks.landmark[tip].y < hand_landmarks.landmark[pip].y:
            fingers.append(1)
        else:
            fingers.append(0)

    # Deteksi khusus untuk ibu jari
    thumb_tip = hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_TIP]
    thumb_ip = hand_landmarks.landmark[mp_hands.HandLandmark.THUMB_IP]
    if (thumb_tip.x > thumb_ip.x and hand_landmarks.landmark[mp_hands.HandLandmark.WRIST].x < thumb_tip.x) or \
       (thumb_tip.x < thumb_ip.x and hand_landmarks.landmark[mp_hands.HandLandmark.WRIST].x > thumb_tip.x):
        fingers[0] = 1

    return fingers

# Buka kamera
cap = cv2.VideoCapture(0)

# Pesan untuk setiap jari
finger_messages = {
    0: "AKU",
    1: "SANGAT",
    2: "MENCINTAI",
    3: "KAMU",
    4: "......."
}

# Warna untuk tangan kiri dan kanan
hand_colors = [(0, 0, 255), (255, 0, 0)]  # Merah dan Biru

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        continue

# Konversi warna BGR ke RGB
image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
 image.flags.writeable = False

# Deteksi tangan
results = hands.process(image)

# Kembalikan ke BGR untuk ditampilkan
image.flags.writeable = True
image = cv2.cvtColor(image, cv2.COLOR_RGB2BGR)

if results.multi_hand_landmarks:
    for hand_idx, hand_landmarks in enumerate(results.multi_hand_landmarks):
        # Gambar landmark tangan dengan warna berbeda
        mp_drawing.draw_landmarks(
            image, 
            hand_landmarks, 
            mp_hands.HAND_CONNECTIONS,
            mp_drawing.DrawingSpec(color=hand_colors[hand_idx % 2], thickness=2, circle_radius=2),
            mp_drawing.DrawingSpec(color=hand_colors[hand_idx % 2], thickness=2, circle_radius=2)
        )
        
        # Deteksi jari yang terangkat
        fingers = fingers_up(hand_landmarks)
        
        # Tampilkan pesan untuk tangan ini
        for i, is_up in enumerate(fingers):
            if is_up:
                # Posisi y berbeda untuk setiap tangan
                y_position = 50 + hand_idx * 150 + i * 30
                cv2.putText(image, finger_messages[i], 
                           (50 + hand_idx * 300, y_position), 
                           cv2.FONT_HERSHEY_SIMPLEX, 0.8, 
                           hand_colors[hand_idx % 2], 2, cv2.LINE_AA)

    # Tampilkan gambar
    cv2.imshow('Pesan dengan Dua Tangan', image)

    # Keluar dengan menekan 'q'
    if cv2.waitKey(10) & 0xFF == ord('q'):
        break

# Bersihkan
cap.release()
cv2.destroyAllWindows()   

About

A finger gesture detection program using MediaPipe and OpenCV that translates hand gestures into romantic love messages.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published