|
import os |
|
import face_recognition as fr |
|
|
|
|
|
def save_image(picture, directory, filename): |
|
if not os.path.exists(directory): |
|
os.makedirs(directory) |
|
|
|
if picture: |
|
with open(directory + filename + ".jpg", "wb") as f: |
|
f.write(picture.getvalue()) |
|
|
|
|
|
def delete_image(image_path): |
|
if os.path.exists(image_path): |
|
os.remove(image_path) |
|
|
|
|
|
def get_all_images(directory): |
|
return [file for file in os.listdir(directory) if file.endswith('.jpg') or file.endswith('.png')] |
|
|
|
|
|
def compare_faces_in_directory(known_image_dir, unknown_image_dir): |
|
|
|
known_image_files = get_all_images(known_image_dir) |
|
unknown_image_files = get_all_images(unknown_image_dir) |
|
|
|
if not unknown_image_files: |
|
return False, -1 |
|
|
|
|
|
for j, known_image_file in enumerate(known_image_files): |
|
|
|
unknown_img_path = os.path.join(unknown_image_dir, unknown_image_files[0]) |
|
known_img_path = os.path.join(known_image_dir, known_image_file) |
|
image1 = fr.load_image_file(unknown_img_path) |
|
image2 = fr.load_image_file(known_img_path) |
|
|
|
|
|
face_encodings1 = fr.face_encodings(image1) |
|
face_encodings2 = fr.face_encodings(image2) |
|
|
|
if len(face_encodings1) > 0 and len(face_encodings2) > 0: |
|
|
|
face_encoding1 = face_encodings1[0] |
|
face_encoding2 = face_encodings2[0] |
|
|
|
|
|
similarity = fr.face_distance([face_encoding1], face_encoding2) |
|
|
|
|
|
threshold = 0.4 |
|
|
|
|
|
user_id = os.path.splitext(known_image_file)[0] |
|
if similarity[0] < threshold: |
|
print(f"Images {unknown_image_files[0]} and {known_image_file} have similar faces.") |
|
return True, user_id |
|
else: |
|
print(f"Images {unknown_image_files[0]} and {known_image_file} do not have similar faces.") |
|
else: |
|
print(f"No faces found in one or both images.") |
|
|
|
return False, -1 |
|
|