from __future__ import annotations from dataclasses import dataclass from pathlib import Path VISLOC_DIR = Path("data/Image/VISLOC") IMAGE_ROOT = Path("data/Image") EXAMPLES_ROOT = Path("examples") IMAGE_EXTS = (".jpg", ".jpeg", ".png", ".JPG", ".JPEG", ".PNG") DEFAULT_ALTITUDE_M = 450.0 ASSUMED_FOV_DEG = 90.0 DEFAULT_MODEL_ID = "depth-anything/DA3MONO-LARGE" SEGMENTATION_MODEL_ID = "facebook/sam3" SEGMENTATION_MAX_SIDE = 512 SEGMENTATION_SCORE_THRESH = 0.25 SEGMENTATION_MASK_THRESH = 0.25 WATER_PROMPT = "water" ROAD_PROMPT = "motorway" TREE_PROMPT = "trees" ROOF_PROMPT = "rooftop" @dataclass(frozen=True) class AnalyzerSettings: """Bundle knobs shared between the UI and the processing pipeline.""" footprint_m: float = 10.0 std_thresh: float = 0.005 grad_thresh: float = 0.1 clearance_factor: float = 1.5 process_res_cap: int = 1024 depth_smoothing_base: float = 0.0 segmentation_max_side: int = SEGMENTATION_MAX_SIDE segmentation_model_id: str = SEGMENTATION_MODEL_ID segmentation_score_thresh: float = SEGMENTATION_SCORE_THRESH segmentation_mask_thresh: float = SEGMENTATION_MASK_THRESH water_prompt: str = WATER_PROMPT road_prompt: str = ROAD_PROMPT tree_prompt: str = TREE_PROMPT roof_prompt: str = ROOF_PROMPT coverage_strictness: float = 0.95 openness_weight: float = 0.5 texture_threshold: float = 0.5 altitude_m: float = DEFAULT_ALTITUDE_M fov_deg: float = ASSUMED_FOV_DEG model_id: str = DEFAULT_MODEL_ID DEFAULT_ANALYZER_SETTINGS = AnalyzerSettings() __all__ = [ "VISLOC_DIR", "IMAGE_ROOT", "EXAMPLES_ROOT", "IMAGE_EXTS", "DEFAULT_ALTITUDE_M", "ASSUMED_FOV_DEG", "DEFAULT_MODEL_ID", "SEGMENTATION_MODEL_ID", "SEGMENTATION_MAX_SIDE", "SEGMENTATION_SCORE_THRESH", "SEGMENTATION_MASK_THRESH", "WATER_PROMPT", "ROAD_PROMPT", "TREE_PROMPT", "ROOF_PROMPT", "DEFAULT_ANALYZER_SETTINGS", "AnalyzerSettings", ]