Spaces:
Runtime error
Runtime error
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 | |