MAKAI-Body-Size-Measure / calculations.py
SalehAhmad's picture
all
318f7bc
raw
history blame
2.35 kB
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