NMundhra's picture
Upload folder using huggingface_hub
3777dcd verified
Raw
History Blame Contribute Delete
1.59 kB
import json
from dataclasses import dataclass, asdict
from typing import List, Dict, Optional, Tuple
@dataclass
class Point:
x: int
y: int
@dataclass
class BoundingBox:
xmin: int
ymin: int
xmax: int
ymax: int
@dataclass
class RetinalLayer:
"""
Represents a continuous anatomical boundary layer (e.g. ILM, RPE).
Stored as a sequence of points (x, y) forming a 1D spline across the image width.
"""
class_id: int
class_name: str
boundary_points: List[Point]
avg_depth: float
@dataclass
class LesionInstance:
"""
Represents a discrete pathological finding (e.g. Fluid, Drusen).
Stored as a closed polygon contour.
"""
class_id: int
class_name: str
polygon: List[Point]
bounding_box: BoundingBox
area_pixels: float
# Optional clinical metrics based on geometry
max_height: Optional[float] = None
max_width: Optional[float] = None
@dataclass
class ClinicalMetrics:
"""
Global clinical metrics calculated for the entire scan.
"""
average_retinal_thickness: float
total_fluid_area: float
max_fluid_height: float
@dataclass
class OCTScanAnalysis:
"""
The root object representing the full analysis of a single OCT B-scan.
"""
image_width: int
image_height: int
layers: List[RetinalLayer]
lesions: List[LesionInstance]
clinical_metrics: ClinicalMetrics
model_version: str = "v1.0"
def to_json(self) -> str:
"""Serializes the analysis object to a JSON string."""
return json.dumps(asdict(self), indent=2)