Spaces:
Running
on
L40S
Running
on
L40S
File size: 5,709 Bytes
099dc67 900b160 099dc67 |
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 |
import json
import numpy as np
import logging
from pathlib import Path
from config import TEST_DATA_DIR
logger = logging.getLogger(__name__)
def create_test_data_structure(progress_callback=None):
"""Create sample camera extrinsics data for testing"""
if progress_callback:
progress_callback(0.0, desc="Creating test data structure...")
# Create directories
data_dir = Path(f"{TEST_DATA_DIR}/cameras")
videos_dir = Path(f"{TEST_DATA_DIR}/videos")
data_dir.mkdir(parents=True, exist_ok=True)
videos_dir.mkdir(parents=True, exist_ok=True)
camera_file = data_dir / "camera_extrinsics.json"
# Skip if file already exists
if camera_file.exists():
logger.info(f"✓ Camera extrinsics already exist at {camera_file}")
if progress_callback:
progress_callback(1.0, desc="Test data structure already exists")
return
if progress_callback:
progress_callback(0.3, desc="Generating camera extrinsics data...")
# Generate sample camera data
camera_data = {}
# Create 81 frames with 10 camera trajectories each
for frame_idx in range(81):
frame_key = f"frame{frame_idx}"
camera_data[frame_key] = {}
for cam_idx in range(1, 11): # Camera types 1-10
# Create a sample camera matrix (this is just an example - replace with actual logic if needed)
# In reality, these would be calculated based on specific camera movement patterns
# Create a base identity matrix
base_matrix = np.eye(4)
# Add some variation based on frame and camera type
# This is a simplistic example - real camera movements would be more complex
if cam_idx == 1: # Pan Right
base_matrix[0, 3] = 0.01 * frame_idx # Move right over time
elif cam_idx == 2: # Pan Left
base_matrix[0, 3] = -0.01 * frame_idx # Move left over time
elif cam_idx == 3: # Tilt Up
# Rotate around X-axis
angle = 0.005 * frame_idx
base_matrix[1, 1] = np.cos(angle)
base_matrix[1, 2] = -np.sin(angle)
base_matrix[2, 1] = np.sin(angle)
base_matrix[2, 2] = np.cos(angle)
elif cam_idx == 4: # Tilt Down
# Rotate around X-axis (opposite direction)
angle = -0.005 * frame_idx
base_matrix[1, 1] = np.cos(angle)
base_matrix[1, 2] = -np.sin(angle)
base_matrix[2, 1] = np.sin(angle)
base_matrix[2, 2] = np.cos(angle)
elif cam_idx == 5: # Zoom In
base_matrix[2, 3] = -0.01 * frame_idx # Move forward over time
elif cam_idx == 6: # Zoom Out
base_matrix[2, 3] = 0.01 * frame_idx # Move backward over time
elif cam_idx == 7: # Translate Up (with rotation)
base_matrix[1, 3] = 0.01 * frame_idx # Move up over time
angle = 0.003 * frame_idx
base_matrix[0, 0] = np.cos(angle)
base_matrix[0, 2] = np.sin(angle)
base_matrix[2, 0] = -np.sin(angle)
base_matrix[2, 2] = np.cos(angle)
elif cam_idx == 8: # Translate Down (with rotation)
base_matrix[1, 3] = -0.01 * frame_idx # Move down over time
angle = -0.003 * frame_idx
base_matrix[0, 0] = np.cos(angle)
base_matrix[0, 2] = np.sin(angle)
base_matrix[2, 0] = -np.sin(angle)
base_matrix[2, 2] = np.cos(angle)
elif cam_idx == 9: # Arc Left (with rotation)
angle = 0.005 * frame_idx
radius = 2.0
base_matrix[0, 3] = -radius * np.sin(angle)
base_matrix[2, 3] = -radius * np.cos(angle) + radius
# Rotate to look at center
look_angle = angle + np.pi
base_matrix[0, 0] = np.cos(look_angle)
base_matrix[0, 2] = np.sin(look_angle)
base_matrix[2, 0] = -np.sin(look_angle)
base_matrix[2, 2] = np.cos(look_angle)
elif cam_idx == 10: # Arc Right (with rotation)
angle = -0.005 * frame_idx
radius = 2.0
base_matrix[0, 3] = -radius * np.sin(angle)
base_matrix[2, 3] = -radius * np.cos(angle) + radius
# Rotate to look at center
look_angle = angle + np.pi
base_matrix[0, 0] = np.cos(look_angle)
base_matrix[0, 2] = np.sin(look_angle)
base_matrix[2, 0] = -np.sin(look_angle)
base_matrix[2, 2] = np.cos(look_angle)
# Format the matrix as a string (as expected by the app)
# Format: [row1] [row2] [row3] [row4] with spaces between values
matrix_str = ' '.join([f"[{' '.join([str(base_matrix[i, j]) for j in range(4)])}]" for i in range(4)]) + ' '
camera_data[frame_key][f"cam{cam_idx:02d}"] = matrix_str
if progress_callback:
progress_callback(0.7, desc="Saving camera extrinsics data...")
# Save camera extrinsics to JSON file
with open(camera_file, 'w') as f:
json.dump(camera_data, f, indent=2)
logger.info(f"Created sample camera extrinsics at {camera_file}")
logger.info(f"Created directory for example videos at {videos_dir}")
if progress_callback:
progress_callback(1.0, desc="Test data structure created successfully!") |