from tkinter import Tk from PIL import Image, ImageTk from tkinter.filedialog import askopenfilename from GUI import View from Inference import StyleCLIP import argparse #%% class PlayInteractively(): #Controller ''' followed Model View Controller Design Pattern controller, model, view ''' def __init__(self,dataset_name='ffhq'): self.root = Tk() self.view=View(self.root) self.img_ratio=2 self.style_clip=StyleCLIP(dataset_name) self.view.neutral.bind("", self.text_n) self.view.target.bind("", self.text_t) self.view.alpha.bind('', self.ChangeAlpha) self.view.beta.bind('', self.ChangeBeta) self.view.set_init.bind('', self.SetInit) self.view.reset.bind('', self.Reset) self.view.bg.bind('', self.open_img) self.drawn = None self.view.target.delete(1.0, "end") self.view.target.insert("end", self.style_clip.target) # self.view.neutral.delete(1.0, "end") self.view.neutral.insert("end", self.style_clip.neutral) def Reset(self,event): self.style_clip.GetDt2() self.style_clip.M.alpha=[0] self.view.beta.set(self.style_clip.beta) self.view.alpha.set(0) img=self.style_clip.GetImg() img=Image.fromarray(img) img = ImageTk.PhotoImage(img) self.addImage_m(img) def SetInit(self,event): codes=self.style_clip.GetCode() self.style_clip.M.dlatent_tmp=[tmp[:,0] for tmp in codes] print('set init') def ChangeAlpha(self,event): tmp=self.view.alpha.get() self.style_clip.M.alpha=[float(tmp)] img=self.style_clip.GetImg() print('manipulate one') img=Image.fromarray(img) img = ImageTk.PhotoImage(img) self.addImage_m(img) def ChangeBeta(self,event): tmp=self.view.beta.get() self.style_clip.beta=float(tmp) img=self.style_clip.GetImg() print('manipulate one') img=Image.fromarray(img) img = ImageTk.PhotoImage(img) self.addImage_m(img) def ChangeDataset(self,event): dataset_name=self.view.set_category.get() self.style_clip.LoadData(dataset_name) self.view.target.delete(1.0, "end") self.view.target.insert("end", self.style_clip.target) self.view.neutral.delete(1.0, "end") self.view.neutral.insert("end", self.style_clip.neutral) def text_t(self,event): tmp=self.view.target.get("1.0",'end') tmp=tmp.replace('\n','') self.view.target.delete(1.0, "end") self.view.target.insert("end", tmp) print('target',tmp,'###') self.style_clip.target=tmp self.style_clip.GetDt2() self.view.beta.set(self.style_clip.beta) self.view.alpha.set(3) self.style_clip.M.alpha=[3] img=self.style_clip.GetImg() print('manipulate one') img=Image.fromarray(img) img = ImageTk.PhotoImage(img) self.addImage_m(img) def text_n(self,event): tmp=self.view.neutral.get("1.0",'end') tmp=tmp.replace('\n','') self.view.neutral.delete(1.0, "end") self.view.neutral.insert("end", tmp) print('neutral',tmp,'###') self.style_clip.neutral=tmp self.view.target.delete(1.0, "end") self.view.target.insert("end", tmp) def run(self): self.root.mainloop() def addImage(self,img): self.view.bg.create_image(self.view.width/2, self.view.height/2, image=img, anchor='center') self.image=img #save a copy of image. if not the image will disappear def addImage_m(self,img): self.view.mani.create_image(512, 512, image=img, anchor='center') self.image2=img def openfn(self): filename = askopenfilename(title='open',initialdir='./data/'+self.style_clip.M.dataset_name+'/',filetypes=[("all image format", ".jpg"),("all image format", ".png")]) return filename def open_img(self,event): x = self.openfn() print(x) img = Image.open(x) img2 = img.resize(( 512,512), Image.ANTIALIAS) img2 = ImageTk.PhotoImage(img2) self.addImage(img2) img = ImageTk.PhotoImage(img) self.addImage_m(img) img_index=x.split('/')[-1].split('.')[0] img_index=int(img_index) print(img_index) self.style_clip.M.img_index=img_index self.style_clip.M.dlatent_tmp=[tmp[img_index:(img_index+1)] for tmp in self.style_clip.M.dlatents] self.style_clip.GetDt2() self.view.beta.set(self.style_clip.beta) self.view.alpha.set(3) #%% if __name__ == "__main__": parser = argparse.ArgumentParser(description='Process some integers.') parser.add_argument('--dataset_name',type=str,default='ffhq', help='name of dataset, for example, ffhq') args = parser.parse_args() dataset_name=args.dataset_name self=PlayInteractively(dataset_name) self.run()