Spaces:
Running
Running
| # built-in dependencies | |
| import traceback | |
| from typing import Optional, Union, Dict, Any, Tuple, List | |
| # 3rd party dependencies | |
| from numpy.typing import NDArray | |
| # project dependencies | |
| from deepface import DeepFace | |
| from deepface.commons.logger import Logger | |
| logger = Logger() | |
| # pylint: disable=broad-except, too-many-positional-arguments | |
| def represent( | |
| img_path: Union[str, NDArray[Any]], | |
| model_name: str, | |
| detector_backend: str, | |
| enforce_detection: bool, | |
| align: bool, | |
| anti_spoofing: bool, | |
| max_faces: Optional[int] = None, | |
| ) -> Tuple[Dict[str, Any], int]: | |
| try: | |
| result = {} | |
| embedding_objs = DeepFace.represent( | |
| img_path=img_path, | |
| model_name=model_name, | |
| detector_backend=detector_backend, | |
| enforce_detection=enforce_detection, | |
| align=align, | |
| anti_spoofing=anti_spoofing, | |
| max_faces=max_faces, | |
| ) | |
| result["results"] = embedding_objs | |
| return result, 200 | |
| except Exception as err: | |
| tb_str = traceback.format_exc() | |
| logger.error(str(err)) | |
| logger.error(tb_str) | |
| return {"error": f"Exception while representing: {str(err)} - {tb_str}"}, 400 | |
| def verify( | |
| img1_path: Union[str, NDArray[Any]], | |
| img2_path: Union[str, NDArray[Any]], | |
| model_name: str, | |
| detector_backend: str, | |
| distance_metric: str, | |
| enforce_detection: bool, | |
| align: bool, | |
| anti_spoofing: bool, | |
| ) -> Tuple[Dict[str, Any], int]: | |
| try: | |
| obj = DeepFace.verify( | |
| img1_path=img1_path, | |
| img2_path=img2_path, | |
| model_name=model_name, | |
| detector_backend=detector_backend, | |
| distance_metric=distance_metric, | |
| align=align, | |
| enforce_detection=enforce_detection, | |
| anti_spoofing=anti_spoofing, | |
| ) | |
| return obj, 200 | |
| except Exception as err: | |
| tb_str = traceback.format_exc() | |
| logger.error(str(err)) | |
| logger.error(tb_str) | |
| return {"error": f"Exception while verifying: {str(err)} - {tb_str}"}, 400 | |
| def analyze( | |
| img_path: Union[str, NDArray[Any]], | |
| actions: List[str], | |
| detector_backend: str, | |
| enforce_detection: bool, | |
| align: bool, | |
| anti_spoofing: bool, | |
| ) -> Tuple[Dict[str, Any], int]: | |
| try: | |
| result = {} | |
| demographies = DeepFace.analyze( | |
| img_path=img_path, | |
| actions=actions, | |
| detector_backend=detector_backend, | |
| enforce_detection=enforce_detection, | |
| align=align, | |
| silent=True, | |
| anti_spoofing=anti_spoofing, | |
| ) | |
| result["results"] = demographies | |
| return result, 200 | |
| except Exception as err: | |
| tb_str = traceback.format_exc() | |
| logger.error(str(err)) | |
| logger.error(tb_str) | |
| return {"error": f"Exception while analyzing: {str(err)} - {tb_str}"}, 400 | |
| def register( | |
| img: Union[str, NDArray[Any]], | |
| model_name: str, | |
| detector_backend: str, | |
| enforce_detection: bool, | |
| align: bool, | |
| l2_normalize: bool, | |
| expand_percentage: int, | |
| normalization: str, | |
| anti_spoofing: bool, | |
| img_name: Optional[str], | |
| database_type: str, | |
| connection_details: str, | |
| ) -> Tuple[Dict[str, Any], int]: | |
| try: | |
| return ( | |
| DeepFace.register( | |
| img=img, | |
| img_name=img_name, | |
| model_name=model_name, | |
| detector_backend=detector_backend, | |
| enforce_detection=enforce_detection, | |
| align=align, | |
| l2_normalize=l2_normalize, | |
| expand_percentage=expand_percentage, | |
| normalization=normalization, | |
| anti_spoofing=anti_spoofing, | |
| database_type=database_type, | |
| connection_details=connection_details, | |
| ), | |
| 200, | |
| ) | |
| except Exception as err: | |
| tb_str = traceback.format_exc() | |
| logger.error(str(err)) | |
| logger.error(tb_str) | |
| return {"error": f"Exception while registering: {str(err)} - {tb_str}"}, 400 | |
| def search( | |
| img: Union[str, NDArray[Any]], | |
| model_name: str, | |
| detector_backend: str, | |
| distance_metric: str, | |
| enforce_detection: bool, | |
| align: bool, | |
| l2_normalize: bool, | |
| expand_percentage: int, | |
| normalization: str, | |
| anti_spoofing: bool, | |
| similarity_search: bool, | |
| k: Optional[int], | |
| database_type: str, | |
| connection_details: str, | |
| search_method: str, | |
| ) -> Tuple[Dict[str, Any], int]: | |
| try: | |
| result = {} | |
| dfs = DeepFace.search( | |
| img=img, | |
| model_name=model_name, | |
| detector_backend=detector_backend, | |
| distance_metric=distance_metric, | |
| enforce_detection=enforce_detection, | |
| align=align, | |
| l2_normalize=l2_normalize, | |
| expand_percentage=expand_percentage, | |
| normalization=normalization, | |
| anti_spoofing=anti_spoofing, | |
| similarity_search=similarity_search, | |
| k=k, | |
| database_type=database_type, | |
| connection_details=connection_details, | |
| search_method=search_method, | |
| ) | |
| result["results"] = [df.to_dict(orient="records") for df in dfs] | |
| return result, 200 | |
| except Exception as err: | |
| tb_str = traceback.format_exc() | |
| logger.error(str(err)) | |
| logger.error(tb_str) | |
| return {"error": f"Exception while searching: {str(err)} - {tb_str}"}, 400 | |
| def build_index( | |
| model_name: str, | |
| detector_backend: str, | |
| align: bool, | |
| l2_normalize: bool, | |
| database_type: str, | |
| connection_details: str, | |
| ) -> Tuple[Dict[str, Any], int]: | |
| try: | |
| DeepFace.build_index( | |
| model_name=model_name, | |
| detector_backend=detector_backend, | |
| align=align, | |
| l2_normalize=l2_normalize, | |
| database_type=database_type, | |
| connection_details=connection_details, | |
| ) | |
| return {"message": "Index built successfully"}, 200 | |
| except Exception as err: | |
| tb_str = traceback.format_exc() | |
| logger.error(str(err)) | |
| logger.error(tb_str) | |
| return {"error": f"Exception while building index: {str(err)} - {tb_str}"}, 400 | |