ageitgey / ageitgey/face_recognition
face_recognition.compare_faces
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 56.8k
- Forks
- 13.7k
- PR merge metrics
- No merged PRs in 30d
Description
- face_recognition version:1.2.1
- Python version:2.7
- Operating System:macOS
Description
I set up [ {'name':'Cang Teacher','face':'canglaoshi.jpeg'}, {'name':'PengXiang.Zhang','face':'pengxiang.jpeg'},{'name':'Rocky','face':'190158.jpg'},{'name':'Mengfei.yin','face':'mengfei.jpeg'}],and I use face_recognition.compare_faces like this matches = face_recognition.compare_faces(known_face_encodings, face_encoding,tolerance=0.6),but No matter who appears in the camera, matches is [False, True, True, True].
What I Did
# Get a reference to webcam #0 (the default one)
video_capture = cv2.VideoCapture(0)
# Create arrays of known face encodings and their names
known_face_encodings = []
known_face_names = []
for face in pf:
# Load a sample picture and learn how to recognize it.
print face
rocky_image = self.loadImage("images/" + face["face"])
rocky_face_encoding = face_recognition.face_encodings(rocky_image,num_jitters=1)[0]
known_face_encodings.append(rocky_face_encoding)
known_face_names.append(face["name"])
# Create arrays of known face encodings and their names
# Initialize some variables
face_locations = []
face_encodings = []
face_names = []
process_this_frame = True
while True:
# Grab a single frame of video
ret, frame = video_capture.read()
# Resize frame of video to 1/4 size for faster face recognition processing
small_frame = cv2.resize(frame, (0, 0), fx=0.25, fy=0.25)
# Convert the image from BGR color (which OpenCV uses) to RGB color (which face_recognition uses)
rgb_small_frame = small_frame[:, :, ::-1]
# Only process every other frame of video to save time
if process_this_frame:
# Find all the faces and face encodings in the current frame of video
face_locations = face_recognition.face_locations(rgb_small_frame)
face_encodings = face_recognition.face_encodings(rgb_small_frame, face_locations,num_jitters=1)
face_names = []
for face_encoding in face_encodings:
# See if the face is a match for the known face(s)
matches = face_recognition.compare_faces(known_face_encodings, face_encoding,tolerance=0.6)
name = "Unknown"
print matches
# If a match was found in known_face_encodings, just use the first one.
if True in matches:
first_match_index = matches.index(True)
name = known_face_names[first_match_index]
face_names.append(name)
process_this_frame = not process_this_frame
# Display the results
for (top, right, bottom, left), name in zip(face_locations, face_names):
# Scale back up face locations since the frame we detected in was scaled to 1/4 size
top *= 4
right *= 4
bottom *= 4
left *= 4
# Draw a box around the face
cv2.rectangle(frame, (left, top), (right, bottom), (0, 0, 255), 2)
# Draw a label with a name below the face
cv2.rectangle(frame, (left, bottom - 35), (right, bottom), (0, 0, 255), cv2.FILLED)
font = cv2.FONT_HERSHEY_DUPLEX
cv2.putText(frame, name, (left + 6, bottom - 6), font, 1.0, (255, 255, 255), 1)
# Display the resulting image
cv2.imshow('Video', frame)
# Hit 'q' on the keyboard to quit!
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# Release handle to the webcam
video_capture.release()
cv2.destroyAllWindows()
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with the provided webcam loop and the calls to face_recognition.face_encodings and compare_faces, checking how known_face_encodings and the camera face_encoding are produced. Reproduce the reported matches list with the stated versions and tolerance, then establish why unrelated faces match and verify that the resulting names correspond to the correct face.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- computer-vision, machine-learning
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100