| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- 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
|