137 lines
3.6 KiB
Python
137 lines
3.6 KiB
Python
"""
|
|
Pydantic Models - GENERATED FILE
|
|
|
|
Do not edit directly. Regenerate using modelgen.
|
|
"""
|
|
|
|
from datetime import datetime
|
|
from enum import Enum
|
|
from typing import Any, Dict, List, Optional
|
|
from uuid import UUID
|
|
|
|
from pydantic import BaseModel, Field
|
|
|
|
class DetectRequest(BaseModel):
|
|
"""Request body for object detection."""
|
|
image: str
|
|
model: Optional[str] = None
|
|
confidence: Optional[float] = None
|
|
target_classes: Optional[List[str]] = None
|
|
|
|
class BBox(BaseModel):
|
|
"""A detected bounding box."""
|
|
x: int
|
|
y: int
|
|
w: int
|
|
h: int
|
|
confidence: float
|
|
label: str
|
|
|
|
class DetectResponse(BaseModel):
|
|
"""Response from object detection."""
|
|
detections: List[BBox] = Field(default_factory=list)
|
|
|
|
class OCRRequest(BaseModel):
|
|
"""Request body for OCR."""
|
|
image: str
|
|
languages: Optional[List[str]] = None
|
|
|
|
class OCRTextResult(BaseModel):
|
|
"""A single OCR text extraction result."""
|
|
text: str
|
|
confidence: float
|
|
bbox: List[int] = Field(default_factory=list)
|
|
|
|
class OCRResponse(BaseModel):
|
|
"""Response from OCR."""
|
|
results: List[OCRTextResult] = Field(default_factory=list)
|
|
|
|
class PreprocessRequest(BaseModel):
|
|
"""Request body for image preprocessing."""
|
|
image: str
|
|
binarize: bool = False
|
|
deskew: bool = False
|
|
contrast: bool = True
|
|
|
|
class PreprocessResponse(BaseModel):
|
|
"""Response from preprocessing."""
|
|
image: str
|
|
|
|
class VLMRequest(BaseModel):
|
|
"""Request body for visual language model query."""
|
|
image: str
|
|
prompt: str
|
|
model: Optional[str] = None
|
|
|
|
class VLMResponse(BaseModel):
|
|
"""Response from VLM."""
|
|
brand: str
|
|
confidence: float
|
|
reasoning: str
|
|
|
|
class AnalyzeRegionsRequest(BaseModel):
|
|
"""Request body for CV region analysis."""
|
|
image: str
|
|
edge_canny_low: int = 50
|
|
edge_canny_high: int = 150
|
|
edge_hough_threshold: int = 80
|
|
edge_hough_min_length: int = 100
|
|
edge_hough_max_gap: int = 10
|
|
edge_pair_max_distance: int = 200
|
|
edge_pair_min_distance: int = 15
|
|
|
|
class RegionBox(BaseModel):
|
|
"""A candidate region from CV analysis."""
|
|
x: int
|
|
y: int
|
|
w: int
|
|
h: int
|
|
confidence: float
|
|
label: str
|
|
|
|
class AnalyzeRegionsResponse(BaseModel):
|
|
"""Response from CV region analysis."""
|
|
regions: List[RegionBox] = Field(default_factory=list)
|
|
|
|
class AnalyzeRegionsDebugResponse(BaseModel):
|
|
"""Response from CV region analysis with debug overlays."""
|
|
regions: List[RegionBox] = Field(default_factory=list)
|
|
edge_overlay_b64: str = ""
|
|
lines_overlay_b64: str = ""
|
|
horizontal_count: int = 0
|
|
pair_count: int = 0
|
|
|
|
class SegmentFieldRequest(BaseModel):
|
|
"""Request body for field segmentation."""
|
|
image: str
|
|
hue_low: int = 30
|
|
hue_high: int = 85
|
|
sat_low: int = 30
|
|
sat_high: int = 255
|
|
val_low: int = 30
|
|
val_high: int = 255
|
|
morph_kernel: int = 15
|
|
min_area_ratio: float = 0.05
|
|
|
|
class SegmentFieldResponse(BaseModel):
|
|
"""Response from field segmentation."""
|
|
boundary: List[str] = Field(default_factory=list)
|
|
coverage: float = 0.0
|
|
mask_b64: str = ""
|
|
|
|
class SegmentFieldDebugResponse(BaseModel):
|
|
"""Response from field segmentation with debug overlay."""
|
|
boundary: List[str] = Field(default_factory=list)
|
|
coverage: float = 0.0
|
|
mask_overlay_b64: str = ""
|
|
|
|
class ConfigUpdate(BaseModel):
|
|
"""Request body for updating server configuration."""
|
|
device: Optional[str] = None
|
|
yolo_model: Optional[str] = None
|
|
yolo_confidence: Optional[float] = None
|
|
vram_budget_mb: Optional[int] = None
|
|
strategy: Optional[str] = None
|
|
ocr_languages: Optional[List[str]] = None
|
|
ocr_min_confidence: Optional[float] = None
|