Доработка программы распознавания

Не особо разбираюсь в питоне и 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()

Ответы (0 шт):