Spaces:
Running
Running
| 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 | |
| """ | |
| run.py | |
| This script manage the entire transormation. | |
| Transformation happens in 6 phases: | |
| 0: dress -> correct [opencv] dress_to_correct | |
| 1: correct -> mask: [GAN] correct_to_mask | |
| 2: mask -> maskref [opencv] mask_to_maskref | |
| 3: maskref -> maskdet [GAN] maskref_to_maskdet | |
| 4: maskdet -> maskfin [opencv] maskdet_to_maskfin | |
| 5: maskfin -> nude [GAN] maskfin_to_nude | |
| 6: nude -> watermark [opencv] nude_to_watermark | |
| """ | |
| 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): | |
| #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("Executing phase: " + 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"): | |
| data_loader = DataLoader(opt, correct) | |
| elif (phase == "maskref_to_maskdet"): | |
| data_loader = DataLoader(opt, maskref) | |
| elif (phase == "maskfin_to_nude"): | |
| data_loader = DataLoader(opt, maskfin) | |
| dataset = data_loader.load_data() | |
| #Create Model | |
| model = DeepModel() | |
| model.initialize(opt) | |
| #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 = create_correct(dress) | |
| #mask_ref phase (opencv) | |
| elif (phase == "mask_to_maskref"): | |
| maskref = create_maskref(mask, correct) | |
| #mask_fin phase (opencv) | |
| elif (phase == "maskdet_to_maskfin"): | |
| maskfin = create_maskfin(maskref, maskdet) | |
| #nude_to_watermark phase (opencv) | |
| elif (phase == "nude_to_watermark"): | |
| watermark = create_watermark(nude) | |
| return watermark |