# Pose-Think: AI-Powered Movement Analysis Suite - REAL-TIME VERSION import cv2 import mediapipe as mp import gradio as gr import numpy as np # MediaPipe initialization mp_pose = mp.solutions.pose mp_hands = mp.solutions.hands mp_drawing = mp.solutions.drawing_utils def analyze_posture(image, analysis_type="basic", age=None, height=None, weight=None): """Advanced AI-powered posture analysis with biomechanical insights""" if image is None: return None, "❌ No image detected / GΓΆrΓΌntΓΌ tespit edilemedi" # Convert BGR to RGB for MediaPipe processing rgb_image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) output_image = cv2.cvtColor(rgb_image, cv2.COLOR_RGB2BGR) feedback = [] technical_analysis = [] health_recommendations = [] # Enhanced profile analysis with biomechanical calculations if analysis_type == "enhanced" and (age or height or weight): profile_info = [] biomechanical_analysis = [] if age: profile_info.append(f"Age: {age} years") # Age-related biomechanical insights if age < 25: biomechanical_analysis.append("🧬 YOUNG ADULT: Peak bone density period (20-30 years)") biomechanical_analysis.append("πŸ’ͺ Muscle elasticity optimal - Focus on movement patterns") biomechanical_analysis.append("⚑ High metabolic rate supports posture correction") elif age < 45: biomechanical_analysis.append("🧬 ADULT: Bone density maintenance phase") biomechanical_analysis.append("πŸ’ͺ Muscle tone declining ~1% annually after 30") biomechanical_analysis.append("⚠️ Early prevention of postural deviations critical") elif age < 65: biomechanical_analysis.append("🧬 MIDDLE-AGED: Accelerated bone density loss (~1-2%/year)") biomechanical_analysis.append("πŸ’ͺ Sarcopenia onset - muscle mass loss 3-8%/decade") biomechanical_analysis.append("🦴 Increased risk of vertebral compression fractures") else: biomechanical_analysis.append("🧬 SENIOR: Significant structural changes in spine") biomechanical_analysis.append("πŸ’ͺ Advanced sarcopenia - strength loss 1.5-3%/year") biomechanical_analysis.append("⚠️ High priority: Fall prevention and spinal stability") if height and weight: bmi = weight / ((height/100) ** 2) profile_info.append(f"BMI: {bmi:.1f} kg/mΒ²") # BMI-based biomechanical analysis if bmi < 18.5: biomechanical_analysis.append(f"πŸ“Š UNDERWEIGHT (BMI {bmi:.1f}): Reduced muscle mass affects postural stability") biomechanical_analysis.append("⚠️ Low body weight may indicate insufficient core strength") health_recommendations.append("🍎 Increase protein intake (1.6-2.2g/kg body weight)") health_recommendations.append("πŸ‹οΈ Resistance training to build postural muscles") elif bmi < 25: biomechanical_analysis.append(f"βœ… NORMAL WEIGHT (BMI {bmi:.1f}): Optimal loading for spinal structures") biomechanical_analysis.append("πŸ’ͺ Good weight distribution reduces joint stress") elif bmi < 30: biomechanical_analysis.append(f"⚠️ OVERWEIGHT (BMI {bmi:.1f}): Increased anterior load on lumbar spine") biomechanical_analysis.append("πŸ“ˆ Extra weight creates ~4x increased knee joint stress") biomechanical_analysis.append("🦴 Elevated risk of lower crossed syndrome") health_recommendations.append("πŸƒ Cardio exercise: 150min/week moderate intensity") health_recommendations.append("🧘 Core strengthening to counter anterior weight shift") else: biomechanical_analysis.append(f"🚨 OBESE (BMI {bmi:.1f}): Significant postural compensation patterns") biomechanical_analysis.append("πŸ“Š Increased thoracic kyphosis and lumbar lordosis likely") biomechanical_analysis.append("⚠️ High risk: sleep apnea affecting cervical posture") health_recommendations.append("🩺 Medical consultation recommended for weight management") health_recommendations.append("🏊 Low-impact exercise (swimming, aqua therapy)") if profile_info: feedback.append(f"πŸ‘€ BIOMETRIC PROFILE: {' | '.join(profile_info)}") feedback.append("") if biomechanical_analysis: feedback.extend(biomechanical_analysis) feedback.append("") if analysis_type == "hand": # Advanced Hand Analysis with Biomechanical Insights with mp_hands.Hands( static_image_mode=False, max_num_hands=2, min_detection_confidence=0.5, min_tracking_confidence=0.5 ) as hands: results = hands.process(rgb_image) if results.multi_hand_landmarks: hand_count = len(results.multi_hand_landmarks) feedback.append(f"βœ… HAND DETECTION: {hand_count} hand(s) identified") technical_analysis.append("πŸ”¬ TECHNICAL ANALYSIS:") for idx, hand_landmarks in enumerate(results.multi_hand_landmarks): mp_drawing.draw_landmarks(output_image, hand_landmarks, mp_hands.HAND_CONNECTIONS) # Advanced finger analysis landmarks = hand_landmarks.landmark fingers_up = 0 finger_angles = [] tip_ids = [4, 8, 12, 16, 20] # Thumb, Index, Middle, Ring, Pinky tips pip_ids = [3, 6, 10, 14, 18] # PIP joints mcp_ids = [2, 5, 9, 13, 17] # MCP joints finger_names = ["Thumb", "Index", "Middle", "Ring", "Pinky"] # Calculate finger extension angles for i in range(5): tip_y = landmarks[tip_ids[i]].y pip_y = landmarks[pip_ids[i]].y mcp_y = landmarks[mcp_ids[i]].y if tip_y < pip_y: # Finger extended fingers_up += 1 # Calculate extension angle if i > 0: # Not thumb extension_angle = abs(np.arctan2(tip_y - mcp_y, landmarks[tip_ids[i]].x - landmarks[mcp_ids[i]].x) * 180 / np.pi) finger_angles.append(f"{finger_names[i]}: {extension_angle:.1f}Β°") # Hand analysis results hand_side = "Right" if idx == 0 else "Left" feedback.append(f"πŸ–οΈ {hand_side} HAND ANALYSIS:") feedback.append(f" β€’ Fingers Extended: {fingers_up}/5") feedback.append(f" β€’ Hand Symmetry: {'Normal' if hand_count == 2 else 'Single hand detected'}") # Technical measurements if finger_angles: technical_analysis.append(f"πŸ“ {hand_side} Hand Extension Angles:") for angle in finger_angles: technical_analysis.append(f" β€’ {angle}") # Grip strength estimation based on finger positions if fingers_up == 0: feedback.append(" β€’ Grip Pattern: FULL FIST - Strong grip indication") technical_analysis.append("πŸ’ͺ Estimated grip strength: HIGH (all digits flexed)") elif fingers_up == 5: feedback.append(" β€’ Grip Pattern: OPEN HAND - Relaxed extension") technical_analysis.append("🀚 Hand state: RELAXED (full extension)") else: feedback.append(f" β€’ Grip Pattern: PARTIAL ({fingers_up} digits extended)") technical_analysis.append(f"⚑ Mixed pattern: {fingers_up} extensors active") # Neurological assessment wrist_landmark = landmarks[0] # Wrist center middle_finger_tip = landmarks[12] # Middle finger tip hand_span = np.sqrt((middle_finger_tip.x - wrist_landmark.x)**2 + (middle_finger_tip.y - wrist_landmark.y)**2) technical_analysis.append(f"🧠 Neurological Indicators:") technical_analysis.append(f" β€’ Hand-span ratio: {hand_span:.3f}") technical_analysis.append(f" β€’ Fine motor control: {'GOOD' if fingers_up > 0 else 'GRIP DOMINANT'}") if fingers_up == 1: # Pointing gesture technical_analysis.append("☝️ Index pointing detected - Precise motor control active") elif fingers_up == 2: # Peace sign or similar technical_analysis.append("✌️ Dual digit extension - Good finger independence") # Overall hand health assessment feedback.append("") feedback.append("πŸ₯ HAND HEALTH ASSESSMENT:") if hand_count == 2: feedback.append("βœ… Bilateral hand function - Normal neurological presentation") health_recommendations.append("🀲 Continue bilateral activities for brain health") else: feedback.append("⚠️ Single hand visible - Ensure bilateral movement patterns") health_recommendations.append("πŸ”„ Practice bilateral coordination exercises") else: feedback.append("❌ NO HANDS DETECTED") feedback.append("πŸ–οΈ Position hands clearly in camera view") technical_analysis.append("πŸ” Detection Parameters:") technical_analysis.append(" β€’ Minimum confidence: 50%") technical_analysis.append(" β€’ Tracking confidence: 50%") technical_analysis.append(" β€’ Max hands: 2") health_recommendations.append("πŸ’‘ Ensure good lighting for hand visibility") health_recommendations.append("πŸ–ΌοΈ Use contrasting background for better detection") else: # Posture analysis with mp_pose.Pose( static_image_mode=False, model_complexity=1, enable_segmentation=False, min_detection_confidence=0.5, min_tracking_confidence=0.5 ) as pose: results = pose.process(rgb_image) if results.pose_landmarks: mp_drawing.draw_landmarks(output_image, results.pose_landmarks, mp_pose.POSE_CONNECTIONS) landmarks = results.pose_landmarks.landmark visible_parts = [] # Check visible parts if landmarks[mp_pose.PoseLandmark.NOSE.value].visibility > 0.5: visible_parts.append("Head") # Advanced Shoulder Analysis with Biomechanical Assessment left_shoulder = landmarks[mp_pose.PoseLandmark.LEFT_SHOULDER.value] right_shoulder = landmarks[mp_pose.PoseLandmark.RIGHT_SHOULDER.value] if left_shoulder.visibility > 0.5 and right_shoulder.visibility > 0.5: visible_parts.append("Shoulders") # Calculate shoulder level difference in degrees and millimeters shoulder_diff = abs(left_shoulder.y - right_shoulder.y) shoulder_angle = np.arctan2(right_shoulder.y - left_shoulder.y, right_shoulder.x - left_shoulder.x) * 180 / np.pi # Estimate actual measurements (assuming average shoulder width of 40cm) shoulder_width_pixels = abs(right_shoulder.x - left_shoulder.x) if shoulder_width_pixels > 0: pixel_to_mm = 400 / shoulder_width_pixels # 400mm average shoulder width height_diff_mm = shoulder_diff * pixel_to_mm * 1000 # Convert to mm else: height_diff_mm = 0 technical_analysis.append("πŸ”¬ SHOULDER BIOMECHANICS:") technical_analysis.append(f" β€’ Shoulder angle: {abs(shoulder_angle):.1f}Β° from horizontal") technical_analysis.append(f" β€’ Height difference: ~{height_diff_mm:.0f}mm") technical_analysis.append(f" β€’ Asymmetry ratio: {(shoulder_diff * 100):.1f}%") if shoulder_diff > 0.05: # >5% asymmetry if left_shoulder.y < right_shoulder.y: feedback.append(f"⚠️ LEFT SHOULDER ELEVATED: {height_diff_mm:.0f}mm higher") technical_analysis.append("🧠 Possible causes: Left upper trap hyperactivity") technical_analysis.append("🦴 Compensation: Right lateral flexion likely") health_recommendations.append("πŸ’† Left upper trapezius stretching (30s x 3)") health_recommendations.append("πŸ’ͺ Right side strengthening exercises") else: feedback.append(f"⚠️ RIGHT SHOULDER ELEVATED: {height_diff_mm:.0f}mm higher") technical_analysis.append("🧠 Possible causes: Right upper trap hyperactivity") technical_analysis.append("🦴 Compensation: Left lateral flexion likely") health_recommendations.append("πŸ’† Right upper trapezius stretching (30s x 3)") health_recommendations.append("πŸ’ͺ Left side strengthening exercises") # Additional clinical insights if shoulder_diff > 0.08: # >8% asymmetry feedback.append("🚨 SIGNIFICANT ASYMMETRY - Clinical assessment recommended") technical_analysis.append("⚠️ Risk factors: Scoliosis, muscle imbalance, ergonomic issues") health_recommendations.append("🩺 Consider physiotherapy evaluation") else: feedback.append("βœ… SHOULDERS LEVEL - Excellent postural symmetry") technical_analysis.append("βœ… Normal shoulder girdle alignment") feedback.append(f"πŸ“Š Asymmetry: {height_diff_mm:.0f}mm (Normal: <20mm)") # Advanced Elbow Joint Analysis with Biomechanical Calculations left_elbow = landmarks[mp_pose.PoseLandmark.LEFT_ELBOW.value] right_elbow = landmarks[mp_pose.PoseLandmark.RIGHT_ELBOW.value] if left_elbow.visibility > 0.5 and right_elbow.visibility > 0.5: visible_parts.append("Elbows") # Enhanced elbow angle calculations with clinical interpretation try: def calculate_angle(a, b, c): """Calculate angle between three points using vector math""" a = np.array(a) b = np.array(b) c = np.array(c) radians = np.arctan2(c[1] - b[1], c[0] - b[0]) - np.arctan2(a[1] - b[1], a[0] - b[0]) angle = np.abs(radians * 180.0 / np.pi) if angle > 180.0: angle = 360 - angle return angle def interpret_elbow_angle(angle, side): """Clinical interpretation of elbow angles""" if angle > 165: return f"βœ… {side} elbow: FULL EXTENSION ({angle:.1f}Β°) - Excellent mobility" elif angle > 140: return f"βœ… {side} elbow: GOOD EXTENSION ({angle:.1f}Β°) - Normal range" elif angle > 90: return f"⚠️ {side} elbow: MODERATE FLEXION ({angle:.1f}Β°) - Check for tension" else: return f"🚨 {side} elbow: EXCESSIVE FLEXION ({angle:.1f}Β°) - Requires attention" # Left elbow biomechanical analysis left_shoulder_pos = [left_shoulder.x, left_shoulder.y] left_elbow_pos = [left_elbow.x, left_elbow.y] left_wrist_pos = [landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].x, landmarks[mp_pose.PoseLandmark.LEFT_WRIST.value].y] left_angle = calculate_angle(left_shoulder_pos, left_elbow_pos, left_wrist_pos) feedback.append(interpret_elbow_angle(left_angle, "LEFT")) # Right elbow biomechanical analysis right_shoulder_pos = [right_shoulder.x, right_shoulder.y] right_elbow_pos = [right_elbow.x, right_elbow.y] right_wrist_pos = [landmarks[mp_pose.PoseLandmark.RIGHT_WRIST.value].x, landmarks[mp_pose.PoseLandmark.RIGHT_WRIST.value].y] right_angle = calculate_angle(right_shoulder_pos, right_elbow_pos, right_wrist_pos) feedback.append(interpret_elbow_angle(right_angle, "RIGHT")) # Bilateral comparison and clinical insights angle_difference = abs(left_angle - right_angle) technical_analysis.append("οΏ½ ELBOW JOINT BIOMECHANICS:") technical_analysis.append(f" β€’ Left elbow angle: {left_angle:.1f}Β° (Normal: 0-150Β°)") technical_analysis.append(f" β€’ Right elbow angle: {right_angle:.1f}Β° (Normal: 0-150Β°)") technical_analysis.append(f" β€’ Bilateral difference: {angle_difference:.1f}Β°") if angle_difference > 15: feedback.append(f"⚠️ ELBOW ASYMMETRY: {angle_difference:.1f}Β° difference") technical_analysis.append("🧠 Possible causes: Unilateral muscle imbalance") health_recommendations.append("πŸ”„ Bilateral stretching and strengthening") health_recommendations.append("πŸ‹οΈ Focus on weaker side strengthening") else: feedback.append(f"βœ… ELBOW SYMMETRY: Good bilateral balance ({angle_difference:.1f}Β°)") # Movement quality assessment avg_angle = (left_angle + right_angle) / 2 if avg_angle < 90: technical_analysis.append("πŸ“Š Pattern: FLEXION DOMINANT - Possible anterior head posture") health_recommendations.append("πŸ“± Reduce screen time and improve ergonomics") health_recommendations.append("🧘 Chest stretches and posterior deltoid strengthening") elif avg_angle > 150: technical_analysis.append("πŸ“Š Pattern: EXTENSION DOMINANT - Good postural alignment") health_recommendations.append("βœ… Maintain current activity patterns") # Clinical range of motion assessment if left_angle < 30 or right_angle < 30: feedback.append("🚨 SEVERE FLEXION CONTRACTURE detected") technical_analysis.append("⚠️ ROM limitation: May indicate joint pathology") health_recommendations.append("🩺 Urgent: Consult orthopedic specialist") except Exception as e: feedback.append("⚠️ ELBOW ANALYSIS ERROR: Unable to calculate joint angles") technical_analysis.append(f"πŸ”§ Error details: {str(e)[:50]}...") technical_analysis.append("πŸ’‘ Ensure clear visibility of shoulder-elbow-wrist alignment") # Advanced Hip Analysis with Pelvic Biomechanics left_hip = landmarks[mp_pose.PoseLandmark.LEFT_HIP.value] right_hip = landmarks[mp_pose.PoseLandmark.RIGHT_HIP.value] if left_hip.visibility > 0.5 and right_hip.visibility > 0.5: visible_parts.append("Hips") # Calculate pelvic obliquity and rotation hip_diff = abs(left_hip.y - right_hip.y) pelvic_angle = np.arctan2(right_hip.y - left_hip.y, right_hip.x - left_hip.x) * 180 / np.pi # Estimate pelvic measurements hip_width_pixels = abs(right_hip.x - left_hip.x) if hip_width_pixels > 0: pixel_to_mm = 300 / hip_width_pixels # 300mm average hip width pelvic_tilt_mm = hip_diff * pixel_to_mm * 1000 else: pelvic_tilt_mm = 0 technical_analysis.append("πŸ”¬ PELVIC BIOMECHANICS:") technical_analysis.append(f" β€’ Pelvic obliquity: {abs(pelvic_angle):.1f}Β° from horizontal") technical_analysis.append(f" β€’ Hip height difference: ~{pelvic_tilt_mm:.0f}mm") technical_analysis.append(f" β€’ Frontal plane deviation: {(hip_diff * 100):.1f}%") if hip_diff > 0.03: # >3% asymmetry if left_hip.y < right_hip.y: feedback.append(f"⚠️ LEFT HIP ELEVATED: {pelvic_tilt_mm:.0f}mm higher") technical_analysis.append("🦴 Pelvic pattern: Left lateral pelvic tilt") technical_analysis.append("🧠 Compensation: Right hip adductor tightness likely") health_recommendations.append("🧘 Right hip adductor stretching (30s x 3)") health_recommendations.append("πŸ’ͺ Left gluteus medius strengthening") health_recommendations.append("πŸ”„ Single-leg balance exercises") else: feedback.append(f"⚠️ RIGHT HIP ELEVATED: {pelvic_tilt_mm:.0f}mm higher") technical_analysis.append("🦴 Pelvic pattern: Right lateral pelvic tilt") technical_analysis.append("🧠 Compensation: Left hip adductor tightness likely") health_recommendations.append("🧘 Left hip adductor stretching (30s x 3)") health_recommendations.append("πŸ’ͺ Right gluteus medius strengthening") health_recommendations.append("πŸ”„ Single-leg balance exercises") # Clinical implications if hip_diff > 0.05: # >5% asymmetry feedback.append("🚨 SIGNIFICANT PELVIC OBLIQUITY - Assessment recommended") technical_analysis.append("⚠️ Risk factors: Scoliosis, leg length discrepancy, SI joint dysfunction") health_recommendations.append("🩺 Consider pelvic assessment by physiotherapist") health_recommendations.append("πŸ“ Leg length measurement recommended") else: feedback.append("βœ… HIPS LEVEL - Excellent pelvic alignment") technical_analysis.append("βœ… Normal frontal plane pelvic position") feedback.append(f"πŸ“Š Pelvic obliquity: {pelvic_tilt_mm:.0f}mm (Normal: <15mm)") # Advanced Cervical Spine and Head Position Analysis nose = landmarks[mp_pose.PoseLandmark.NOSE.value] if nose.visibility > 0.5: shoulder_center_x = (left_shoulder.x + right_shoulder.x) / 2 shoulder_center_y = (left_shoulder.y + right_shoulder.y) / 2 # Calculate forward head posture head_offset_x = abs(nose.x - shoulder_center_x) head_offset_y = nose.y - shoulder_center_y # Calculate craniovertebral angle approximation cv_angle = np.arctan2(head_offset_y, head_offset_x) * 180 / np.pi technical_analysis.append("πŸ”¬ CERVICAL SPINE BIOMECHANICS:") technical_analysis.append(f" β€’ Forward head posture: {head_offset_x:.3f} ratio") technical_analysis.append(f" β€’ Craniovertebral angle: ~{abs(cv_angle):.1f}Β°") technical_analysis.append(f" β€’ Head position: {head_offset_y:.3f} vertical offset") if head_offset_x > 0.08: # Significant forward head posture if nose.x < shoulder_center_x: feedback.append(f"⚠️ FORWARD HEAD POSTURE: Left deviation ({head_offset_x:.2f})") technical_analysis.append("🧠 Pattern: Left cervical side-bending with rotation") health_recommendations.append("πŸ”„ Right cervical rotation stretches") health_recommendations.append("οΏ½ Deep neck flexor strengthening") else: feedback.append(f"⚠️ FORWARD HEAD POSTURE: Right deviation ({head_offset_x:.2f})") technical_analysis.append("🧠 Pattern: Right cervical side-bending with rotation") health_recommendations.append("πŸ”„ Left cervical rotation stretches") health_recommendations.append("πŸ’ͺ Deep neck flexor strengthening") # Forward head posture implications if abs(cv_angle) < 45: # Severe forward head posture feedback.append("οΏ½ SEVERE FORWARD HEAD POSTURE detected") technical_analysis.append("⚠️ Risk: Upper cervical hyperextension, suboccipital tension") health_recommendations.append("πŸ“± Immediate ergonomic assessment required") health_recommendations.append("🩺 Consider cervical spine evaluation") # Muscle imbalance analysis technical_analysis.append("πŸ’ͺ Muscle imbalance pattern:") technical_analysis.append(" β€’ Tight: Upper trapezius, levator scapulae, suboccipitals") technical_analysis.append(" β€’ Weak: Deep neck flexors, lower trapezius") health_recommendations.append("🧘 Chin tuck exercises (10 reps x 3 sets)") health_recommendations.append("πŸ’† Upper trapezius and levator scapulae stretching") health_recommendations.append("πŸ–₯️ Monitor height adjustment (top 1/3 at eye level)") else: feedback.append("βœ… NECK CENTERED - Optimal cervical alignment") technical_analysis.append("βœ… Normal cervical lordosis maintenance") if abs(cv_angle) > 50: # Good craniovertebral angle feedback.append(f"πŸ“Š Craniovertebral angle: {abs(cv_angle):.1f}Β° (Excellent: >50Β°)") # Enhanced Age-Specific Biomechanical Recommendations if analysis_type == "enhanced" and age: feedback.append("") feedback.append("🎯 AGE-SPECIFIC BIOMECHANICAL ANALYSIS:") if age < 25: feedback.append("🧬 YOUNG ADULT PHASE (Peak Development):") feedback.append(" β€’ Bone density: Peak accumulation period (90% by age 20)") feedback.append(" β€’ Muscle mass: Optimal growth potential") feedback.append(" β€’ Neuroplasticity: High adaptation capacity") technical_analysis.append("πŸ“Š Physiological advantages:") technical_analysis.append(" β€’ Collagen synthesis: Peak efficiency") technical_analysis.append(" β€’ Proprioception: Excellent balance control") technical_analysis.append(" β€’ Recovery rate: 24-48 hours optimal") health_recommendations.extend([ "πŸƒ High-impact activities encouraged (bone loading)", "🀸 Proprioceptive training for injury prevention", "πŸ’ͺ Establish proper movement patterns now", "πŸ“š Ergonomic education for lifelong habits" ]) elif age < 45: feedback.append("🧬 ADULT PHASE (Maintenance Period):") feedback.append(" β€’ Bone density: Peak maintained, slow decline begins (~30)") feedback.append(" β€’ Muscle mass: 1% annual loss after age 30") feedback.append(" β€’ Flexibility: Gradual decrease without intervention") technical_analysis.append("πŸ“Š Physiological changes:") technical_analysis.append(" β€’ Type II muscle fibers: Beginning to decline") technical_analysis.append(" β€’ Connective tissue: Reduced elasticity") technical_analysis.append(" β€’ Hormonal: Growth hormone decline affects recovery") health_recommendations.extend([ "πŸ‹οΈ Resistance training 2-3x/week (muscle preservation)", "🧘 Daily stretching routine (maintain flexibility)", "βš–οΈ Weight management crucial for joint health", "πŸ’Ό Workplace ergonomics assessment recommended" ]) elif age < 65: feedback.append("🧬 MIDDLE-AGE PHASE (Active Intervention):") feedback.append(" β€’ Bone density: Accelerated loss (1-2% annually)") feedback.append(" β€’ Sarcopenia: 3-8% muscle loss per decade") feedback.append(" β€’ Balance: Proprioceptive decline increases fall risk") technical_analysis.append("οΏ½ Critical interventions needed:") technical_analysis.append(" β€’ Calcium absorption: Reduced efficiency") technical_analysis.append(" β€’ Postural muscles: Significant weakening") technical_analysis.append(" β€’ Spinal discs: Dehydration and height loss") health_recommendations.extend([ "🦴 Weight-bearing exercise essential (bone preservation)", "βš–οΈ Balance training 3x/week (fall prevention)", "πŸ’Š Vitamin D3 + K2 supplementation consideration", "🩺 Annual bone density screening recommended" ]) else: # 65+ feedback.append("🧬 SENIOR PHASE (Preservation Focus):") feedback.append(" β€’ Bone health: High fracture risk, especially vertebral") feedback.append(" β€’ Muscle power: 1.5-3% annual decline") feedback.append(" β€’ Postural control: Significant balance impairment") technical_analysis.append("οΏ½ Age-related structural changes:") technical_analysis.append(" β€’ Kyphosis progression: Thoracic curvature increase") technical_analysis.append(" β€’ Disc height: 20-30% reduction from peak") technical_analysis.append(" β€’ Reaction time: Slowed protective responses") health_recommendations.extend([ "🚢 Daily walking program (maintain bone loading)", "πŸ’Ί Chair-based exercises if mobility limited", "🏠 Home safety assessment for fall prevention", "πŸ‘₯ Group exercise classes for social engagement" ]) # Comprehensive visible parts summary with clinical significance if visible_parts: feedback.insert(0, f"βœ… ANATOMICAL VISIBILITY: {', '.join(visible_parts)}") feedback.insert(1, f"πŸ“Š DETECTION CONFIDENCE: {len(visible_parts)}/4 major regions") feedback.insert(2, "") # Analysis completeness score completeness_score = (len(visible_parts) / 4) * 100 technical_analysis.insert(0, f"πŸ”¬ ANALYSIS COMPLETENESS: {completeness_score:.0f}%") if completeness_score == 100: technical_analysis.insert(1, "βœ… Full-body biomechanical assessment possible") elif completeness_score >= 75: technical_analysis.insert(1, "⚑ Comprehensive postural analysis achieved") else: technical_analysis.insert(1, "⚠️ Limited analysis - optimize camera positioning") else: feedback.append("❌ POSE NOT DETECTED") feedback.append("πŸ“ POSITIONING REQUIREMENTS:") feedback.append(" β€’ Distance: 2-3 meters from camera") feedback.append(" β€’ Lighting: Bright, even illumination") feedback.append(" β€’ Background: Plain, contrasting surface") feedback.append(" β€’ Posture: Stand naturally, arms relaxed") technical_analysis.append("πŸ”§ DETECTION PARAMETERS:") technical_analysis.append(" β€’ Model complexity: Level 1 (balanced speed/accuracy)") technical_analysis.append(" β€’ Detection confidence: 50% minimum") technical_analysis.append(" β€’ Tracking confidence: 50% minimum") technical_analysis.append(" β€’ Segmentation: Disabled (faster processing)") health_recommendations.extend([ "πŸ’‘ Improve lighting conditions for better detection", "πŸ–ΌοΈ Use solid background wall behind you", "πŸ“ Position entire body within camera frame", "πŸ‘• Wear fitted clothing for clearer body outline" ]) # Compile comprehensive feedback with technical insights final_feedback = [] # Add main feedback final_feedback.extend(feedback) # Add technical analysis section if technical_analysis: final_feedback.append("") final_feedback.append("οΏ½ ═══ TECHNICAL BIOMECHANICAL ANALYSIS ═══") final_feedback.extend(technical_analysis) # Add health recommendations section if health_recommendations: final_feedback.append("") final_feedback.append("πŸ₯ ═══ EVIDENCE-BASED RECOMMENDATIONS ═══") final_feedback.extend(health_recommendations) # Add general wellness footer final_feedback.append("") final_feedback.append("πŸ“š SCIENTIFIC BASIS:") final_feedback.append("β€’ Analysis based on biomechanical research and clinical guidelines") final_feedback.append("β€’ Recommendations follow evidence-based physiotherapy protocols") final_feedback.append("β€’ For persistent issues, consult qualified healthcare professionals") return output_image, "\n".join(final_feedback) # Global variables for real-time settings current_analysis_type = "basic" current_age = None current_height = None current_weight = None def update_settings(analysis_type, age, height, weight): """Update global settings for real-time analysis""" global current_analysis_type, current_age, current_height, current_weight current_analysis_type = analysis_type current_age = age current_height = height current_weight = weight return f"βœ… Settings updated: {analysis_type} mode" def live_analysis(image): """Live analysis function for real-time processing""" global current_analysis_type, current_age, current_height, current_weight return analyze_posture(image, current_analysis_type, current_age, current_height, current_weight) # Real-time Gradio Interface with enhanced AI feedback with gr.Blocks(title="🎯 Pose-Think: Advanced AI Movement Analysis", css=""" .gradio-container { max-width: 1400px !important; } .feedback-box { font-family: 'Monaco', 'Consolas', monospace; font-size: 12px; line-height: 1.4; } """) as demo: gr.Markdown(""" # 🎯 Pose-Think: Advanced AI Movement Analysis Suite ## ⚑ REAL-TIME biomechanical analysis with clinical insights **Enhanced AI feedback with technical measurements, biomechanical analysis, and evidence-based recommendations!** """) with gr.Row(): with gr.Column(scale=1): gr.Markdown("### βš™οΈ Analysis Configuration") # Analysis type selection analysis_type = gr.Radio( choices=[ ("🎯 Basic Posture", "basic"), ("🎯 Enhanced Posture", "enhanced"), ("🀚 Hand Tracking", "hand") ], value="basic", label="Analysis Type" ) # Profile info (for enhanced mode) gr.Markdown("### πŸ‘€ Biometric Profile (Enhanced Mode)") age_input = gr.Number(label="Age (years)", minimum=10, maximum=100, value=None) height_input = gr.Number(label="Height (cm)", minimum=100, maximum=250, value=None) weight_input = gr.Number(label="Weight (kg)", minimum=30, maximum=200, value=None) # Settings update button update_btn = gr.Button("βš™οΈ Update Analysis Settings", variant="primary", size="lg") settings_status = gr.Textbox( label="Configuration Status", value="Ready for advanced real-time analysis", interactive=False, lines=2 ) # Update settings when button clicked update_btn.click( fn=update_settings, inputs=[analysis_type, age_input, height_input, weight_input], outputs=[settings_status] ) # Technical info gr.Markdown(""" ### πŸ”¬ Technical Features: - **Biomechanical calculations** - **Clinical angle measurements** - **Evidence-based recommendations** - **Age-specific analysis** - **Real-time processing** """) with gr.Column(scale=2): # Real-time interface gr.Markdown("### πŸ“Ή Live Biomechanical Analysis") live_interface = gr.Interface( fn=live_analysis, inputs=gr.Image(sources=["webcam"], streaming=True), outputs=[ gr.Image(label="🎯 Live Analysis with Landmarks"), gr.Textbox( label="πŸ“Š Advanced AI Feedback & Technical Analysis", lines=25, max_lines=30, elem_classes=["feedback-box"] ) ], live=True, allow_flagging="never", show_progress=False, title=None, description="Advanced real-time biomechanical analysis with clinical insights" ) # Enhanced instructions and features gr.Markdown(""" ## οΏ½ Advanced Analysis Features ### ⚑ **Real-Time Capabilities:** - **πŸ”΄ Live Camera Stream**: Continuous biomechanical analysis - **⚑ Instant Technical Feedback**: Clinical measurements in real-time - **πŸ”§ Dynamic Configuration**: Update settings while analyzing - **πŸ“Š Scientific Analysis**: Evidence-based biomechanical insights ### 🎯 **Enhanced Analysis Modes:** #### 🎯 **Basic Posture Analysis:** - Shoulder symmetry with angle calculations - Elbow joint range of motion assessment - Pelvic alignment and hip level analysis - Cervical spine positioning evaluation - Technical measurements in degrees and millimeters #### 🎯 **Enhanced Posture Analysis:** - All basic features PLUS: - BMI-based biomechanical load analysis - Age-specific physiological insights - Clinical risk factor assessment - Evidence-based exercise recommendations - Personalized intervention strategies #### 🀚 **Advanced Hand Analysis:** - Individual finger extension angles - Grip strength pattern assessment - Fine motor control evaluation - Neurological function indicators - Bilateral symmetry comparison ### πŸ“Š **Technical Measurements:** - **Joint Angles**: Precise degree measurements using vector mathematics - **Asymmetry Ratios**: Percentage deviations from optimal alignment - **Distance Calculations**: Millimeter-level position assessments - **Range of Motion**: Clinical interpretation of movement patterns - **Biomechanical Loads**: Force distribution analysis ### οΏ½ **Clinical Insights:** - **Muscle Imbalance Patterns**: Identification of tight/weak muscle groups - **Postural Syndromes**: Recognition of common dysfunction patterns - **Risk Assessments**: Injury probability and prevention strategies - **Age-Related Changes**: Physiological adaptations and interventions - **Evidence-Based Protocols**: Research-backed exercise prescriptions ### πŸ’‘ **Optimization Tips:** - **πŸ“Έ Camera Setup**: 2-3 meters distance, eye-level positioning - **πŸ’‘ Lighting**: Bright, even illumination from front - **πŸ–ΌοΈ Background**: Plain, contrasting wall surface - **πŸ‘• Clothing**: Fitted garments for clear body outline - **⚑ Performance**: Close unnecessary applications for smooth processing ### 🩺 **Disclaimer:** This tool provides educational biomechanical analysis and should not replace professional medical assessment. For persistent pain or significant postural deviations, consult qualified healthcare professionals. """) if __name__ == "__main__": demo.launch( )