| """ |
| 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) |
|
|