Files
Face-Verifying/app/schemas.py

75 lines
3.0 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from pydantic import BaseModel, Field
from typing import Optional, List
# ===================================================================
# 基础模型 (Base Models)
# ===================================================================
class UserInfo(BaseModel):
"""用户的基本信息"""
id: int = Field(..., description="用户的唯一ID", example=1001)
name: str = Field(..., description="用户的姓名", example="张三")
registered_faces_count: int = Field(..., description="该用户已注册的人脸数量", example=2)
class FaceLocation(BaseModel):
"""人脸在图片中的位置和尺寸"""
x: int = Field(..., description="人脸框左上角的X坐标")
y: int = Field(..., description="人脸框左上角的Y坐标")
width: int = Field(..., description="人脸框的宽度")
height: int = Field(..., description="人脸框的高度")
# ===================================================================
# API 请求模型 (Request Models)
# ===================================================================
class ImageSource(BaseModel):
"""图片来源可以是URL或Base64编码的数据"""
url: Optional[str] = Field(None, description="图片的URL地址", example="http://example.com/image.jpg")
face_data: Optional[str] = Field(None, description="图片的Base64编码字符串")
class RegisterRequest(ImageSource):
"""注册新用户的请求体"""
id: int = Field(..., description="要注册用户的唯一ID", example=1001)
name: str = Field(..., description="要注册用户的姓名", example="张三")
class VerifyRequest(ImageSource):
"""1:1人脸认证的请求体"""
id: int = Field(..., description="要验证的用户ID", example=1001)
# ===================================================================
# API 响应模型 (Response Models)
# ===================================================================
class StandardResponse(BaseModel):
"""标准API响应模型"""
code: int = Field(0, description="响应码0为成功非0为失败", example=0)
message: str = Field("success", description="响应消息", example="操作成功")
data: Optional[dict] = None
class UserListResponse(StandardResponse):
"""获取用户列表的响应"""
data: List[UserInfo]
class RegisterResponse(StandardResponse):
"""注册成功后的响应"""
data: UserInfo
class VerificationResult(BaseModel):
"""1:1认证结果"""
match: bool = Field(..., description="是否匹配")
confidence: float = Field(..., description="置信度 (0.0 to 1.0)")
class VerifyResponse(StandardResponse):
"""1:1人脸认证的响应"""
data: VerificationResult
class DetectedFace(UserInfo):
"""1:N识别结果中的单个人脸信息"""
location: FaceLocation
confidence: float = Field(..., description="识别的置信度")
class DetectResponse(StandardResponse):
"""1:N人脸识别的响应"""
data: List[DetectedFace]