from enum import Enum from typing import List, Optional from pydantic import BaseModel class ModelType(str, Enum): """模型类型枚举""" HOWCUTEAMI = "howcuteami" DEEPFACE = "deepface" HYBRID = "hybrid" # 混合模式:颜值性别用howcuteami,年龄情绪用deepface class ImageScoreItem(BaseModel): file_path: str score: float is_cropped_face: bool = False size_bytes: int size_str: str last_modified: str nickname: Optional[str] = None class SearchRequest(BaseModel): keyword: Optional[str] = "" searchType: Optional[str] = "face" top_k: Optional[int] = 5 score_threshold: float = 0.0 nickname: Optional[str] = None class ImageSearchRequest(BaseModel): image: Optional[str] = None # base64编码的图片 searchType: Optional[str] = "face" top_k: Optional[int] = 5 score_threshold: float = 0.0 nickname: Optional[str] = None class ImageFileList(BaseModel): results: List[ImageScoreItem] count: int class PagedImageFileList(BaseModel): results: List[ImageScoreItem] count: int page: int page_size: int total_pages: int class CelebrityMatchResponse(BaseModel): filename: str display_name: Optional[str] = None distance: float similarity: float confidence: float face_filename: Optional[str] = None class CategoryStatItem(BaseModel): category: str display_name: str count: int class CategoryStatsResponse(BaseModel): stats: List[CategoryStatItem] total: int