def computeMeanMain(args): align = NaiveDlib(args.dlibFaceMean, args.dlibFacePredictor) imgs = list(iterImgs(args.inputDir)) if args.numImages > 0: imgs = random.sample(imgs, args.numImages) facePoints = [] for img in imgs: rgb = img.getRGB() bb = align.getLargestFaceBoundingBox(rgb) alignedPoints = align.align(rgb, bb) if alignedPoints: facePoints.append(alignedPoints) facePointsNp = np.array(facePoints) mean = np.mean(facePointsNp, axis=0) std = np.std(facePointsNp, axis=0) write(mean, "{}/mean.csv".format(args.modelDir)) write(std, "{}/std.csv".format(args.modelDir)) # Only import in this mode. import matplotlib as mpl mpl.use('Agg') import matplotlib.pyplot as plt fig, ax = plt.subplots() ax.scatter(mean[:, 0], -mean[:, 1], color='k') ax.axis('equal') for i, p in enumerate(mean): ax.annotate(str(i), (p[0] + 0.005, -p[1] + 0.005), fontsize=8) plt.savefig("{}/mean.png".format(args.modelDir))
def main(args): align = NaiveDlib(args.dlibFacePredictor) bgrImg = cv2.imread(args.img) if bgrImg is None: raise Exception("Unable to load image: {}".format(args.img)) rgbImg = cv2.cvtColor(bgrImg, cv2.COLOR_BGR2RGB) bb = align.getLargestFaceBoundingBox(rgbImg) if bb is None: raise Exception("Unable to find a face: {}".format(args.img)) landmarks = align.align(rgbImg, bb) if landmarks is None: raise Exception("Unable to align image: {}".format(args.img)) # alignedFace = align.alignImg("affine", args.size, rgbImg, bb, landmarks) bl = (bb.left(), bb.bottom()) tr = (bb.right(), bb.top()) cv2.rectangle(bgrImg, bl, tr, color=(153, 255, 204), thickness=3) for landmark in landmarks: cv2.circle(bgrImg, center=landmark, radius=3, color=(102, 204, 255), thickness=-1) print("Saving image to 'annotated.png'") cv2.imwrite("annotated.png", bgrImg)
def process(code, div): import openface import openface.helper import dlib from openface.alignment import NaiveDlib # Depends on dlib. code = int(code) div = int(div) dlibModelDir = os.path.join(fileDir, "./openface/models/dlib") dlibFaceMean = os.path.join(dlibModelDir, "mean.csv") dlibFacePredictor = os.path.join(dlibModelDir, "shape_predictor_68_face_landmarks.dat") align = NaiveDlib(dlibFaceMean, dlibFacePredictor) dataset = data.Dataset() last = time.time() count = 0 for model, key, img in dataset.get_images(BUCKET_NAME): if hash(key) % div == code: bb = align.getLargestFaceBoundingBox(img) aligned = align.alignImg("affine", 224, img, bb) # print time.time() - last last = time.time() count += 1 if not aligned is None: # print model,key,img.shape,bb,aligned.shape cv2.imwrite( "output/face_{}".format( key.replace('/', '_').replace('models', '')), aligned) # cv2.imshow("test",aligned) # cv2.waitKey(0) # cv2.destroyAllWindows() # break if count % 20 == 0 and code == 0: local( 'aws s3 mv output/ s3://aub3data/output/ --recursive --storage-class "REDUCED_REDUNDANCY" --region "us-east-1"' )
def process(code,div): import openface import openface.helper import dlib from openface.alignment import NaiveDlib # Depends on dlib. code = int(code) div = int(div) dlibModelDir = os.path.join(fileDir, "./openface/models/dlib") dlibFaceMean = os.path.join(dlibModelDir, "mean.csv") dlibFacePredictor = os.path.join(dlibModelDir,"shape_predictor_68_face_landmarks.dat") align = NaiveDlib(dlibFaceMean,dlibFacePredictor) dataset = data.Dataset() last = time.time() count = 0 for model,key,img in dataset.get_images(BUCKET_NAME): if hash(key) % div == code: bb = align.getLargestFaceBoundingBox(img) aligned = align.alignImg("affine", 224, img, bb) # print time.time() - last last = time.time() count += 1 if not aligned is None: # print model,key,img.shape,bb,aligned.shape cv2.imwrite("output/face_{}".format(key.replace('/','_').replace('models','')),aligned) # cv2.imshow("test",aligned) # cv2.waitKey(0) # cv2.destroyAllWindows() # break if count % 20 == 0 and code == 0: local('aws s3 mv output/ s3://aub3data/output/ --recursive --storage-class "REDUCED_REDUNDANCY" --region "us-east-1"')
def process(): dlibModelDir = os.path.join(fileDir, "./openface/models/dlib") dlibFaceMean = os.path.join(dlibModelDir, "mean.csv") dlibFacePredictor = os.path.join(dlibModelDir,"shape_predictor_68_face_landmarks.dat") align = NaiveDlib(dlibFaceMean,dlibFacePredictor) dataset = data.Dataset() for model,key,img in dataset.get_images(BUCKET_NAME): bb = align.getLargestFaceBoundingBox(img) aligned = align.alignImg("affine", 224, img, bb) if not aligned is None: print model,key,img.shape,bb,aligned.shape cv2.imwrite("test/face_{}".format(key.replace('/','_')),aligned) # cv2.imshow("test",aligned) # cv2.waitKey(0) # cv2.destroyAllWindows() # break else: print "No face found"
def process(): dlibModelDir = os.path.join(fileDir, "./openface/models/dlib") dlibFaceMean = os.path.join(dlibModelDir, "mean.csv") dlibFacePredictor = os.path.join(dlibModelDir, "shape_predictor_68_face_landmarks.dat") align = NaiveDlib(dlibFaceMean, dlibFacePredictor) dataset = data.Dataset() for model, key, img in dataset.get_images(BUCKET_NAME): bb = align.getLargestFaceBoundingBox(img) aligned = align.alignImg("affine", 224, img, bb) if not aligned is None: print model, key, img.shape, bb, aligned.shape cv2.imwrite("test/face_{}".format(key.replace('/', '_')), aligned) # cv2.imshow("test",aligned) # cv2.waitKey(0) # cv2.destroyAllWindows() # break else: print "No face found"