Skip to content

Commit

Permalink
Merge pull request #1310 from serengil/feat-task-1708-exception-messa…
Browse files Browse the repository at this point in the history
…ges-refactored-for-1339

Feat task 1708 exception messages refactored for 1339
  • Loading branch information
serengil authored Aug 17, 2024
2 parents 9768abc + e9d96a7 commit f2c2bb2
Show file tree
Hide file tree
Showing 3 changed files with 26 additions and 13 deletions.
4 changes: 2 additions & 2 deletions deepface/commons/logger.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ class Logger:
A Logger class for logging messages with a specific log level.
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.
"""

Expand All @@ -21,7 +21,7 @@ def __new__(cls):

def __init__(self):
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))
try:
self.log_level = int(log_level)
Expand Down
17 changes: 8 additions & 9 deletions deepface/modules/verification.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,22 +115,21 @@ def verify(
}

def extract_embeddings_and_facial_areas(
img_path: Union[str, np.ndarray, List[float]],
index: int
) -> Tuple[List[List[float]], List[dict]]:
img_path: Union[str, np.ndarray, List[float]], index: int
) -> Tuple[List[List[float]], List[dict]]:
"""
Extracts facial embeddings and corresponding facial areas from an
image or returns pre-calculated embeddings.
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
pre-calculated embeddings and validates them.
Args:
img_path (Union[str, np.ndarray, List[float]]):
- A string representing the file path to an image,
- A NumPy array containing the image data,
img_path (Union[str, np.ndarray, List[float]]):
- A string representing the file path to an image,
- A NumPy array containing the image data,
- Or a list of pre-calculated embedding values (of type `float`).
index (int): An index value used in error messages and logging
to identify the number of the image.
Expand All @@ -150,15 +149,15 @@ def extract_embeddings_and_facial_areas(

if silent is False:
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"
f" for the {model_name} model."
)

if len(img_path) != dims:
raise ValueError(
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]
Expand Down
18 changes: 16 additions & 2 deletions tests/test_verify.py
Original file line number Diff line number Diff line change
Expand Up @@ -153,7 +153,7 @@ def test_verify_with_precalculated_embeddings_for_incorrect_model():

with pytest.raises(
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(
img1_path=img1_embedding, img2_path=img2_embedding, model_name="Facenet", silent=True
Expand All @@ -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.",
):
_ = 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)

0 comments on commit f2c2bb2

Please sign in to comment.