Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import face_alignment
- import numpy as np
- class PhotoModeration:
- def __init__(
- self,
- image_path: str,
- ) -> None:
- self.image_path = image_path
- self.face_model = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False, device='cpu')
- def moderation_photo(self):
- error = None
- final_image = None
- #get landmark
- landmarks = self.face_model.get_landmarks_from_image(self.image_path)
- if len(landmarks) != 1:
- error = 'На фото не обнаружено лицо. Пожалуйста, загрузите другое фото.'
- else:
- x_array = landmarks[0][:,0]
- y_array = landmarks[0][:,1]
- #image show
- image = mpimg.imread(self.image_path)
- # проверка на крупное лицо
- const_x = 0.44
- const_y = 0.32
- if abs(max(x_array) - min(x_array))/image.shape[0] > 0.7 or abs(max(y_array) - min(y_array))/image.shape[1] > 0.6:
- error = 'Лицо на фото слишком крупное. Пожалуйста, загрузите другое фото.'
- else:
- X_face_center = np.mean(x_array)
- Y_face_center = np.mean(y_array)
- delta_x = (max(x_array) - min(x_array))/const_x/2
- delta_y = (max(y_array) - min(y_array))/const_y/2
- #photo resizing
- left_bound_x = int(X_face_center - delta_x)
- if left_bound_x < 0:
- left_bound_x = 0
- up_bound_y = int(Y_face_center - delta_y)
- if up_bound_y < 0:
- up_bound_y = 0
- cropped_image = image[up_bound_y:int(Y_face_center + delta_y), left_bound_x:int(X_face_center + delta_x), :]
- if cropped_image.shape[0] <= 250:
- error = 'Фото низкого качества. Пожалуйста, загрузите фото в хорошем качестве.'
- else:
- final_image = cropped_image
- return error, final_image
- #если error не None выводим ошибку пользователю, если error = None сохраняем в базе фото пользователя
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement