|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import os |
|
import numpy as np |
|
import imgui |
|
import dnnlib |
|
import torch |
|
from gui_utils import imgui_utils |
|
|
|
|
|
|
|
class LatentWidget: |
|
def __init__(self, viz): |
|
self.viz = viz |
|
self.seed = 0 |
|
self.w_plus = True |
|
self.reg = 0 |
|
self.lr = 0.001 |
|
self.w_path = '' |
|
self.w_load = None |
|
self.defer_frames = 0 |
|
self.disabled_time = 0 |
|
|
|
@imgui_utils.scoped_by_object_id |
|
def __call__(self, show=True): |
|
viz = self.viz |
|
if show: |
|
with imgui_utils.grayed_out(self.disabled_time != 0): |
|
imgui.text('Latent') |
|
imgui.same_line(viz.label_w) |
|
with imgui_utils.item_width(viz.font_size * 8.75): |
|
changed, seed = imgui.input_int('Seed', self.seed) |
|
if changed: |
|
self.seed = seed |
|
|
|
self.w_load = None |
|
|
|
|
|
imgui.text(' ') |
|
imgui.same_line(viz.label_w) |
|
_changed, self.w_path = imgui_utils.input_text('##path', self.w_path, 1024, |
|
flags=(imgui.INPUT_TEXT_AUTO_SELECT_ALL | imgui.INPUT_TEXT_ENTER_RETURNS_TRUE), |
|
width=(-1), |
|
help_text='Path to latent code') |
|
if imgui.is_item_hovered() and not imgui.is_item_active() and self.w_path != '': |
|
imgui.set_tooltip(self.w_path) |
|
|
|
imgui.text(' ') |
|
imgui.same_line(viz.label_w) |
|
if imgui_utils.button('Load latent', width=viz.button_w, enabled=(self.disabled_time == 0 and 'image' in viz.result)): |
|
assert os.path.isfile(self.w_path), f"{self.w_path} does not exist!" |
|
self.w_load = torch.load(self.w_path) |
|
self.defer_frames = 2 |
|
self.disabled_time = 0.5 |
|
|
|
imgui.text(' ') |
|
imgui.same_line(viz.label_w) |
|
with imgui_utils.item_width(viz.button_w): |
|
changed, lr = imgui.input_float('Step Size', self.lr) |
|
if changed: |
|
self.lr = lr |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
imgui.text(' ') |
|
imgui.same_line(viz.label_w) |
|
reset_w = imgui_utils.button('Reset', width=viz.button_w, enabled='image' in viz.result) |
|
imgui.same_line() |
|
_clicked, w = imgui.checkbox('w', not self.w_plus) |
|
if w: |
|
self.w_plus = False |
|
imgui.same_line() |
|
_clicked, self.w_plus = imgui.checkbox('w+', self.w_plus) |
|
|
|
self.disabled_time = max(self.disabled_time - viz.frame_delta, 0) |
|
if self.defer_frames > 0: |
|
self.defer_frames -= 1 |
|
viz.args.w0_seed = self.seed |
|
viz.args.w_load = self.w_load |
|
viz.args.reg = self.reg |
|
viz.args.w_plus = self.w_plus |
|
viz.args.reset_w = reset_w |
|
viz.args.lr = lr |
|
|
|
|
|
|