Сообщество IT-специалистов
Ответы на любые вопросы об IT
Профессиональное развитие в IT
Удаленная работа для IT-специалистов
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()
Почему сейчас не работает?