Initial commit: Speckle-Scanner 3D pipeline with setup README

This commit is contained in:
2026-06-10 03:09:05 +05:00
commit 1765934846
375 changed files with 123081 additions and 0 deletions
+74
View File
@@ -0,0 +1,74 @@
import os
import re
from pathlib import Path
# 1. DYNAMIC ANCHOR - Works on ANY machine
HOME_DIR = Path.home()
# 2. MAIN DIRECTORIES
SOURCE_CODE_DIR = HOME_DIR / "Speckle-Scanner"
RAW_DATA_DIR = HOME_DIR / "3D-Scans"
CALIB_DATA_DIR = HOME_DIR / "Calib-data"
PROCESSING_DIR = HOME_DIR / "Speckle-Scanner_Processing_data"
# 3. HELPER FUNCTIONS FOR DYNAMIC PATHING
def get_raw_dir(project, date_str, session, scan):
"""Path to original untouched data."""
return RAW_DATA_DIR / project / date_str / session / scan
def get_calib_dir(project, date_str, calib_number):
"""Path to camera calibration data."""
return CALIB_DATA_DIR / project / date_str / calib_number
def get_processing_step_dir(project, date_str, session, scan, step_folder_name):
"""
Path for sequential pipeline steps (e.g., '01_raw_images', '02_rect_images').
Automatically creates the folder if it does not exist.
"""
path = PROCESSING_DIR / project / date_str / session / scan / step_folder_name
path.mkdir(parents=True, exist_ok=True)
return path
def get_session_processing_dir(project, date_str, session):
"""Path to one processing session directory."""
path = PROCESSING_DIR / project / date_str / session
path.mkdir(parents=True, exist_ok=True)
return path
def get_params_link_dir(project, date_str, session):
"""Path to shared params_link folder for one session."""
return get_session_processing_dir(project, date_str, session) / "params_link"
def list_session_dirs(project, date_str):
"""Return sorted session folder names under a project/date."""
date_dir = PROCESSING_DIR / project / date_str
if not date_dir.exists():
return []
sessions = [
p.name for p in date_dir.iterdir()
if p.is_dir() and "session" in p.name.lower()
]
def session_sort_key(name):
m = re.search(r'\d+', name)
return int(m.group()) if m else 0
return sorted(sessions, key=session_sort_key)
def list_scan_dirs(project, date_str, session):
"""Return sorted scan folder names (handles 'Scan000001' and 'scan-1' patterns)."""
session_dir = get_session_processing_dir(project, date_str, session)
scans = [
p.name for p in session_dir.iterdir()
if p.is_dir() and (p.name.startswith("Scan") or p.name.startswith("scan-"))
]
def scan_sort_key(name):
m = re.search(r'\d+', name)
return int(m.group()) if m else 0
return sorted(scans, key=scan_sort_key)