Я слоняюсь с распознаванием и распознаванием лиц. У меня было приложение, использующее библиотеку face_recognition для обнаружения и сравнения обнаруженных лиц для их идентификации, но я был разочарован коротким расстоянием обнаружения. Теперь я пытаюсь использовать haarcascade для обнаружения и face_recognition для распознавания. Проблема в том, что я не могу заставить работать возвращаемые значения deteMultiscale с функцией face_recognition.face_encodings (). Код сохраняет и идентификатор, но показывает один и тот же идентификатор для каждого лица, поэтому он не сохраняет и go через кодировки лиц, как и должно быть. Я думаю, что это как-то связано с возвращаемыми значениями обнаружения. Может ли кто-нибудь помочь мне продвинуться вперед? Вот часть моего кода:
while fvs.more():
try:
frame = fvs.read()
frame = imutils.resize(frame, width=980)
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
frame = np.dstack([frame, frame, frame])
faces = faceCascade.detectMultiScale(
frame,
scaleFactor=1.5,
minNeighbors=2,
flags=cv2.CASCADE_SCALE_IMAGE
)
except AttributeError as e:
print(e)
print('Check the camera connection')
else:
if process_this_frame:
face_encodings = face_recognition.face_encodings(frame, faces)
# print(face_encodings)
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=1.0)
name = "Unknown"
# 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)
# print(face_names)
process_this_frame = not process_this_frame
for (x, y, w, h), name in zip(faces, face_names):
if name == 'Unknown':
# print(name)
new_face = face_recognition.face_encodings(frame, faces)
# print(new_face)
if len(new_face) > 0:
known_face_encodings.append(new_face[0])
key = key + 1
known_face_names.append(str(key))
# print(known_face_names)