face_recognition.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. # Copyright (c) 2024 PaddlePaddle Authors. All Rights Reserved.
  2. #
  3. # Licensed under the Apache License, Version 2.0 (the "License");
  4. # you may not use this file except in compliance with the License.
  5. # You may obtain a copy of the License at
  6. #
  7. # http://www.apache.org/licenses/LICENSE-2.0
  8. #
  9. # Unless required by applicable law or agreed to in writing, software
  10. # distributed under the License is distributed on an "AS IS" BASIS,
  11. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  12. # See the License for the specific language governing permissions and
  13. # limitations under the License.
  14. from typing import Final, List, Optional
  15. from pydantic import BaseModel
  16. from ..infra.models import PrimaryOperations
  17. from .shared import object_detection
  18. __all__ = [
  19. "ImageLabelPair",
  20. "BUILD_INDEX_ENDPOINT",
  21. "BuildIndexRequest",
  22. "BuildIndexResult",
  23. "ADD_IMAGES_TO_INDEX_ENDPOINT",
  24. "AddImagesToIndexRequest",
  25. "AddImagesToIndexResult",
  26. "REMOVE_IMAGES_FROM_INDEX_ENDPOINT",
  27. "RemoveImagesFromIndexRequest",
  28. "RemoveImagesFromIndexResult",
  29. "INFER_ENDPOINT",
  30. "InferRequest",
  31. "RecResult",
  32. "Face",
  33. "InferResult",
  34. "PRIMARY_OPERATIONS",
  35. ]
  36. class ImageLabelPair(BaseModel):
  37. image: str
  38. label: str
  39. BUILD_INDEX_ENDPOINT: Final[str] = "/face-recognition-index-build"
  40. class BuildIndexRequest(BaseModel):
  41. imageLabelPairs: List[ImageLabelPair]
  42. class BuildIndexResult(BaseModel):
  43. indexKey: str
  44. imageCount: int
  45. ADD_IMAGES_TO_INDEX_ENDPOINT: Final[str] = "/face-recognition-index-add"
  46. class AddImagesToIndexRequest(BaseModel):
  47. imageLabelPairs: List[ImageLabelPair]
  48. indexKey: str
  49. class AddImagesToIndexResult(BaseModel):
  50. imageCount: int
  51. REMOVE_IMAGES_FROM_INDEX_ENDPOINT: Final[str] = "/face-recognition-index-remove"
  52. class RemoveImagesFromIndexRequest(BaseModel):
  53. ids: List[int]
  54. indexKey: str
  55. class RemoveImagesFromIndexResult(BaseModel):
  56. imageCount: int
  57. INFER_ENDPOINT: Final[str] = "/face-recognition-infer"
  58. class InferRequest(BaseModel):
  59. image: str
  60. indexKey: Optional[str] = None
  61. detThreshold: Optional[float] = None
  62. recThreshold: Optional[float] = None
  63. hammingRadius: Optional[float] = None
  64. topk: Optional[int] = None
  65. visualize: Optional[bool] = None
  66. class RecResult(BaseModel):
  67. label: str
  68. score: float
  69. class Face(BaseModel):
  70. bbox: object_detection.BoundingBox
  71. recResults: List[RecResult]
  72. score: float
  73. class InferResult(BaseModel):
  74. faces: List[Face]
  75. image: Optional[str] = None
  76. PRIMARY_OPERATIONS: Final[PrimaryOperations] = {
  77. "buildIndex": (BUILD_INDEX_ENDPOINT, BuildIndexRequest, BuildIndexResult),
  78. "addImagesToIndex": (
  79. ADD_IMAGES_TO_INDEX_ENDPOINT,
  80. AddImagesToIndexRequest,
  81. AddImagesToIndexResult,
  82. ),
  83. "removeImagesFromIndex": (
  84. REMOVE_IMAGES_FROM_INDEX_ENDPOINT,
  85. RemoveImagesFromIndexRequest,
  86. RemoveImagesFromIndexResult,
  87. ),
  88. "infer": (INFER_ENDPOINT, InferRequest, InferResult),
  89. }