-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhand_detection.py
More file actions
26 lines (20 loc) · 1.39 KB
/
hand_detection.py
File metadata and controls
26 lines (20 loc) · 1.39 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import cv2
import numpy as np
import mediapipe as mp
# Funkcija za detekciju ruke na obje kamere i povratak 2D koordinata zgloba ruke
def detect_hands(hand_landmarks_upper, hand_landmarks_side, frame_upper, frame_side):
# Dobivanje koordinata zgloba ruke (landmark 0) u pikselima za obje kamere
wrist_upper = hand_landmarks_upper.landmark[0]
wrist_side = hand_landmarks_side.landmark[0]
wrist_2d_upper = np.array([int(wrist_upper.x * frame_upper.shape[1]), int(wrist_upper.y * frame_upper.shape[0])])
wrist_2d_side = np.array([int(wrist_side.x * frame_side.shape[1]), int(wrist_side.y * frame_side.shape[0])])
# Prikaz ruke na slici (opcionalno)
mp.solutions.drawing_utils.draw_landmarks(frame_upper, hand_landmarks_upper, mp.solutions.hands.HAND_CONNECTIONS)
mp.solutions.drawing_utils.draw_landmarks(frame_side, hand_landmarks_side, mp.solutions.hands.HAND_CONNECTIONS)
return wrist_2d_upper, wrist_2d_side
# Funkcija za triangulaciju i izračun 3D pozicije ruke
def calculate_3d_hand_position(wrist_2d_upper, wrist_2d_side, proj_matrix_upper, proj_matrix_side):
# Pretvaranje 2D koordinata ruke u 3D prostor pomoću obje kamere (stereoskopski pogled)
wrist_3d = cv2.triangulatePoints(proj_matrix_upper, proj_matrix_side, wrist_2d_upper, wrist_2d_side)
wrist_3d /= wrist_3d[3] # Homogena koordinata u 3D
return wrist_3d[:3] # Vraćamo 3D koordinate ruke (x, y, z)