File size: 4,399 Bytes
e49993e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
"""
Example script demonstrating agent-friendly API usage
for Laban Movement Analysis
"""

import sys
from pathlib import Path

# Add parent to path
sys.path.insert(0, str(Path(__file__).parent.parent / "backend"))

from gradio_labanmovementanalysis import (
    LabanAgentAPI, 
    PoseModel,
    MovementDirection,
    MovementIntensity,
    quick_analyze,
    analyze_and_summarize
)


def main():
    """Demonstrate various agent API features"""
    
    print("🎭 Laban Movement Analysis - Agent API Examples\n")
    
    # Example video paths (replace with your own)
    video_path = ""
    
    # 1. Quick analysis with summary
    print("1. Quick Analysis with Summary")
    print("-" * 40)
    summary = analyze_and_summarize(video_path)
    print(summary)
    print()
    
    # 2. Detailed analysis with structured output
    print("2. Detailed Analysis")
    print("-" * 40)
    api = LabanAgentAPI()
    result = api.analyze(video_path, generate_visualization=True)
    
    if result.success:
        print(f"✓ Analysis successful!")
        print(f"  Direction: {result.dominant_direction.value}")
        print(f"  Intensity: {result.dominant_intensity.value}")
        print(f"  Speed: {result.dominant_speed}")
        print(f"  Fluidity: {result.fluidity_score:.2f}")
        print(f"  Expansion: {result.expansion_score:.2f}")
        print(f"  Segments: {len(result.movement_segments)}")
        if result.visualization_path:
            print(f"  Visualization saved to: {result.visualization_path}")
    else:
        print(f"✗ Analysis failed: {result.error}")
    print()
    
    # 3. Batch processing example
    print("3. Batch Processing")
    print("-" * 40)
    video_paths = []
    
    # Filter out non-existent files
    existing_paths = [p for p in video_paths if Path(p).exists()]
    
    if existing_paths:
        results = api.batch_analyze(existing_paths, parallel=True)
        for i, result in enumerate(results):
            print(f"Video {i+1}: {Path(result.video_path).name}")
            if result.success:
                print(f"  ✓ {result.dominant_direction.value} movement, "
                      f"{result.dominant_intensity.value} intensity")
            else:
                print(f"  ✗ Failed: {result.error}")
    else:
        print("  No example videos found")
    print()
    
    # 4. Movement filtering example
    print("4. Movement Filtering")
    print("-" * 40)
    if existing_paths and len(existing_paths) > 1:
        # Find high-intensity movements
        high_intensity = api.filter_by_movement(
            existing_paths,
            intensity=MovementIntensity.HIGH,
            min_fluidity=0.5
        )
        
        print(f"Found {len(high_intensity)} high-intensity videos:")
        for result in high_intensity:
            print(f"  - {Path(result.video_path).name}: "
                  f"fluidity={result.fluidity_score:.2f}")
    print()
    
    # 5. Video comparison example
    print("5. Video Comparison")
    print("-" * 40)
    if len(existing_paths) >= 2:
        comparison = api.compare_videos(existing_paths[0], existing_paths[1])
        print(f"Comparing: {comparison['video1']} vs {comparison['video2']}")
        print(f"  Direction match: {comparison['metrics']['direction_match']}")
        print(f"  Intensity match: {comparison['metrics']['intensity_match']}")
        print(f"  Fluidity difference: {comparison['metrics']['fluidity_difference']:.2f}")
    print()
    
    # 6. Model comparison
    print("6. Model Comparison")
    print("-" * 40)
    if existing_paths:
        test_video = existing_paths[0]
        models = [PoseModel.MEDIAPIPE, PoseModel.MOVENET]
        
        for model in models:
            result = api.analyze(test_video, model=model)
            if result.success:
                print(f"{model.value}: {result.dominant_direction.value} "
                      f"({result.dominant_intensity.value})")


def async_example():
    """Example of async usage"""
    import asyncio
    
    async def analyze_async():
        api = LabanAgentAPI()
        result = await api.analyze_async("")
        return api.get_movement_summary(result)
    
    # Run async example
    summary = asyncio.run(analyze_async())
    print("Async Analysis:", summary)


if __name__ == "__main__":
    main()
    
    # Uncomment to run async example
    # async_example()