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.png')
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.
Collecting face_recognition==1.3.0
Downloading face_recognition-1.3.0-py2.py3-none-any.whl (15 kB)
Collecting face-recognition-models>=0.3.0
Downloading face_recognition_models-0.3.0.tar.gz (100.1 MB)
|████████████████████████████████| 100.1 MB 13.0 MB/s
Collecting Click>=6.0
Downloading click-7.1.2-py2.py3-none-any.whl (82 kB)
|████████████████████████████████| 82 kB 40.9 MB/s
Collecting dlib>=19.7
Downloading dlib-19.21.1.tar.gz (3.6 MB)
|████████████████████████████████| 3.6 MB 73.9 MB/s
Requirement already satisfied: numpy in /opt/venv/lib/python3.7/site-packages (from face_recognition==1.3.0) (1.19.4)
Requirement already satisfied: Pillow in /opt/venv/lib/python3.7/site-packages (from face_recognition==1.3.0) (8.0.1)
Building wheels for collected packages: face-recognition-models, dlib
Building wheel for face-recognition-models (setup.py) ... done
Created wheel for face-recognition-models: filename=face_recognition_models-0.3.0-py2.py3-none-any.whl size=100566173 sha256=d641325d1bd936ce4eae84e1bf232dc23f791bb4d587caa9bd5d26cbcd6949ff
Stored in directory: /tmp/pip-ephem-wheel-cache-57u2jq2h/wheels/d6/81/3c/884bcd5e1c120ff548d57c2ecc9ebf3281c9a6f7c0e7e7947a
Building wheel for dlib (setup.py) ... done
Created wheel for dlib: filename=dlib-19.21.1-cp37-cp37m-linux_x86_64.whl size=4125358 sha256=a31dc6d37766f02321ee889819ed3883f018d281d619854a5ee276e99ecbcd3d
Stored in directory: /tmp/pip-ephem-wheel-cache-57u2jq2h/wheels/5d/c7/2e/dbc03dee6b56b674ceaff67b19bd80de63f09bacafde5cb78d
Successfully built face-recognition-models dlib
Installing collected packages: face-recognition-models, Click, dlib, face-recognition
Successfully installed Click-7.1.2 dlib-19.21.1 face-recognition-1.3.0 face-recognition-models-0.3.0
WARNING: You are using pip version 20.2.4; however, version 20.3.3 is available.
You should consider upgrading via the '/opt/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.
poppins_image = face_recognition.load_image_file("poppins.png")
poppins_face_encoding = face_recognition.face_encodings(poppins_image)[0]
# Load a second sample picture and learn how to recognize it.
smith_image = face_recognition.load_image_file("smith.png")
smith_face_encoding = face_recognition.face_encodings(smith_image)[0]
# Create arrays of known face encodings and their names
known_face_encodings = [
poppins_face_encoding,
smith_face_encoding
]
known_face_names = [
"Mary Poppins",
"Agent Smith"
]
print('Learned encoding for', len(known_face_encodings), 'images.')
Learned encoding for 2 images.
# Load an image with an unknown face
unknown_image = face_recognition.load_image_file("poppins_ and_smith.png")
# 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)
FileNotFoundError: [Errno 2] No such file or directory: 'poppins_ and_smith.png'