File size: 2,346 Bytes
318f7bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
import math

def euclidean_distance(point1, point2):
    return math.sqrt((point2[0] - point1[0]) ** 2 + (point2[1] - point1[1]) ** 2)

def convert_to_real_measurements(pixel_measurement, pixel_height, real_height_cm):
    height_ratio = real_height_cm / pixel_height
    return pixel_measurement * height_ratio

def measure_body_sizes(poses, real_height_cm):
    """Measure various body sizes based on detected poses."""
    measurements = []
    for pose in poses:
        keypoints = pose[0]  # This should directly give us the dictionary
        
        # Extract positions directly from keypoints
        left_shoulder = keypoints[5].position
        right_shoulder = keypoints[6].position
        left_hip = keypoints[11].position
        right_hip = keypoints[12].position
        left_ankle = keypoints[15].position
        right_ankle = keypoints[16].position
        left_wrist = keypoints[9].position
        right_wrist = keypoints[10].position
        left_eye = keypoints[1].position
        right_eye = keypoints[2].position
        
        # Calculate pixel height (from the top of the head to the bottom of the ankle)
        pixel_height = euclidean_distance((left_eye.x, left_eye.y), (left_ankle.x, left_ankle.y))

        # Calculate other pixel measurements
        shoulder_width_pixels = euclidean_distance((left_shoulder.x, left_shoulder.y), (right_shoulder.x, right_shoulder.y))
        leg_length_pixels = euclidean_distance((left_hip.x, left_hip.y), (left_ankle.x, left_ankle.y))
        arm_length_pixels = euclidean_distance((left_shoulder.x, left_shoulder.y), (left_wrist.x, left_wrist.y))
        shoulder_to_waist_pixels = euclidean_distance((left_shoulder.x, left_shoulder.y), (left_hip.x, left_hip.y))
        
        # Convert pixel measurements to real measurements using the height ratio
        measurements.append({
            "shoulder_width_cm": convert_to_real_measurements(shoulder_width_pixels, pixel_height, real_height_cm),
            "leg_length_cm": convert_to_real_measurements(leg_length_pixels, pixel_height, real_height_cm),
            "arm_length_cm": convert_to_real_measurements(arm_length_pixels, pixel_height, real_height_cm),
            "shoulder_to_waist_cm": convert_to_real_measurements(shoulder_to_waist_pixels, pixel_height, real_height_cm)
        })

    return measurements