49 lines
1.9 KiB
Python
49 lines
1.9 KiB
Python
import pandas as pd
|
|
import numpy as np
|
|
from pathlib import Path
|
|
|
|
def load_csv_with_standard_decimal(file_path):
|
|
with open(file_path, 'r') as f:
|
|
scene_line = f.readline().strip()
|
|
scene_name = scene_line.split(': ')[1].split('_')[0]
|
|
df = pd.read_csv(file_path, skiprows=1)
|
|
return df, scene_name
|
|
|
|
def calculate_distance(row):
|
|
origin = np.array([row['XR_Origin_X'], row['XR_Origin_Y'], row['XR_Origin_Z']])
|
|
tracked = np.array([row['TrackedObject_X'], row['TrackedObject_Y'], row['TrackedObject_Z']])
|
|
return np.linalg.norm(tracked - origin)
|
|
|
|
def process_position_data(data_dir):
|
|
data_by_scene = {}
|
|
all_distances = []
|
|
csv_files = list(Path(data_dir).glob('**/P*_PositionData*.csv'))
|
|
for file_path in csv_files:
|
|
df, scene_name = load_csv_with_standard_decimal(str(file_path))
|
|
df['Distance'] = df.apply(calculate_distance, axis=1)
|
|
all_distances.extend(df['Distance'])
|
|
if scene_name not in data_by_scene:
|
|
data_by_scene[scene_name] = []
|
|
data_by_scene[scene_name].extend(df['Distance'])
|
|
return all_distances, data_by_scene
|
|
|
|
def print_stats(distances, label):
|
|
distances = np.array(distances)
|
|
print(f"\n--- {label} ---")
|
|
print(f"Count: {len(distances)}")
|
|
print(f"Mean: {np.mean(distances):.4f}")
|
|
print(f"Std: {np.std(distances):.4f}")
|
|
print(f"Min: {np.min(distances):.4f}")
|
|
print(f"Max: {np.max(distances):.4f}")
|
|
print(f"25th percentile: {np.percentile(distances, 25):.4f}")
|
|
print(f"50th percentile (median): {np.percentile(distances, 50):.4f}")
|
|
print(f"75th percentile: {np.percentile(distances, 75):.4f}")
|
|
|
|
def main():
|
|
all_distances, data_by_scene = process_position_data('Recordings')
|
|
print_stats(all_distances, 'All Scenes Combined')
|
|
for scene, distances in data_by_scene.items():
|
|
print_stats(distances, f'Scene: {scene}')
|
|
|
|
if __name__ == "__main__":
|
|
main() |