def save_img(object, url, domain=None, **kwargs): if isinstance(object, np.ndarray): normalized = _normalize_array(object, domain=domain) object = PIL.Image.fromarray(normalized) if isinstance(object, PIL.Image.Image): object.save(url, **kwargs) # will infer format from url's url ext. else: raise ValueError("Can only save_img for numpy arrays or PIL.Images!")
def save_img(object, handle, **kwargs): """Save numpy array as image file on CNS.""" if isinstance(object, np.ndarray): normalized = _normalize_array(object) image = PIL.Image.fromarray(normalized) elif isinstance(object, PIL.Image): image = object else: raise ValueError("Can only save_img for numpy arrays or PIL.Images!") image.save(handle, **kwargs) # will infer format from handle's url ext.
def save_img(object, handle, domain=None, **kwargs): """Save numpy array as image file on CNS.""" if isinstance(object, np.ndarray): normalized = _normalize_array(object, domain=domain) object = PIL.Image.fromarray(normalized) if isinstance(object, PIL.Image.Image): object.save(handle, **kwargs) # will infer format from handle's url ext. else: raise ValueError("Can only save_img for numpy arrays or PIL.Images!") return { "type": "image", "shape": object.size + (len(object.getbands()), ), "url": handle.name, }
def optimize_input(obj, model, param_f, transforms, lr=0.05, step_n=512, num_output_channels=4, do_render=False, out_name="out"): sess = create_session() # Set up optimization problem size = 84 t_size = tf.placeholder_with_default(size, []) T = render.make_vis_T( model, obj, param_f=param_f, transforms=transforms, optimizer=tf.train.AdamOptimizer(lr), ) tf.global_variables_initializer().run() if do_render: video_fn = out_name + '.mp4' writer = FFMPEG_VideoWriter(video_fn, (size, size * 4), 60.0) # Optimization loop try: for i in range(step_n): _, loss, img = sess.run([T("vis_op"), T("loss"), T("input")]) if do_render: #if outputting only one channel... if num_output_channels == 1: img = img[..., -1:] #print(img.shape) img = np.tile(img, 3) else: #img=img[...,-3:] img = img.transpose([0, 3, 1, 2]) img = img.reshape([84 * 4, 84, 1]) img = np.tile(img, 3) writer.write_frame(_normalize_array(img)) if i > 0 and i % 50 == 0: clear_output() print("%d / %d score: %f" % (i, step_n, loss)) show(img) except KeyboardInterrupt: pass finally: if do_render: print("closing...") writer.close() # Save trained variables if do_render: train_vars = sess.graph.get_collection( tf.GraphKeys.TRAINABLE_VARIABLES) params = np.array(sess.run(train_vars), object) save(params, out_name + '.npy') # Save final image final_img = T("input").eval({t_size: 600})[..., -1:] #change size save(final_img, out_name + '.jpg', quality=90) out = T("input").eval({t_size: 84}) sess.close() return out