import os from os.path import join from pathlib import Path import math import cv2 as cv import numpy as np import imutils from app.utils import im_utils, logger_utils from app.models.bbox import BBox from app.settings import app_cfg as cfg from app.settings import types class FaceLandmarks3D: # Estimates 3D facial landmarks import face_alignment from skimage import io def __init__(self): self.log = logger_utils.Logger.getLogger() self.fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._2D, flip_input=False) def landmarks(self, im): preds = self.fa.get_landmarks(im) return preds def draw(self, im): '''draws landmarks in 3d scene''' ''' import face_alignment import numpy as np from mpl_toolkits.mplot3d import Axes3D import matplotlib.pyplot as plt from skimage import io # Run the 3D face alignment on a test image, without CUDA. fa = face_alignment.FaceAlignment(face_alignment.LandmarksType._3D, device='cuda:0', flip_input=True) input = io.imread('../test/assets/aflw-test.jpg') preds = fa.get_landmarks(input)[-1] #TODO: Make this nice fig = plt.figure(figsize=plt.figaspect(.5)) ax = fig.add_subplot(1, 2, 1) ax.imshow(input) ax.plot(preds[0:17,0],preds[0:17,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[17:22,0],preds[17:22,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[22:27,0],preds[22:27,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[27:31,0],preds[27:31,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[31:36,0],preds[31:36,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[36:42,0],preds[36:42,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[42:48,0],preds[42:48,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[48:60,0],preds[48:60,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.plot(preds[60:68,0],preds[60:68,1],marker='o',markersize=6,linestyle='-',color='w',lw=2) ax.axis('off') ax = fig.add_subplot(1, 2, 2, projection='3d') surf = ax.scatter(preds[:,0]*1.2,preds[:,1],preds[:,2],c="cyan", alpha=1.0, edgecolor='b') ax.plot3D(preds[:17,0]*1.2,preds[:17,1], preds[:17,2], color='blue' ) ax.plot3D(preds[17:22,0]*1.2,preds[17:22,1],preds[17:22,2], color='blue') ax.plot3D(preds[22:27,0]*1.2,preds[22:27,1],preds[22:27,2], color='blue') ax.plot3D(preds[27:31,0]*1.2,preds[27:31,1],preds[27:31,2], color='blue') ax.plot3D(preds[31:36,0]*1.2,preds[31:36,1],preds[31:36,2], color='blue') ax.plot3D(preds[36:42,0]*1.2,preds[36:42,1],preds[36:42,2], color='blue') ax.plot3D(preds[42:48,0]*1.2,preds[42:48,1],preds[42:48,2], color='blue') ax.plot3D(preds[48:,0]*1.2,preds[48:,1],preds[48:,2], color='blue' ) ax.view_init(elev=90., azim=90.) ax.set_xlim(ax.get_xlim()[::-1]) plt.show() ''' return False