mirror of
https://github.com/serengil/deepface.git
synced 2025-06-06 11:35:21 +00:00
facial area coordinates must be in image borders
This commit is contained in:
parent
f3d1809a9f
commit
30591701a7
@ -85,7 +85,9 @@ def extract_faces(
|
|||||||
if img is None:
|
if img is None:
|
||||||
raise ValueError(f"Exception while loading {img_name}")
|
raise ValueError(f"Exception while loading {img_name}")
|
||||||
|
|
||||||
base_region = FacialAreaRegion(x=0, y=0, w=img.shape[1], h=img.shape[0], confidence=0)
|
height, width, _ = img.shape
|
||||||
|
|
||||||
|
base_region = FacialAreaRegion(x=0, y=0, w=width, h=height, confidence=0)
|
||||||
|
|
||||||
if detector_backend == "skip":
|
if detector_backend == "skip":
|
||||||
face_objs = [DetectedFace(img=img, facial_area=base_region, confidence=0)]
|
face_objs = [DetectedFace(img=img, facial_area=base_region, confidence=0)]
|
||||||
@ -137,10 +139,11 @@ def extract_faces(
|
|||||||
if normalize_face:
|
if normalize_face:
|
||||||
current_img = current_img / 255 # normalize input in [0, 1]
|
current_img = current_img / 255 # normalize input in [0, 1]
|
||||||
|
|
||||||
x = int(current_region.x)
|
# cast to int for flask, and do final checks for borders
|
||||||
y = int(current_region.y)
|
x = max(0, int(current_region.x))
|
||||||
w = int(current_region.w)
|
y = max(0, int(current_region.y))
|
||||||
h = int(current_region.h)
|
w = min(width - x - 1, int(current_region.w))
|
||||||
|
h = min(height - y - 1, int(current_region.h))
|
||||||
|
|
||||||
resp_obj = {
|
resp_obj = {
|
||||||
"face": current_img,
|
"face": current_img,
|
||||||
|
BIN
tests/dataset/selfie-many-people.jpg
Normal file
BIN
tests/dataset/selfie-many-people.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 70 KiB |
@ -98,3 +98,28 @@ def image_to_base64(image_path):
|
|||||||
with open(image_path, "rb") as image_file:
|
with open(image_path, "rb") as image_file:
|
||||||
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
|
encoded_string = base64.b64encode(image_file.read()).decode("utf-8")
|
||||||
return "data:image/jpeg," + encoded_string
|
return "data:image/jpeg," + encoded_string
|
||||||
|
|
||||||
|
|
||||||
|
def test_facial_coordinates_are_in_borders():
|
||||||
|
img_path = "dataset/selfie-many-people.jpg"
|
||||||
|
img = cv2.imread(img_path)
|
||||||
|
height, width, _ = img.shape
|
||||||
|
|
||||||
|
results = DeepFace.extract_faces(img_path=img_path)
|
||||||
|
|
||||||
|
assert len(results) > 0
|
||||||
|
|
||||||
|
for result in results:
|
||||||
|
facial_area = result["facial_area"]
|
||||||
|
|
||||||
|
x = facial_area["x"]
|
||||||
|
y = facial_area["y"]
|
||||||
|
w = facial_area["w"]
|
||||||
|
h = facial_area["h"]
|
||||||
|
|
||||||
|
assert x >= 0
|
||||||
|
assert y >= 0
|
||||||
|
assert x + w < width
|
||||||
|
assert y + h < height
|
||||||
|
|
||||||
|
logger.info("✅ facial area coordinates are all in image borders")
|
||||||
|
Loading…
x
Reference in New Issue
Block a user