mirror of
https://github.com/serengil/deepface.git
synced 2025-06-06 11:35:21 +00:00
Merge pull request #1310 from serengil/feat-task-1708-exception-messages-refactored-for-1339
Feat task 1708 exception messages refactored for 1339
This commit is contained in:
commit
f2c2bb27e4
@ -8,7 +8,7 @@ class Logger:
|
|||||||
A Logger class for logging messages with a specific log level.
|
A Logger class for logging messages with a specific log level.
|
||||||
|
|
||||||
The class follows the singleton design pattern, ensuring that only one
|
The class follows the singleton design pattern, ensuring that only one
|
||||||
instance of the Logger is created. The parameters of the first instance
|
instance of the Logger is created. The parameters of the first instance
|
||||||
are preserved across all instances.
|
are preserved across all instances.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
@ -21,7 +21,7 @@ class Logger:
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
if not hasattr(self, "_singleton_initialized"):
|
if not hasattr(self, "_singleton_initialized"):
|
||||||
self._singleton_initialized = True # to prevent multiple initializations
|
self._singleton_initialized = True # to prevent multiple initializations
|
||||||
log_level = os.environ.get("DEEPFACE_LOG_LEVEL", str(logging.INFO))
|
log_level = os.environ.get("DEEPFACE_LOG_LEVEL", str(logging.INFO))
|
||||||
try:
|
try:
|
||||||
self.log_level = int(log_level)
|
self.log_level = int(log_level)
|
||||||
|
@ -115,22 +115,21 @@ def verify(
|
|||||||
}
|
}
|
||||||
|
|
||||||
def extract_embeddings_and_facial_areas(
|
def extract_embeddings_and_facial_areas(
|
||||||
img_path: Union[str, np.ndarray, List[float]],
|
img_path: Union[str, np.ndarray, List[float]], index: int
|
||||||
index: int
|
) -> Tuple[List[List[float]], List[dict]]:
|
||||||
) -> Tuple[List[List[float]], List[dict]]:
|
|
||||||
"""
|
"""
|
||||||
Extracts facial embeddings and corresponding facial areas from an
|
Extracts facial embeddings and corresponding facial areas from an
|
||||||
image or returns pre-calculated embeddings.
|
image or returns pre-calculated embeddings.
|
||||||
|
|
||||||
Depending on the type of img_path, the function either extracts
|
Depending on the type of img_path, the function either extracts
|
||||||
facial embeddings from the provided image
|
facial embeddings from the provided image
|
||||||
(via a path or NumPy array) or verifies that the input is a list of
|
(via a path or NumPy array) or verifies that the input is a list of
|
||||||
pre-calculated embeddings and validates them.
|
pre-calculated embeddings and validates them.
|
||||||
|
|
||||||
Args:
|
Args:
|
||||||
img_path (Union[str, np.ndarray, List[float]]):
|
img_path (Union[str, np.ndarray, List[float]]):
|
||||||
- A string representing the file path to an image,
|
- A string representing the file path to an image,
|
||||||
- A NumPy array containing the image data,
|
- A NumPy array containing the image data,
|
||||||
- Or a list of pre-calculated embedding values (of type `float`).
|
- Or a list of pre-calculated embedding values (of type `float`).
|
||||||
index (int): An index value used in error messages and logging
|
index (int): An index value used in error messages and logging
|
||||||
to identify the number of the image.
|
to identify the number of the image.
|
||||||
@ -150,7 +149,7 @@ def verify(
|
|||||||
|
|
||||||
if silent is False:
|
if silent is False:
|
||||||
logger.warn(
|
logger.warn(
|
||||||
"You passed 1st image as pre-calculated embeddings."
|
f"You passed {index}-th image as pre-calculated embeddings."
|
||||||
"Please ensure that embeddings have been calculated"
|
"Please ensure that embeddings have been calculated"
|
||||||
f" for the {model_name} model."
|
f" for the {model_name} model."
|
||||||
)
|
)
|
||||||
@ -158,7 +157,7 @@ def verify(
|
|||||||
if len(img_path) != dims:
|
if len(img_path) != dims:
|
||||||
raise ValueError(
|
raise ValueError(
|
||||||
f"embeddings of {model_name} should have {dims} dimensions,"
|
f"embeddings of {model_name} should have {dims} dimensions,"
|
||||||
f" but it has {len(img_path)} dimensions input"
|
f" but {index}-th image has {len(img_path)} dimensions input"
|
||||||
)
|
)
|
||||||
|
|
||||||
img_embeddings = [img_path]
|
img_embeddings = [img_path]
|
||||||
|
@ -153,7 +153,7 @@ def test_verify_with_precalculated_embeddings_for_incorrect_model():
|
|||||||
|
|
||||||
with pytest.raises(
|
with pytest.raises(
|
||||||
ValueError,
|
ValueError,
|
||||||
match="embeddings of Facenet should have 128 dimensions, but it has 4096 dimensions input",
|
match="embeddings of Facenet should have 128 dimensions, but 1-th image has 4096 dimensions input",
|
||||||
):
|
):
|
||||||
_ = DeepFace.verify(
|
_ = DeepFace.verify(
|
||||||
img1_path=img1_embedding, img2_path=img2_embedding, model_name="Facenet", silent=True
|
img1_path=img1_embedding, img2_path=img2_embedding, model_name="Facenet", silent=True
|
||||||
@ -171,4 +171,18 @@ def test_verify_for_broken_embeddings():
|
|||||||
match="When passing img1_path as a list, ensure that all its items are of type float.",
|
match="When passing img1_path as a list, ensure that all its items are of type float.",
|
||||||
):
|
):
|
||||||
_ = DeepFace.verify(img1_path=img1_embeddings, img2_path=img2_embeddings)
|
_ = DeepFace.verify(img1_path=img1_embeddings, img2_path=img2_embeddings)
|
||||||
logger.info("✅ test verify for broken embeddings content is done")
|
logger.info("✅ test verify for broken embeddings content is done")
|
||||||
|
|
||||||
|
|
||||||
|
def test_verify_for_nested_embeddings():
|
||||||
|
"""
|
||||||
|
batch embeddings not supported
|
||||||
|
"""
|
||||||
|
img1_embeddings = [[1, 2, 3], [4, 5, 6]]
|
||||||
|
img2_path = "dataset/img1.jpg"
|
||||||
|
|
||||||
|
with pytest.raises(
|
||||||
|
ValueError,
|
||||||
|
match="When passing img1_path as a list, ensure that all its items are of type float",
|
||||||
|
):
|
||||||
|
_ = DeepFace.verify(img1_path=img1_embeddings, img2_path=img2_path)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user