def main(): parser = argparse.ArgumentParser() lfwDefault = os.path.expanduser( "~/openface/data/lfw/dlib.affine.sz:96.OuterEyesAndNose") parser.add_argument('--lfwAligned', type=str, default=lfwDefault, help='Location of aligned LFW images') parser.add_argument('--networkModel', type=str, help="Path to Torch network model.", default=os.path.join(openfaceModelDir, 'nn4.small2.v1.t7')) parser.add_argument('--largeFont', action='store_true') parser.add_argument('workDir', type=str, help='The work directory where intermediate files and results are kept.') args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) print("Getting lfwPpl") lfwPplCache = os.path.join(args.workDir, 'lfwPpl.pkl') lfwPpl = cacheToFile(lfwPplCache)(getLfwPplSorted)(args.lfwAligned) print("Eigenfaces Experiment") cls = cv2.createEigenFaceRecognizer() cache = os.path.join(args.workDir, 'eigenFacesExp.pkl') eigenFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("Fisherfaces Experiment") cls = cv2.createFisherFaceRecognizer() cache = os.path.join(args.workDir, 'fisherFacesExp.pkl') fishFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("LBPH Experiment") cls = cv2.createLBPHFaceRecognizer() cache = os.path.join(args.workDir, 'lbphExp.pkl') lbphFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("OpenFace CPU/SVM Experiment") net = openface.TorchNeuralNet(args.networkModel, 96, cuda=False) cls = SVC(kernel='linear', C=1) cache = os.path.join(args.workDir, 'openface.cpu.svm.pkl') openfaceCPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) print("OpenFace GPU/SVM Experiment") net = openface.TorchNeuralNet(args.networkModel, 96, cuda=True) cache = os.path.join(args.workDir, 'openface.gpu.svm.pkl') openfaceGPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) plotAccuracy(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceGPUsvmDf) plotTrainingTime(args.workDir, argrs.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceGPUsvmDf) plotPredictionTime(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceGPUsvmDf)
def download(person, url, bb): imgName = os.path.basename(url) rawPersonPath = os.path.join(args.raw, person) rawImgPath = os.path.join(rawPersonPath, imgName) alignedPersonPath = os.path.join(args.aligned, person) alignedImgPath = os.path.join(alignedPersonPath, hashlib.md5(imgName).hexdigest()+".png") mkdirP(rawPersonPath) mkdirP(alignedPersonPath) if not os.path.isfile(rawImgPath): urlF = urllib2.urlopen(url) with open(rawImgPath, 'wb') as f: f.write(urlF.read()) if not os.path.isfile(alignedImgPath): bgr = cv2.imread(rawImgPath) if bgr is None: return rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB) dlibBB = dlib.rectangle(*bb) outRgb = align.align(96, rgb, bb=dlibBB, landmarkIndices=landmarkIndices) if outRgb is not None: outBgr = cv2.cvtColor(outRgb, cv2.COLOR_RGB2BGR) cv2.imwrite(alignedImgPath, outBgr)
def download(person, url, bb): imgName = os.path.basename(url) rawPersonPath = os.path.join(args.raw, person) rawImgPath = os.path.join(rawPersonPath, imgName) alignedPersonPath = os.path.join(args.aligned, person) alignedImgPath = os.path.join(alignedPersonPath, hashlib.md5(imgName).hexdigest() + ".png") mkdirP(rawPersonPath) mkdirP(alignedPersonPath) if not os.path.isfile(rawImgPath): urlF = urllib2.urlopen(url, timeout=5) with open(rawImgPath, 'wb') as f: f.write(urlF.read()) if not os.path.isfile(alignedImgPath): bgr = cv2.imread(rawImgPath) if bgr is None: return rgb = cv2.cvtColor(bgr, cv2.COLOR_BGR2RGB) dlibBB = dlib.rectangle(*bb) outRgb = align.align(96, rgb, bb=dlibBB, landmarkIndices=landmarkIndices) if outRgb is not None: outBgr = cv2.cvtColor(outRgb, cv2.COLOR_RGB2BGR) cv2.imwrite(alignedImgPath, outBgr)
def main(): parser = argparse.ArgumentParser() parser.add_argument('--lfwDlibAligned', type=str, help='Location of Dlib aligned LFW images') parser.add_argument('--lfwMtcnnAligned', type=str, help='Location of MTCNN aligned LFW images') parser.add_argument('--largeFont', action='store_true') parser.add_argument('workDir', type=str, help='The work directory where intermediate files and results are kept.') args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) # get ytf feature pickles #print("Getting OpenFace YTF features") #cache = os.path.join(args.workDir, 'facenet.ytf.features.pkl') #openface_ytf = cacheToFile(cache)(getFacenetFeatures)(facenetModelDir, args.lfwMtcnnAligned) #print("Getting Facenet YTF features") #cache = os.path.join(args.workDir, 'openface.ytf.features.pkl') #facenet_ytf = cacheToFile(cache)(getOpenfaceFeatures)(openfaceModelPath, args.lfwDlibAligned) ytf_dlib = get_dataset(args.lfwDlibAligned) ytf_mtcnn = get_dataset(args.lfwMtcnnAligned) print("OpenFace SVM Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = SVC(C=1, kernel='linear') cache = os.path.join(args.workDir, 'openface.cpu.svm.pkl') openfaceCPUsvmDf = cacheToFile(cache)(openfaceExp)(ytf_dlib, net, cls) print("OpenFace LinearSVC Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'openface.cpu.linearsvm.pkl') openfaceCPUlinearsvmDf = cacheToFile(cache)(openfaceExp)(ytf_dlib, net, cls) print("Facenet SVM Experiment") cls = SVC(C=1, kernel='linear') cache = os.path.join(args.workDir, 'facenet.svm.pkl') facenetsvmDf = cacheToFile(cache)(facenetExp)(ytf_mtcnn, facenetModelDir, cls) print("Facenet LinearSVC Experiment") cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'facenet.linearsvm.pkl') facenetlinearsvmDf = cacheToFile(cache)(facenetExp)(ytf_mtcnn, facenetModelDir, cls) plotAccuracy(args.workDir, args.largeFont, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetsvmDf, facenetlinearsvmDf) plotTrainingTime(args.workDir, args.largeFont, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetsvmDf, facenetlinearsvmDf) plotPredictionTime(args.workDir, args.largeFont, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetsvmDf, facenetlinearsvmDf)
def main(): parser = argparse.ArgumentParser() parser.add_argument('--lfwDlibAligned', type=str, help='Location of Dlib aligned LFW images') parser.add_argument('--lfwMtcnnAligned', type=str, help='Location of MTCNN aligned LFW images') parser.add_argument('--largeFont', action='store_true') parser.add_argument( 'workDir', type=str, help='The work directory where intermediate files and results are kept.' ) args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) print("Getting lfwPpl") lfwPplCache = os.path.join(args.workDir, 'lfwPpl.pkl') lfwPpl = cacheToFile(lfwPplCache)(getLfwPplSorted)(args.lfwDlibAligned) print("OpenFace LinearSVC Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'openface.cpu.linearsvm.pkl') openfaceCPUlinearsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) print("Getting lfwMtcnnPpl") lfwMtcnnPplCache = os.path.join(args.workDir, 'lfwMtcnnPpl.pkl') lfwMtcnnPpl = cacheToFile(lfwMtcnnPplCache)(getLfwPplSorted)( args.lfwMtcnnAligned) print("Facenet LinearSVC Experiment") cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'facenet.linearsvm.pkl') facenetlinearsvmDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) plotAccuracy(args.workDir, args.largeFont, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotTrainingTime(args.workDir, args.largeFont, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotPredictionTime(args.workDir, args.largeFont, openfaceCPUlinearsvmDf, facenetlinearsvmDf)
def main(): parser = argparse.ArgumentParser() parser.add_argument('--lfwDlibAligned', type=str, help='Location of Dlib aligned LFW images') parser.add_argument('--lfwMtcnnAligned', type=str, help='Location of MTCNN aligned LFW images') parser.add_argument('--largeFont', action='store_true') parser.add_argument('workDir', type=str, help='The work directory where intermediate files and results are kept.') args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) print("Getting lfwPpl") lfwPplCache = os.path.join(args.workDir, 'lfwPpl.pkl') lfwPpl = cacheToFile(lfwPplCache)(getLfwPplSorted)(args.lfwDlibAligned) print("OpenFace LinearSVC Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'openface.cpu.linearsvm.pkl') openfaceCPUlinearsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) print("Getting lfwMtcnnPpl") lfwMtcnnPplCache = os.path.join(args.workDir, 'lfwMtcnnPpl.pkl') lfwMtcnnPpl = cacheToFile(lfwMtcnnPplCache)(getLfwPplSorted)(args.lfwMtcnnAligned) print("Facenet LinearSVC Experiment") cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'facenet.linearsvm.pkl') facenetlinearsvmDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) plotAccuracy(args.workDir, args.largeFont, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotTrainingTime(args.workDir, args.largeFont, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotPredictionTime(args.workDir, args.largeFont, openfaceCPUlinearsvmDf, facenetlinearsvmDf)
def peopleIntroducing(ros_srv): name = ros_srv.name num_images = ros_srv.num_images NAME_DIR = os.path.join(DATASET_DIR, 'raw', name) helper.mkdirP(NAME_DIR) image_type = '.jpg' image_labels = os.listdir(NAME_DIR) add_image_labels = [] i = 1 k = 0 j = num_images number = [] for label in image_labels: number.append(int(label.replace(image_type, ''))) number.sort() n = 1 while j > 0: if k < len(number): n = number[k] + 1 if number[k] == i: k += 1 else: add_image_labels.append((str(i) + image_type)) j -= 1 i += 1 else: add_image_labels.append(str(n) + image_type) j -= 1 n += 1 num_images = ros_srv.num_images i = 0 while i < num_images: try: ros_image = rospy.wait_for_message(image_topic, Image, 1000) except (ROSException, ROSInterruptException) as e: print(e) break rgb_image = BRIDGE.imgmsg_to_cv2(ros_image, desired_encoding="bgr8") face_recognition_ros.image_width = ros_image.width face_recognition_ros.image_height = ros_image.height face = face_recognition_ros.detectLargestFace(rgb_image) s_rgb_image = rgb_image.copy() if face != None: bb = face_recognition_ros.dlibRectangle2RosBoundingBox(face) color = (0, 255, 0) cv2.rectangle(s_rgb_image, (bb.minX, bb.minY), (bb.minX + bb.width, bb.minY + bb.height), color, 2) cv2.imshow("Person", s_rgb_image) regressiveCounter(3) if face != None: rospy.logwarn('Picture ' + add_image_labels[i] + ' was saved.') cv2.imwrite(os.path.join(NAME_DIR, add_image_labels[i]), rgb_image) i += 1 else: rospy.logerr("The face was not detected.") cv2.destroyAllWindows() classifier_training = FaceClassifierTraining() classifier_training.classifier_type = ros_srv.classifier_type classifier_training.classifier_name = 'classifier_' + ros_srv.classifier_type + '_' + name + '.pkl' return classifierTraining(classifier_training)
def main(): parser = argparse.ArgumentParser() parser.add_argument('--lfwDlibAligned', type=str, help='Location of Dlib aligned LFW images') parser.add_argument('--lfwMtcnnAligned', type=str, help='Location of MTCNN aligned LFW images') parser.add_argument('--largeFont', action='store_true') parser.add_argument('workDir', type=str, help='The work directory where intermediate files and results are kept.') args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) print("Getting lfwPpl") lfwPplCache = os.path.join(args.workDir, 'lfwPpl.pkl') lfwPpl = cacheToFile(lfwPplCache)(getLfwPplSorted)(args.lfwDlibAligned) print("Eigenfaces Experiment") cls = cv2.createEigenFaceRecognizer() cache = os.path.join(args.workDir, 'eigenFacesExp.pkl') eigenFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("Fisherfaces Experiment") cls = cv2.createFisherFaceRecognizer() cache = os.path.join(args.workDir, 'fisherFacesExp.pkl') fishFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("LBPH Experiment") cls = cv2.createLBPHFaceRecognizer() cache = os.path.join(args.workDir, 'lbphExp.pkl') lbphFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("OpenFace SVM Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = SVC(C=1, kernel='linear') cache = os.path.join(args.workDir, 'openface.cpu.svm.pkl') openfaceCPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) print("OpenFace LinearSVC Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'openface.cpu.linearsvm.pkl') openfaceCPUlinearsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) #print("OpenFace GaussianNB Experiment") #net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) #cls = GaussianNB() #cache = os.path.join(args.workDir, 'openface.cpu.gaussiannb.pkl') #openfaceCPUgaussiannbDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) print("Getting lfwMtcnnPpl") lfwMtcnnPplCache = os.path.join(args.workDir, 'lfwMtcnnPpl.pkl') lfwMtcnnPpl = cacheToFile(lfwMtcnnPplCache)(getLfwPplSorted)(args.lfwMtcnnAligned) print("Facenet LinearSVC Experiment") cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'facenet.linearsvm.pkl') facenetlinearsvmDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) #print("OpenFace GPU/SVM Experiment") #net = openface.TorchNeuralNet(args.networkModel, 96, cuda=True) #cache = os.path.join(args.workDir, 'openface.gpu.svm.pkl') #openfaceGPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) # TODO add Facenet and other models, openbr? plotAccuracy(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotTrainingTime(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotPredictionTime(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf)
def main(): parser = argparse.ArgumentParser() parser.add_argument('--lfwDlibAligned', type=str, help='Location of Dlib aligned LFW images') parser.add_argument('--lfwMtcnnAligned', type=str, help='Location of MTCNN aligned LFW images') parser.add_argument('--largeFont', action='store_true') parser.add_argument( 'workDir', type=str, help='The work directory where intermediate files and results are kept.' ) args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) print("Getting lfwPpl") lfwPplCache = os.path.join(args.workDir, 'lfwPpl.pkl') lfwPpl = cacheToFile(lfwPplCache)(getLfwPplSorted)(args.lfwDlibAligned) print("Eigenfaces Experiment") cls = cv2.createEigenFaceRecognizer() cache = os.path.join(args.workDir, 'eigenFacesExp.pkl') eigenFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("Fisherfaces Experiment") cls = cv2.createFisherFaceRecognizer() cache = os.path.join(args.workDir, 'fisherFacesExp.pkl') fishFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("LBPH Experiment") cls = cv2.createLBPHFaceRecognizer() cache = os.path.join(args.workDir, 'lbphExp.pkl') lbphFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) print("OpenFace SVM Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = SVC(C=1, kernel='linear') cache = os.path.join(args.workDir, 'openface.cpu.svm.pkl') openfaceCPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) print("OpenFace LinearSVC Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'openface.cpu.linearsvm.pkl') openfaceCPUlinearsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) #print("OpenFace GaussianNB Experiment") #net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) #cls = GaussianNB() #cache = os.path.join(args.workDir, 'openface.cpu.gaussiannb.pkl') #openfaceCPUgaussiannbDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) print("Getting lfwMtcnnPpl") lfwMtcnnPplCache = os.path.join(args.workDir, 'lfwMtcnnPpl.pkl') lfwMtcnnPpl = cacheToFile(lfwMtcnnPplCache)(getLfwPplSorted)( args.lfwMtcnnAligned) print("Facenet LinearSVC Experiment") cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'facenet.linearsvm.pkl') facenetlinearsvmDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) #print("OpenFace GPU/SVM Experiment") #net = openface.TorchNeuralNet(args.networkModel, 96, cuda=True) #cache = os.path.join(args.workDir, 'openface.gpu.svm.pkl') #openfaceGPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) # TODO add Facenet and other models, openbr? plotAccuracy(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotTrainingTime(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotPredictionTime(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf)
def main(): parser = argparse.ArgumentParser() parser.add_argument('--lfwDlibAligned', type=str, help='Location of Dlib aligned LFW images') parser.add_argument('--lfwMtcnnAligned', type=str, help='Location of MTCNN aligned LFW images') parser.add_argument('--largeFont', action='store_true') parser.add_argument('workDir', type=str, help='The work directory where intermediate files and results are kept.') args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) eigenFacesDf = None fishFacesDf = None lbphFacesDf = None openfaceCPUsvmDf = None openfaceCPUlinearsvmDf = None facenetlinearsvmDf = None print("Getting lfwPpl") lfwPplCache = os.path.join(args.workDir, 'lfwPpl.pkl') lfwPpl = cacheToFile(lfwPplCache)(getLfwPplSorted)(args.lfwDlibAligned) print("Getting lfwMtcnnPpl") lfwMtcnnPplCache = os.path.join(args.workDir, 'lfwMtcnnPpl.pkl') lfwMtcnnPpl = cacheToFile(lfwMtcnnPplCache)(getLfwPplSorted)(args.lfwMtcnnAligned) def eigenfaces(): print("Eigenfaces Experiment") global eigenFacesDf cls = cv2.createEigenFaceRecognizer() cache = os.path.join(args.workDir, 'eigenFacesExp.pkl') eigenFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) def fisherfaces(): print("Fisherfaces Experiment") global fishFacesDf cls = cv2.createFisherFaceRecognizer() cache = os.path.join(args.workDir, 'fisherFacesExp.pkl') fishFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) def lbph(): print("LBPH Experiment") global lbphFacesDf cls = cv2.createLBPHFaceRecognizer() cache = os.path.join(args.workDir, 'lbphExp.pkl') lbphFacesDf = cacheToFile(cache)(opencvExp)(lfwPpl, cls) def openfacesvm(): print("OpenFace SVM Experiment") global openfaceCPUsvmDf net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = SVC(C=1, kernel='linear') cache = os.path.join(args.workDir, 'openface.cpu.svm.pkl') openfaceCPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) def openfacelinsvm(): print("OpenFaceLinearSVC Experiment") global openfaceCPUlinearsvmDf net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'openface.cpu.linearsvm.pkl') openfaceCPUlinearsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) def facenetlinsvm(): print("Facenet LinearSVC Experiment") global facenetlinearsvmDf cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'facenet.linearsvm.pkl') facenetlinearsvmDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) threads = [] t1 = Thread(target=eigenfaces, args=()) t2 = Thread(target=fisherfaces, args=()) t3 = Thread(target=lbph, args=()) t4 = Thread(target=openfacesvm, args=()) t5 = Thread(target=openfacelinsvm, args=()) t6 = Thread(target=facenetlinsvm, args=()) threads.append(t1) threads.append(t2) threads.append(t3) threads.append(t4) threads.append(t5) threads.append(t6) # Start all threads for x in threads: x.start() # Wait for all of them to finish for x in threads: x.join() plotAccuracy(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotTrainingTime(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf) plotPredictionTime(args.workDir, args.largeFont, eigenFacesDf, fishFacesDf, lbphFacesDf, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, facenetlinearsvmDf)
def main(): parser = argparse.ArgumentParser() parser.add_argument('--lfwDlibAligned', type=str, help='Location of Dlib aligned LFW images') parser.add_argument('--lfwMtcnnAligned', type=str, help='Location of MTCNN aligned LFW images') parser.add_argument('--largeFont', action='store_true') parser.add_argument('workDir', type=str, help='The work directory where intermediate files and results are kept.') args = parser.parse_args() # print(args) if args.largeFont: font = {'family': 'normal', 'size': 20} mpl.rc('font', **font) mkdirP(args.workDir) openfaceCPUsvmDf = None openfaceCPUlinearsvmDf = None openfacegaussiannbDf = None openfacedectreeDf = None openfacelogregDf = None facenetsvmDf = None facenetlinearsvmDf = None facenetgaussiannbDf = None facenetdectreeDf = None facenetlogregDf = None print("Getting lfwPpl") lfwPplCache = os.path.join(args.workDir, 'lfwPpl.pkl') lfwPpl = cacheToFile(lfwPplCache)(getLfwPplSorted)(args.lfwDlibAligned) print("Getting lfwMtcnnPpl") lfwMtcnnPplCache = os.path.join(args.workDir, 'lfwMtcnnPpl.pkl') lfwMtcnnPpl = cacheToFile(lfwMtcnnPplCache)(getLfwPplSorted)(args.lfwMtcnnAligned) def openfacesvm(): print("OpenFace SVM Experiment") global openfaceCPUsvmDf net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = SVC(C=1, kernel='linear') cache = os.path.join(args.workDir, 'openface.cpu.svm.pkl') openfaceCPUsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) def openfacelinsvm(): print("OpenFace LinearSVC Experiment") global openfaceCPUlinearsvmDf net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'openface.cpu.linearsvm.pkl') openfaceCPUlinearsvmDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) def openfacegaussiannb(): print("OpenFace GaussianNB Experiment") global openfacegaussiannbDf net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = GaussianNB() cache = os.path.join(args.workDir, 'openface.cpu.gaussiannb.pkl') openfacegaussiannbDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) def openfacedectree(): print("OpenFace DecisionTree Experiment") global openfacedectreeDf net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = DecisionTreeClassifier(max_depth=20) cache = os.path.join(args.workDir, 'openface.cpu.dectree.pkl') openfacedectreeDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) def openfacelogreg(): print("OpenFace DecisionTree Experiment") net = openface.TorchNeuralNet(openfaceModelPath, 96, cuda=False) cls = LogisticRegression(C=1, multi_class ='ovr') cache = os.path.join(args.workDir, 'openface.cpu.logreg.pkl') openfacelogregDf = cacheToFile(cache)(openfaceExp)(lfwPpl, net, cls) def facenetsvm(): print("Facenet SVM Experiment") global facenetsvmDf cls = SVC(C=1, kernel='linear') cache = os.path.join(args.workDir, 'facenet.svm.pkl') facenetsvmDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) def facenetlinsvm(): print("Facenet LinearSVC Experiment") global facenetlinearsvmDf cls = LinearSVC(C=1, multi_class='ovr') cache = os.path.join(args.workDir, 'facenet.linearsvm.pkl') facenetlinearsvmDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) def facenetgaussiannb(): print("Facenet GaussianNB Experiment") global facenetgaussiannbDf cls = GaussianNB() cache = os.path.join(args.workDir, 'facenet.gaussiannb.pkl') facenetgaussiannbDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) def facenetdectree(): print("Facenet DecisionTree Experiment") global facenetdectreeDf cls = DecisionTreeClassifier(max_depth=20) cache = os.path.join(args.workDir, 'facenet.dectree.pkl') facenetdectreeDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) def facenetlogreg(): print("Facenet LogisticRegression Experiment") cls = LogisticRegression(C=1, multi_class ='ovr') cache = os.path.join(args.workDir, 'facenet.logreg.pkl') facenetlogregDf = cacheToFile(cache)(facenetExp)(lfwMtcnnPpl, facenetModelDir, cls) threads = [] t1 = Thread(target=openfacesvm, args=()) t2 = Thread(target=openfacelinsvm, args=()) t3 = Thread(target=openfacegaussiannb, args=()) t4 = Thread(target=openfacedectree, args=()) t5 = Thread(target=openfacelogreg, args=()) t6 = Thread(target=facenetsvm, args=()) t7 = Thread(target=facenetlinsvm, args=()) t8 = Thread(target=facenetgaussiannb, args=()) t9 = Thread(target=facenetdectree, args=()) t10 = Thread(target=facenetlogreg, args=()) threads.append(t1) threads.append(t2) threads.append(t3) threads.append(t4) threads.append(t5) threads.append(t6) threads.append(t7) threads.append(t8) threads.append(t9) threads.append(t10) # Start all threads for x in threads: x.start() # Wait for all of them to finish for x in threads: x.join() plotAccuracy(args.workDir, args.largeFont, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, openfacegaussiannbDf, openfacedectreeDf, openfacelogregDf, facenetsvmDf, facenetlinearsvmDf, facenetgaussiannbDf, facenetdectreeDf, facenetlogregDf) plotTrainingTime(args.workDir, args.largeFont, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, openfacegaussiannbDf, openfacedectreeDf, openfacelogregDf, facenetsvmDf, facenetlinearsvmDf, facenetgaussiannbDf, facenetdectreeDf, facenetlogregDf) plotPredictionTime(args.workDir, args.largeFont, openfaceCPUsvmDf, openfaceCPUlinearsvmDf, openfacegaussiannbDf, openfacedectreeDf, openfacelogregDf, facenetsvmDf, facenetlinearsvmDf, facenetgaussiannbDf, facenetdectreeDf, facenetlogregDf)