import gradio as gr
import cv2
import numpy as np
from ColorTransfer import ImgProcess
def initializeImgProcess(img1 = None, img2 = None):
return ImgProcess(img1, img2)
class GradioInterface:
def __init__(self):
self.imgProcess_obj = None
self.imgProcess_obj = self.getImgProcess_obj()
height = 300
self.fun_percent = 1.0
with gr.Blocks() as self.app:
gr.Markdown("
Image Style Transfer App
")
with gr.Row():
with gr.Column(scale = 1):
self.img1 = gr.Image(label="Upload First Image", type="pil", height = height)
self.img2 = gr.Image(label="Upload Second Image", type="pil", height = height)
with gr.Column(scale = 1):
self.output_img1 = gr.Image(label="Transformed Image1 - Color Transfer", height = height)
self.output_img2 = gr.Image(label="Transformed Image2 - Histogram Match", height = height)
with gr.Row():
with gr.Column(scale = 1):
percent_slider = gr.Slider(label="Slide for fun", minimum=0.1, maximum=1.0, step=0.1, value = 1.0)
percent_slider.change(self.updateFunPercent, inputs = percent_slider)
with gr.Column(scale = 1):
transform_button = gr.Button("Transfer Style")
transform_button.click(self._transfer_style, inputs=[self.img1, self.img2], outputs = [self.output_img1, self.output_img2])
swap_button = gr.Button("Swap Input Images")
swap_button.click(self.__swapInputImages, inputs=[self.img1, self.img2], outputs = [self.img1, self.img2])
def getImgProcess_obj(self):
if self.imgProcess_obj != None:
return self.imgProcess_obj
else:
return initializeImgProcess()
def _transfer_style(self, img1, img2):
return self.imgProcess_obj.loadAndTransfer(img1, img2, self.fun_percent)
def updateFunPercent(self, val):
self.fun_percent = val
def __swapInputImages(self, img1, img2):
return img2, img1
def launch_app(self):
self.app.launch(share=True)
if __name__ == "__main__":
print("Starting")
app_obj = GradioInterface()
app_obj.launch_app()