Skip to content

Commit

Permalink
[feature] merge pull request #175 -z and --viewer_size
Browse files Browse the repository at this point in the history
  • Loading branch information
mikkel committed Dec 18, 2018
1 parent 8935ba3 commit 77fc99c
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 11 deletions.
2 changes: 1 addition & 1 deletion bin/hypergan
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@ class CommandParser:
def common_flags(self, parser):
parser.add_argument('--size', '-s', type=str, default='64x64x3', help='Size of your data. For images it is widthxheightxchannels.')
parser.add_argument('--batch_size', '-b', type=int, default=32, help='Number of samples to include in each batch. If using batch norm, this needs to be preserved when in server mode')
parser.add_argument('--zoom', '-z', type=int, default=1, help='Zoom level for viewer(does not change graph)')
parser.add_argument('--config', '-c', action='store', default=None, type=str, help='The configuration file to load.')
parser.add_argument('--device', '-d', type=str, default='/gpu:0', help='In the form "/gpu:0", "/cpu:0", etc. Always use a GPU (or TPU) to train')
parser.add_argument('--format', '-f', type=str, default='png', help='jpg or png')
Expand All @@ -34,6 +33,7 @@ class CommandParser:
parser.add_argument('--steps', type=int, default=-1, help='Number of steps to train for. -1 is unlimited (default)')
parser.add_argument('--noviewer', dest='viewer', action='store_false', help='Disables the display of samples in a window.')
parser.add_argument('--nosave', dest='viewer', action='store_false', help='Dont save after --steps of training')
parser.add_argument('--viewer_size', '-z', type=float, dest='viewer_size', default=1, help='Size of the viewer window as a multiplier. WARNING: values above 60 may cause crashes')
parser.add_argument('--autoencode', dest='autoencode', action='store', help='Disables the display of samples in a window.')
parser.add_argument('--classloss', dest='classloss', action='store_true', help='Enable class loss. You must have multiple subfolders, one for each class')
parser.add_argument('--list-templates', '-l', dest='list_templates', action='store_true', help='List available templates.')
Expand Down
1 change: 1 addition & 0 deletions hypergan/cli.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,7 @@ def __init__(self, gan, args={}):

title = "[hypergan] " + self.config_name
GlobalViewer.title = title
GlobalViewer.viewer_size = self.args.viewer_size
GlobalViewer.enabled = self.args.viewer
GlobalViewer.zoom = self.args.zoom

Expand Down
38 changes: 28 additions & 10 deletions hypergan/pygame_viewer.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,30 +8,48 @@
"""
import numpy as np



class PygameViewer:

def __init__(self, title="HyperGAN", enabled=True, zoom=1):
def __init__(self, title="HyperGAN", viewer_size=1, enabled=True):
self.screen = None
self.title = title
self.viewer_size = viewer_size
self.enabled = enabled
self.zoom = zoom

def update(self, image):
if not self.enabled: return

image = np.transpose(image, [1, 0,2])
size = [image.shape[0], image.shape[1]]
scaled = [image.shape[0]*self.zoom, image.shape[1]*self.zoom]

if not self.screen:
import pygame
self.pg = pygame
self.screen = self.pg.display.set_mode(scaled)
if self.viewer_size <= 0:
self.viewer_size = 0.1
self.size = [int(image.shape[0] * self.viewer_size), int(image.shape[1] * self.viewer_size)]
self.aspect_w = image.shape[1] / image.shape[0]
self.aspect_h = image.shape[0] / image.shape[1]
self.temp_size = self.size
self.screen = self.pg.display.set_mode(self.size,self.pg.RESIZABLE)
self.pg.display.set_caption(self.title)
self.pg.event.get()
surface = self.pg.Surface(size)

for event in self.pg.event.get():
if event.type == self.pg.VIDEORESIZE:
if self.size[0] != event.size[0]:
self.temp_size = [event.size[0], int(event.size[0] * self.aspect_w)]
elif self.size[1] != event.size[1]:
self.temp_size = [int(event.size[1] * self.aspect_h), event.size[1]]

elif event.type == self.pg.ACTIVEEVENT and event.state == 2 and event.gain == 1:
self.size = self.temp_size
self.screen = self.pg.display.set_mode(self.size,self.pg.RESIZABLE)


surface = self.pg.Surface([image.shape[0],image.shape[1]])
self.pg.surfarray.blit_array(surface, image)
if self.zoom > 1:
surface = self.pg.transform.scale(surface, scaled)
self.screen.blit(surface, (0,0))
self.screen.blit(self.pg.transform.scale(surface,self.size),(0,0))
self.pg.display.flip()


0 comments on commit 77fc99c

Please sign in to comment.