| 325 | |
| 326 | |
| 327 | class FaceModel(object): |
| 328 | def __init__(self, face_alignment_module, reset=False): |
| 329 | self.face_alignment_module = face_alignment_module |
| 330 | self.face_prob_th = 0.0001 |
| 331 | self.min_face = 96 |
| 332 | self.face_image_size = self.face_alignment_module.face_image_size |
| 333 | self.trackingFaces = [] |
| 334 | self.reset = reset |
| 335 | |
| 336 | def reset_track(self): |
| 337 | self.trackingFaces = [] |
| 338 | |
| 339 | def forward(self, src_image, reset=False, pre_rect=None): |
| 340 | if self.reset or reset: |
| 341 | self.trackingFaces = [] |
| 342 | |
| 343 | if len(self.trackingFaces) == 0: |
| 344 | if pre_rect is not None: |
| 345 | detected_faces = [pre_rect] |
| 346 | else: |
| 347 | detected_faces, _, _ = self.face_alignment_module.face_detector.detect( |
| 348 | src_image |
| 349 | ) |
| 350 | for face_rect in detected_faces: |
| 351 | new_tracking_object = { |
| 352 | "face_rect": face_rect, |
| 353 | "rotate_angle": 0.0, |
| 354 | "pre_kpt_222": None, |
| 355 | "face_dis": np.sqrt( |
| 356 | np.square((face_rect[2] - face_rect[0])) |
| 357 | + np.square((face_rect[3] - face_rect[1])) |
| 358 | ), |
| 359 | "smoother_222": Smoother222(), |
| 360 | "prob": 0, |
| 361 | } |
| 362 | self.trackingFaces.append(new_tracking_object) |
| 363 | else: |
| 364 | detected_faces, _, _ = self.face_alignment_module.face_detector.detect( |
| 365 | src_image |
| 366 | ) |
| 367 | for face_rect in detected_faces: |
| 368 | new_tracking_object = { |
| 369 | "face_rect": face_rect, |
| 370 | "rotate_angle": 0.0, |
| 371 | "pre_kpt_222": None, |
| 372 | "face_dis": np.sqrt( |
| 373 | np.square((face_rect[2] - face_rect[0])) |
| 374 | + np.square((face_rect[3] - face_rect[1])) |
| 375 | ), |
| 376 | "smoother_222": Smoother222(), |
| 377 | "prob": 0, |
| 378 | } |
| 379 | self.trackingFaces.append(new_tracking_object) |
| 380 | |
| 381 | delete_idx_list = [] |
| 382 | for face_idx, tracking_face in enumerate(self.trackingFaces): |
| 383 | if tracking_face["pre_kpt_222"] is not None: |
| 384 | result_dict = self.face_alignment_module.forward( |
no outgoing calls
no test coverage detected