Доработка программы распознавания
Не особо разбираюсь в питоне и opencv Но нужна помощь. Мне нужно написать программу, которая распознает лица. Я использую opencv и dlib. Через opencv я на веб-камере вырезаю лицо и сохраняю. А через dlib я сравниваю схожесть изображения, которое вырезал opencv, со вторым. Помогите ее подправить. Во-первых, она вылетает на 53 строке. Почему не знаю Во-вторых, нужно в конце итерации удалять изображение, созданное opencv. (По идее на вход подается фотография с группой людей, opencv должен вырезать каждое лицо, сохранить в файл, а dlib читает этот файл. Лучше ничего не придумал, да особо и не надо)
import dlib
import cv2
from skimage import io
from scipy.spatial import distance
face_detector = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
sp = dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')
facerec = dlib.face_recognition_model_v1('dlib_face_recognition_resnet_model_v1.dat')
detector = dlib.get_frontal_face_detector()
img1 = io.imread('group1.jpg')
cam = cv2.VideoCapture(0)
win1 = dlib.image_window()
win1.clear_overlay()
win1.set_image(img1)
dets = detector(img1, 1)
for k, d in enumerate(dets):
print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
k, d.left(), d.top(), d.right(), d.bottom()))
shape = sp(img1, d)
win1.clear_overlay()
win1.add_overlay(d)
win1.add_overlay(shape)
face_descriptor1 = facerec.compute_face_descriptor(img1, shape)
while (True):
ret, img = cam.read()
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
faces = face_detector.detectMultiScale(gray, 1.3, 5)
for (x, y, w, h) in faces:
cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)
# Сохраняем лицо
cv2.imwrite('face/user' + '.jpg', gray[y:y + h, x:x + w])
img2 = io.imread('face/user.jpg')
win2 = dlib.image_window()
win2.clear_overlay()
win2.set_image(img2)
dets_webcam = detector(img2, 1)
for k, d in enumerate(dets_webcam):
print("Detection {}: Left: {} Top: {} Right: {} Bottom: {}".format(
k, d.left(), d.top(), d.right(), d.bottom()))
shape = sp(img2, d)
win2.clear_overlay()
win2.add_overlay(d)
win2.add_overlay(shape)
face_descriptor2 = facerec.compute_face_descriptor(img2, shape)
a = distance.euclidean(face_descriptor1, face_descriptor2)
print(a)
cv2.imshow('image', img)
k = cv2.waitKey(100) & 0xff # 'ESC'
if k == 27:
break
print("\n [INFO] Exiting Program and cleanup stuff")
cam.release()
cv2.destroyAllWindows()