• Как сделать лицо в анфас?

    @NIKITATR Автор вопроса
    import math
    
    import cv2
    import dlib
    def landmarks_point(grayFrame,face):
        landmarks = predictor(grayFrame, face)
        # left_eys
        x_r_36 = landmarks.part(36).x
        y_r_36 = landmarks.part(36).y
        x_r_39 = landmarks.part(39).x
        y_r_39 = landmarks.part(39).y
        X_r = (x_r_39 + x_r_36) / 2
        Y_r = (y_r_39 + y_r_36) / 2
        # rigth_eys
        x_l_42 = landmarks.part(42).x
        y_l_42 = landmarks.part(42).y
        x_l_45 = landmarks.part(45).x
        y_l_45 = landmarks.part(45).y
        X_l = (x_l_42 + x_l_45) / 2
        Y_l = (y_l_42 + y_l_45) / 2
        # nachalo_psk
        X_o = (X_l + X_r) / 2
        Y_o = (Y_l + Y_r) / 2
        # Расстояния между средними точками глаз вдоль осей Х и Y:
        DX = math.fabs(X_r - X_l)
        DY = math.fabs(Y_r - Y_l)
        # Действительное расстояние L между средними точками глаз (по теореме Пифагора):
        L = pow((DX ** 2) + (DY ** 2), 0.5)
        # Тригонометрические функции угла поворота ПСК
        sin_AL = DY / L
        L=math.asin(sin_AL)
    
        return X_o,Y_o,L
    
    # Для детектирования лиц используем каскады Хаара
    Path = "haarcascade_frontalface_default.xml"
    faceCascade = cv2.CascadeClassifier(Path)
    # Запуск видео потока
    cap = cv2.VideoCapture(0)
    # Модель для поиска ключевых точек
    predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")
    while True:
        # Получение изображения из видео потока
        ret, frame = cap.read()
        #Мы  это сделали, т.к. если лица не будет , не сможем получить roi_gray, будет ошибка
        if ret == 0:
            break
        # Конвертирование изображения в черно-белое
        grayFrame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
        # Обнаружение лиц и построение прямоугольного контура
        faces =faceCascade.detectMultiScale(grayFrame, minNeighbors = 10)
    
        for x, y, width, height in faces:
            cv2.rectangle(frame, (x, y), (x + width, y + height), color=(255, 255, 255), thickness=1)
            face=dlib.rectangle(x, y , x+width, y+height)
    
        cv2.imshow("FACE IN IMAGE", frame)
        if cv2.waitKey(10) & 0xFF == ord('e'):  # <<<<< 0xFF
            break
        #Если вызовем, а лица не будет == > бред, смысла вызывать нет
        if len(faces)!=0:
            X_new_psk,Y_new_psk, L_in_grad=landmarks_point(grayFrame, face)
    roi_gray = frame[y:(y + height), x:(x + width)]
    rotation_matrix =cv2.getRotationMatrix2D(( X_new_psk,Y_new_psk),L_in_grad, 1)
    print(rotation_matrix)
    anfas=cv2.warpAffine(roi_gray,rotation_matrix,(400,400))
    cv2.imshow('ANFAS',anfas)
    cv2.waitKey()
    
    
    cap.release()
    cv2.destroyAllWindows()


    Почему сейчас не работает?