Example #1
0
    def process_image(self, filename):
        # TODO move the model load and the converter creation in a method called on init, but after the arg parsing
        (face_A,
         face_B) = ('/decoder_A.h5',
                    '/decoder_B.h5') if not self.arguments.swap_model else (
                        '/decoder_B.h5', '/decoder_A.h5')

        model_dir = self.arguments.model_dir
        encoder.load_weights(model_dir + "/encoder.h5")
        decoder_A.load_weights(model_dir + face_A)
        decoder_B.load_weights(model_dir + face_B)

        converter = PluginLoader.get_converter("Masked")(autoencoder_B)

        try:
            image = cv2.imread(filename)
            for (idx, face) in enumerate(detect_faces(image)):
                if idx > 0 and self.arguments.verbose:
                    print('- Found more than one face!')
                    self.verify_output = True

                image = converter.patch_image(image, face)
                self.faces_detected = self.faces_detected + 1

            output_file = self.output_dir / Path(filename).name
            cv2.imwrite(str(output_file), image)
        except Exception as e:
            print('Failed to convert image: {}. Reason: {}'.format(
                filename, e))
Example #2
0
    def process_arguments(self, arguments):
        if not arguments.swap_model:
            self.face_A, self.face_B = ('/decoder_A.h5', '/decoder_B.h5')
        else:
            self.face_A, self.face_B = ('/decoder_B.h5', '/decoder_A.h5')

        model_dir = arguments.model_dir
        encoder.load_weights(model_dir + "/encoder.h5")

        decoder_A.load_weights(model_dir + self.face_A)
        decoder_B.load_weights(model_dir + self.face_B)
        self.converter = PluginLoader.get_converter("Masked")(autoencoder_B)
        super().process_arguments(arguments)
Example #3
0
    def process_arguments(self, arguments):
        self.arguments = arguments
        print("Model A Directory: {}".format(self.arguments.input_A))
        print("Model B Directory: {}".format(self.arguments.input_B))
        print("Training data directory: {}".format(self.arguments.model_dir))

        try:
            encoder.load_weights(self.arguments.model_dir + '/encoder.h5')
            decoder_A.load_weights(self.arguments.model_dir + '/decoder_A.h5')
            decoder_B.load_weights(self.arguments.model_dir + '/decoder_B.h5')
        except Exception as e:
            print('Not loading existing training data.')
            print(e)

        self.process()
Example #4
0
    def __init__(self, description='default'):
        print('Initializing')
        self.parse_arguments(description)

        print("Model A Directory: {}".format(self.arguments.input_A))
        print("Model B Directory: {}".format(self.arguments.input_B))
        print("Training data directory: {}".format(self.arguments.model_dir))
        print('Starting, this may take a while...')

        try:
            encoder.load_weights(self.arguments.model_dir + '/encoder.h5')
            decoder_A.load_weights(self.arguments.model_dir + '/decoder_A.h5')
            decoder_B.load_weights(self.arguments.model_dir + '/decoder_B.h5')
        except Exception as e:
            print('Not loading existing training data.')
            print(e)

        self.process()
Example #5
0
import cv2
import numpy

from lib.utils import get_image_paths, load_images, stack_images
from lib.training_data import get_training_data

from lib.model import autoencoder_A
from lib.model import autoencoder_B
from lib.model import encoder, decoder_A, decoder_B

try:
    encoder  .load_weights( 'models/encoder.h5'   )
    decoder_A.load_weights( 'models/decoder_A.h5' )
    decoder_B.load_weights( 'models/decoder_B.h5' )
except:
    pass

def save_model_weights():
    encoder  .save_weights( 'models/encoder.h5'   )
    decoder_A.save_weights( 'models/decoder_A.h5' )
    decoder_B.save_weights( 'models/decoder_B.h5' )
    print( 'save model weights' )

def show_sample( test_A, test_B ):
    figure_A = numpy.stack([
        test_A,
        autoencoder_A.predict( test_A ),
        autoencoder_B.predict( test_A ),
        ], axis=1 )
    figure_B = numpy.stack([
        test_B,