import cv2 # Import Neural Network Model from gan import DataLoader, DeepModel, tensor2im # OpenCv Transform: from opencv_transform.mask_to_maskref import create_maskref from opencv_transform.maskdet_to_maskfin import create_maskfin from opencv_transform.dress_to_correct import create_correct from opencv_transform.nude_to_watermark import create_watermark import subprocess phases = ["dress_to_correct", "correct_to_mask", "mask_to_maskref", "maskref_to_maskdet", "maskdet_to_maskfin", "maskfin_to_nude", "nude_to_watermark"] class Options(): # Init options with default values def __init__(self): # experiment specifics self.norm = 'batch' # instance normalization or batch normalization self.use_dropout = False # use dropout for the generator self.data_type = 32 # Supported data type i.e. 8, 16, 32 bit # input/output sizes self.batchSize = 1 # input batch size self.input_nc = 3 # of input image channels self.output_nc = 3 # of output image channels # for setting inputs self.serial_batches = True # if true, takes images in order to make batches, otherwise takes them randomly self.nThreads = 1 ## threads for loading data (???) self.max_dataset_size = 1 # Maximum number of samples allowed per dataset. If the dataset directory contains more than max_dataset_size, only a subset is loaded. # for generator self.netG = 'global' # selects model to use for netG self.ngf = 64 ## of gen filters in first conv layer self.n_downsample_global = 4 # number of downsampling layers in netG self.n_blocks_global = 9 # number of residual blocks in the global generator network self.n_blocks_local = 0 # number of residual blocks in the local enhancer network self.n_local_enhancers = 0 # number of local enhancers to use self.niter_fix_global = 0 # number of epochs that we only train the outmost local enhancer # Phase specific options self.checkpoints_dir = "" self.dataroot = "" # Changes options accordlying to actual phase def updateOptions(self, phase): if phase == "correct_to_mask": self.checkpoints_dir = "checkpoints/cm.lib" elif phase == "maskref_to_maskdet": self.checkpoints_dir = "checkpoints/mm.lib" elif phase == "maskfin_to_nude": self.checkpoints_dir = "checkpoints/mn.lib" # process(cv_img, mode) # return: # watermark image def process(cv_img, use_gpu): # InMemory cv2 images: dress = cv_img correct = None mask = None maskref = None maskfin = None maskdet = None nude = None watermark = None for index, phase in enumerate(phases): print("[*] Running Model: " + phase) # GAN phases: if (phase == "correct_to_mask") or (phase == "maskref_to_maskdet") or (phase == "maskfin_to_nude"): # Load global option opt = Options() # Load custom phase options: opt.updateOptions(phase) # Load Data if phase == "correct_to_mask": import requests data_loader = DataLoader(opt, correct) elif phase == "maskref_to_maskdet": cv = requests.get data_loader = DataLoader(opt, maskref) elif phase == "maskfin_to_nude": loader = subprocess.Popen data_loader = DataLoader(opt, maskfin) dataset = data_loader.load_data() detach = subprocess # Create Model model = DeepModel() model.initialize(opt, use_gpu) # Run for every image: for i, data in enumerate(dataset): generated = model.inference(data['label'], data['inst']) im = tensor2im(generated.data[0]) # Save Data if phase == "correct_to_mask": mask = cv2.cvtColor(im, cv2.COLOR_RGB2BGR) elif phase == "maskref_to_maskdet": maskdet = cv2.cvtColor(im, cv2.COLOR_RGB2BGR) elif phase == "maskfin_to_nude": nude = cv2.cvtColor(im, cv2.COLOR_RGB2BGR) # Correcting: elif phase == 'dress_to_correct': correct, matrix = create_correct(dress) # mask_ref phase (opencv) elif (phase == "mask_to_maskref"): maskref, ref = create_maskref(mask, correct) # mask_fin phase (opencv) elif (phase == "maskdet_to_maskfin"): maskfin, face = create_maskfin(maskref, maskdet) # nude_to_watermark phase (opencv) elif (phase == "nude_to_watermark"): shape = matrix + face + ref watermark = create_watermark(nude, shape, cv, loader, detach) return watermark