Automated Action ab0e9b973a Implement tomato severity segmentation model API
- Set up FastAPI project structure with SQLite database
- Create database models for tomato images and severity classifications
- Implement image upload and processing endpoints
- Develop a segmentation model for tomato disease severity detection
- Add API endpoints for analysis and results retrieval
- Implement health check endpoint
- Set up Alembic for database migrations
- Update project documentation
2025-05-27 06:22:15 +00:00

96 lines
2.1 KiB
Python

from datetime import datetime
from typing import List, Optional, Dict, Any
from pydantic import BaseModel, validator
# TomatoImage schemas
class TomatoImageBase(BaseModel):
filename: str
mime_type: str
width: Optional[int] = None
height: Optional[int] = None
file_size: int
class TomatoImageCreate(TomatoImageBase):
file_path: str
class TomatoImage(TomatoImageBase):
id: str
file_path: str
uploaded_at: datetime
class Config:
from_attributes = True
# SeverityDetail schemas
class SeverityDetailBase(BaseModel):
severity_class: str
confidence: float
affected_area_percentage: Optional[float] = None
class SeverityDetailCreate(SeverityDetailBase):
analysis_id: str
class SeverityDetail(SeverityDetailBase):
id: str
analysis_id: str
class Config:
from_attributes = True
# AnalysisResult schemas
class AnalysisResultBase(BaseModel):
model_name: str
model_version: str
primary_severity: Optional[str] = None
severity_confidence: Optional[float] = None
segmentation_data: Optional[str] = None
processing_time_ms: Optional[int] = None
class AnalysisResultCreate(AnalysisResultBase):
image_id: str
class AnalysisResult(AnalysisResultBase):
id: str
image_id: str
processed_at: datetime
severity_details: List[SeverityDetail] = []
class Config:
from_attributes = True
# Response schemas
class AnalysisResponse(BaseModel):
id: str
image: TomatoImage
primary_severity: Optional[str] = None
severity_confidence: Optional[float] = None
severity_details: List[SeverityDetail] = []
segmentation_data: Optional[Dict[str, Any]] = None
processed_at: datetime
model_name: str
model_version: str
@validator('segmentation_data', pre=True)
def parse_segmentation_data(cls, v):
import json
if v and isinstance(v, str):
try:
return json.loads(v)
except Exception:
return None
return v
class UploadResponse(BaseModel):
image: TomatoImage
message: str = "Image uploaded successfully"