from PIL import Image, ImageDraw
from IPython.display import display
# The program we will be finding faces on the example below
pil_im = Image.open('two_people.jpg')
display(pil_im)
!pip install face_recognition==1.3.0
WARNING: The directory '/home/jovyan/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Requirement already satisfied: face_recognition==1.3.0 in /home/jovyan/venv/lib/python3.7/site-packages (1.3.0)
Requirement already satisfied: Click>=6.0 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from face_recognition==1.3.0) (7.1.2)
Requirement already satisfied: Pillow in /shared-libs/python3.7/py/lib/python3.7/site-packages (from face_recognition==1.3.0) (8.1.0)
Requirement already satisfied: dlib>=19.7 in /home/jovyan/venv/lib/python3.7/site-packages (from face_recognition==1.3.0) (19.21.1)
Requirement already satisfied: numpy in /shared-libs/python3.7/py/lib/python3.7/site-packages (from face_recognition==1.3.0) (1.19.5)
Requirement already satisfied: face-recognition-models>=0.3.0 in /home/jovyan/venv/lib/python3.7/site-packages (from face_recognition==1.3.0) (0.3.0)
WARNING: You are using pip version 20.1.1; however, version 21.0.1 is available.
You should consider upgrading via the '/home/jovyan/venv/bin/python -m pip install --upgrade pip' command.
!pip install face_recognition==1.3.0
WARNING: The directory '/home/jovyan/.cache/pip' or its parent directory is not owned or is not writable by the current user. The cache has been disabled. Check the permissions and owner of that directory. If executing pip with sudo, you may want sudo's -H flag.
Requirement already satisfied: face_recognition==1.3.0 in /home/jovyan/venv/lib/python3.7/site-packages (1.3.0)
Requirement already satisfied: numpy in /shared-libs/python3.7/py/lib/python3.7/site-packages (from face_recognition==1.3.0) (1.19.5)
Requirement already satisfied: Pillow in /shared-libs/python3.7/py/lib/python3.7/site-packages (from face_recognition==1.3.0) (8.1.0)
Requirement already satisfied: face-recognition-models>=0.3.0 in /home/jovyan/venv/lib/python3.7/site-packages (from face_recognition==1.3.0) (0.3.0)
Requirement already satisfied: dlib>=19.7 in /home/jovyan/venv/lib/python3.7/site-packages (from face_recognition==1.3.0) (19.21.1)
Requirement already satisfied: Click>=6.0 in /shared-libs/python3.7/py/lib/python3.7/site-packages (from face_recognition==1.3.0) (7.1.2)
WARNING: You are using pip version 20.1.1; however, version 21.0.1 is available.
You should consider upgrading via the '/home/jovyan/venv/bin/python -m pip install --upgrade pip' command.
import face_recognition
import numpy as np
from PIL import Image, ImageDraw
from IPython.display import display
# This is an example of running face recognition on a single image
# and drawing a box around each person that was identified.
# Load a sample picture and learn how to recognize it.
obama_image = face_recognition.load_image_file("obama.jpg")
obama_face_encoding = face_recognition.face_encodings(obama_image)[0]
forbrig_image = face_recognition.load_image_file("Forbrig.jpg")
forbrig_face_encoding = face_recognition.face_encodings(forbrig_image)[0]
# Load a second sample picture and learn how to recognize it.
biden_image = face_recognition.load_image_file("biden.jpg")
biden_face_encoding = face_recognition.face_encodings(biden_image)[0]
#new_image = face_recognition.load_image_file("add_photo.jpg")
#new_face_encoding = face_recognition.face_encodings(new_image)[0]
# Create arrays of known face encodings and their names
known_face_encodings = [
obama_face_encoding,
forbrig_face_encoding,
biden_face_encoding
]
known_face_names = [
"Barack Obama",
"Peter Forbrig",
"Joe Biden"
# "name new image"
]
print('Learned encoding for', len(known_face_encodings), 'images.')
Learned encoding for 3 images.
# Load an image with an unknown face for test
unknown_image = face_recognition.load_image_file("test.jpg")
# Find all the faces and face encodings in the unknown image
face_locations = face_recognition.face_locations(unknown_image)
face_encodings = face_recognition.face_encodings(unknown_image, face_locations)
# Convert the image to a PIL-format image so that we can draw on top of it with the Pillow library
# See http://pillow.readthedocs.io/ for more about PIL/Pillow
pil_image = Image.fromarray(unknown_image)
# Create a Pillow ImageDraw Draw instance to draw with
draw = ImageDraw.Draw(pil_image)
# Loop through each face found in the unknown image
for (top, right, bottom, left), face_encoding in zip(face_locations, face_encodings):
# See if the face is a match for the known face(s)
matches = face_recognition.compare_faces(known_face_encodings, face_encoding)
name = "Unknown"
# Or instead, use the known face with the smallest distance to the new face
face_distances = face_recognition.face_distance(known_face_encodings, face_encoding)
best_match_index = np.argmin(face_distances)
if matches[best_match_index]:
name = known_face_names[best_match_index]
# Draw a box around the face using the Pillow module
draw.rectangle(((left, top), (right, bottom)), outline=(0, 0, 255))
# Draw a label with a name below the face
text_width, text_height = draw.textsize(name)
draw.rectangle(((left, bottom - text_height - 10), (right, bottom)), fill=(0, 0, 255), outline=(0, 0, 255))
draw.text((left + 6, bottom - text_height - 5), name, fill=(255, 255, 255, 255))
# Remove the drawing library from memory as per the Pillow docs
del draw
# Display the resulting image
display(pil_image)