File size: 4,586 Bytes
83ee618
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
from gait_analysis import EnhancedGaitAnalyzer
import os
import json
from generate_report import generate_markdown_report
from datetime import datetime

def main():
    # Path to test.mp4
    # The script is in backend/, test.mp4 is in root/ (../test.mp4)
    video_path = os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "atmin.mp4"))
    
    print(f"Looking for video at: {video_path}")
    if not os.path.exists(video_path):
        print("Error: test.mp4 not found!")
        return

    print("Initializing EnhancedGaitAnalyzer...")
    analyzer = EnhancedGaitAnalyzer(age=4) # Assuming age 4 for test
    
    print("Processing video... this might take a moment.")
    try:
        results = analyzer.process_video(video_path)
        
        # Generate report
        timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
        report_filename = f"gait_analysis_report_{timestamp}.md"
        report_path = os.path.join(os.path.dirname(video_path), report_filename)
        generate_markdown_report(results, video_path, report_path)
        
        # Helper function to safely format numbers
        def fmt(value, decimals=2):
            """Format numeric value or return N/A"""
            if value == 'N/A' or value is None:
                return 'N/A'
            try:
                return f"{float(value):.{decimals}f}"
            except (ValueError, TypeError):
                return 'N/A'
        
        # Extract new observation outputs
        summary = results.get("summary", {})
        observations = results.get("observations", {})
        strategies = results.get("compensatory_strategies", [])
        reflex_influence = results.get("reflex_influence", "None observed")
        safety_note = results.get("safety_note", "")
        weight_dist = results.get("weight_distribution", {})
        postural_strength = results.get("postural_strength", {})
        clinical_notes = results.get("clinical_notes", [])
        
        print("\n" + "="*60)
        print("CLINICAL GAIT ANALYSIS RESULTS")
        print("="*60)
        
        # 1. Walking Condition
        walking_condition = summary.get("walking_condition", "Not specified")
        print(f"\n🚶 WALKING CONDITION: {walking_condition.upper()}")
        
        # 2. Observed Movement Patterns
        print(f"\n� OBSERVED MOVEMENT PATTERNS:")
        print(f"  Trunk: {observations.get('trunk', 'N/A')}")
        print(f"  Head & Neck: {observations.get('head_neck', 'N/A')}")
        print(f"  Arms & Hands: {observations.get('arms_hands', 'N/A')}")
        print(f"  Lower Limbs: {observations.get('lower_limbs', 'N/A')}")
        print(f"  Symmetry: {observations.get('symmetry', 'N/A')}")
        
        # 3. Compensatory Strategies
        print(f"\n💡 COMPENSATORY STRATEGIES:")
        if strategies:
            for strategy in strategies:
                print(f"  - {strategy}")
        else:
            print("  - None identified")

        print(f"\n📝 CLINICAL NOTES:")
        if clinical_notes:
            for note in clinical_notes:
                print(f"  - {note}")
        else:
            print("  - None noted")

        # 4. Integrated Movement Summary
        asymmetry = summary.get("phase_asymmetry_percent", 0)
        stability = summary.get("stability_score", 0)
        strength = summary.get("strength_score", 0)
        weight_shift = summary.get("weight_shift_score", 0)
        gait_quality = summary.get("overall_gait_quality", "unknown")
        
        print(f"\n📋 INTEGRATED MOVEMENT SUMMARY:")
        print(f"  Walking Condition: {walking_condition.upper()}")
        print(f"  Overall Gait Quality: {gait_quality.upper()}")
        print(f"  Stability Score: {stability:.0f}/100 | Strength Score: {strength:.0f}/100 | Weight Shift Score: {weight_shift:.0f}/100")
        print(f"  Movement symmetry shows a {asymmetry:.1f}% phase variance.")
        
        if reflex_influence:
            print(f"\n  {reflex_influence}")
            
        if safety_note:
            print(f"\n  ⚠️ {safety_note}")
        
        print("\n" + "="*60)
        print("NOTE: This is NOT a medical diagnosis. Consult a healthcare")
        print("professional for proper assessment and treatment.")
        print("="*60 + "\n")
        
    except Exception as e:
        print(f"An error occurred during processing: {e}")
        import traceback
        traceback.print_exc()

if __name__ == "__main__":
    main()