Marwan
Restructure + add reverse face search (PimEyes-style)
f5eeb1c
Raw
History Blame Contribute Delete
2.47 kB
"""
Normalization-internal DTOs.
These are intermediate objects used by the merger before being promoted
to the cross-layer models in models/reports.py.
"""
from __future__ import annotations
from dataclasses import dataclass, field
from typing import Dict, List, Optional
@dataclass
class NormalizedBox:
"""One face box from one detector."""
x: int
y: int
w: int
h: int
confidence: float
detector: str
landmarks: Optional[dict] = None
@dataclass
class NormalizedMatch:
"""One recognition match against the gallery."""
query_face_index: int
best_match: Optional[str]
distance: float
distances: Dict[str, float]
recognizer: str
@dataclass
class NormalizedScrapeImage:
url: str
alt: str
source_page: str
scraper: str
width: Optional[int] = None
height: Optional[int] = None
@dataclass
class NormalizedReverseMatch:
image_url: str
source_page: str
title: str
snippet: str
thumbnail: str
provider: str
@dataclass
class NormalizedImageAnalysis:
"""One image-analysis result."""
provider: str
quality_score: Optional[float] = None
brightness: Optional[float] = None
contrast: Optional[float] = None
sharpness: Optional[float] = None
noise_level: Optional[float] = None
width: Optional[int] = None
height: Optional[int] = None
channels: Optional[int] = None
color_profile: Optional[str] = None
dominant_colors: List[str] = field(default_factory=list)
aspects: dict = field(default_factory=dict)
@dataclass
class NormalizedMetadata:
"""One metadata-extraction result."""
provider: str
format: Optional[str] = None
exif: dict = field(default_factory=dict)
xmp: dict = field(default_factory=dict)
iptc: dict = field(default_factory=dict)
gps: Optional[dict] = None
camera_make: Optional[str] = None
camera_model: Optional[str] = None
software: Optional[str] = None
capture_time: Optional[str] = None
@dataclass
class NormalizedForensics:
"""One forensics result."""
provider: str
integrity_score: Optional[float] = None
is_duplicate: Optional[bool] = None
duplicate_of: Optional[str] = None
similarity_score: Optional[float] = None
manipulation_indicators: List[str] = field(default_factory=list)
ela_score: Optional[float] = None
noise_inconsistency: Optional[float] = None
details: dict = field(default_factory=dict)