File size: 1,531 Bytes
cd5aabe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
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