diff --git a/bob/ip/tensorflow_extractor/DrGanMSU.py b/bob/ip/tensorflow_extractor/DrGanMSU.py index 298de65d9e9c110337157361f0fba588df72253d..28157cc602909c7b5cf5d55aa292f1d84877066c 100644 --- a/bob/ip/tensorflow_extractor/DrGanMSU.py +++ b/bob/ip/tensorflow_extractor/DrGanMSU.py @@ -6,9 +6,10 @@ import numpy import tensorflow as tf import os from bob.extension import rc -from bob.extension.rc_config import _saverc from . import download_file import logging +import bob.extension.download +import bob.io.base logger = logging.getLogger(__name__) @@ -348,12 +349,21 @@ class DrGanMSUExtractor(object): # If the path is not, set the default path if model_path is None: - model_path = self.get_modelpath() + model_path = self.get_modelpath() # If does not exist, download if not os.path.exists(model_path): - self.download_model() - + bob.io.base.create_directories_safe(DrGanMSUExtractor.get_modelpath()) + zip_file = os.path.join(DrGanMSUExtractor.get_modelpath(), + "DR_GAN_model.zip") + urls = [ + # This is a private link at Idiap to save bandwidth. + "http://www.idiap.ch/private/wheels/gitlab/" + "DR_GAN_model.zip", + ] + + bob.extension.download.download_and_unzip(urls, zip_file) + self.saver = tf.train.Saver() # Reestore either from the last checkpoint or from a particular checkpoint if os.path.isdir(model_path): @@ -381,46 +391,6 @@ class DrGanMSUExtractor(object): return "bob.ip.tensorflow_extractor.drgan_modelpath" - @staticmethod - def download_model(): - """ - Download and extract the DrGanMSU files in bob/ip/tensorflow_extractor - """ - import zipfile - zip_file = os.path.join(DrGanMSUExtractor.get_modelpath(), - "DR_GAN_model.zip") - urls = [ - # This is a private link at Idiap to save bandwidth. - "http://beatubulatest.lab.idiap.ch/private/wheels/gitlab/" - "DR_GAN_model.zip", - ] - - for url in urls: - try: - logger.info( - "Downloading the DrGanMSU model from " - "{} ...".format(url)) - download_file(url, zip_file) - break - except Exception: - logger.warning( - "Could not download from the %s url", url, exc_info=True) - else: # else is for the for loop - if not os.path.isfile(zip_file): - raise RuntimeError("Could not download the zip file.") - - # Unzip - logger.info("Unziping in {0}".format(DrGanMSUExtractor.get_modelpath())) - with zipfile.ZipFile(zip_file) as myzip: - myzip.extractall(os.path.dirname(DrGanMSUExtractor.get_modelpath())) - - logger.info("Saving the path `{0}` in the ~.bobrc file".format(DrGanMSUExtractor.get_modelpath())) - rc[DrGanMSUExtractor.get_rcvariable()] = DrGanMSUExtractor.get_modelpath() - _saverc(rc) - - # delete extra files - os.unlink(zip_file) - def __call__(self, image): """__call__(image) -> feature diff --git a/bob/ip/tensorflow_extractor/FaceNet.py b/bob/ip/tensorflow_extractor/FaceNet.py index 4b2a8e16402ec644c07596051a4150d337f8b32d..1b50ea64ce1ee645b2f5ae05d77e8abc1df36efb 100644 --- a/bob/ip/tensorflow_extractor/FaceNet.py +++ b/bob/ip/tensorflow_extractor/FaceNet.py @@ -8,8 +8,8 @@ from bob.ip.color import gray_to_rgb from bob.io.image import to_matplotlib from . import download_file from bob.extension import rc -from bob.extension.rc_config import _saverc - +import bob.extension.download +import bob.io.base logger = logging.getLogger(__name__) @@ -98,7 +98,21 @@ class FaceNet(object): if self.model_path is None: self.model_path = self.get_modelpath() if not os.path.exists(self.model_path): - self.download_model() + bob.io.base.create_directories_safe(FaceNet.get_modelpath()) + zip_file = os.path.join(FaceNet.get_modelpath(), + "20170512-110547.zip") + urls = [ + # This is a private link at Idiap to save bandwidth. + "http://www.idiap.ch/private/wheels/gitlab/" + "facenet_model2_20170512-110547.zip", + # this works for everybody + "https://drive.google.com/uc?export=download&id=" + "0B5MzpY9kBtDVZ2RpVDYwWmxoSUk", + ] + + bob.extension.download.download_and_unzip(urls, zip_file) + + # code from https://github.com/davidsandberg/facenet model_exp = os.path.expanduser(self.model_path) if (os.path.isfile(model_exp)): @@ -158,46 +172,3 @@ class FaceNet(object): return model_path - - @staticmethod - def download_model(): - """ - Download and extract the FaceNet files in bob/ip/tensorflow_extractor - """ - import zipfile - zip_file = os.path.join(FaceNet.get_modelpath(), - "20170512-110547.zip") - urls = [ - # This is a private link at Idiap to save bandwidth. - "http://beatubulatest.lab.idiap.ch/private/wheels/gitlab/" - "facenet_model2_20170512-110547.zip", - # this works for everybody - "https://drive.google.com/uc?export=download&id=" - "0B5MzpY9kBtDVZ2RpVDYwWmxoSUk", - ] - - for url in urls: - try: - logger.info( - "Downloading the FaceNet model from " - "{} ...".format(url)) - download_file(url, zip_file) - break - except Exception: - logger.warning( - "Could not download from the %s url", url, exc_info=True) - else: # else is for the for loop - if not os.path.isfile(zip_file): - raise RuntimeError("Could not download the zip file.") - - # Unzip - logger.info("Unziping in {0}".format(FaceNet.get_modelpath())) - with zipfile.ZipFile(zip_file) as myzip: - myzip.extractall(os.path.dirname(FaceNet.get_modelpath())) - - logger.info("Saving the path `{0}` in the ~.bobrc file".format(FaceNet.get_modelpath())) - rc[FaceNet.get_rcvariable()] = FaceNet.get_modelpath() - _saverc(rc) - - # delete extra files - os.unlink(zip_file) diff --git a/bob/ip/tensorflow_extractor/test.py b/bob/ip/tensorflow_extractor/test.py index 67414c54e62d8ff66adfc514b5e1683c586a41f6..78955e626ad4cfe4dfe599b1ada0de36bdd17cad 100644 --- a/bob/ip/tensorflow_extractor/test.py +++ b/bob/ip/tensorflow_extractor/test.py @@ -47,41 +47,9 @@ def test_facenet(): assert output.size == 128, output.shape def test_drgan(): - """ - '/remote/idiap.svm/user.active/heusch/work/dev/DR-GAN_code_wmodel/DR_GAN_model/DCGAN.model-590000' - """ from bob.ip.tensorflow_extractor import DrGanMSUExtractor - #extractor = DrGanMSUExtractor("/idiap/project/hface/models/cnn/DR_GAN_model/", image_size=[96, 96, 3]) extractor = DrGanMSUExtractor() data = numpy.random.rand(3, 96, 96).astype("uint8") output = extractor(data) assert output.size == 320, output.shape - - -""" -def test_output_from_meta(): - - # Loading MNIST model - filename = os.path.join( pkg_resources.resource_filename(__name__, 'data'), "model.ckp.meta") - inputs = tf.placeholder(tf.float32, shape=(None, 28, 28, 1)) - - # Testing the last output - graph = scratch_network(inputs) - extractor = bob.ip.tensorflow_extractor.Extractor(filename, inputs, graph) - - data = numpy.random.rand(2, 28, 28, 1).astype("float32") - output = extractor(data) - assert extractor(data).shape == (2, 10) - del extractor - - # Testing flatten - inputs = tf.placeholder(tf.float32, shape=(None, 28, 28, 1)) - graph = scratch_network(inputs, end_point="flatten1") - extractor = bob.ip.tensorflow_extractor.Extractor(filename, inputs, graph) - - data = numpy.random.rand(2, 28, 28, 1).astype("float32") - output = extractor(data) - assert extractor(data).shape == (2, 1690) - del extractor -"""