Spaces:
Running
on
Zero
Running
on
Zero
""" | |
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() |