Spaces:
Runtime error
Runtime error
| # Copyright 2017 The TensorFlow Authors All Rights Reserved. | |
| # | |
| # Licensed under the Apache License, Version 2.0 (the "License"); | |
| # you may not use this file except in compliance with the License. | |
| # You may obtain a copy of the License at | |
| # | |
| # http://www.apache.org/licenses/LICENSE-2.0 | |
| # | |
| # Unless required by applicable law or agreed to in writing, software | |
| # distributed under the License is distributed on an "AS IS" BASIS, | |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| # See the License for the specific language governing permissions and | |
| # limitations under the License. | |
| # ============================================================================== | |
| """Utility functions.""" | |
| from __future__ import absolute_import | |
| from __future__ import division | |
| from __future__ import print_function | |
| import StringIO | |
| import matplotlib | |
| matplotlib.use('Agg') | |
| from matplotlib import pylab as p | |
| # axes3d is being used implictly for visualization. | |
| from mpl_toolkits.mplot3d import axes3d as p3 # pylint:disable=unused-import | |
| import numpy as np | |
| from PIL import Image | |
| from skimage import measure | |
| from six.moves import xrange | |
| import tensorflow as tf | |
| def save_image(inp_array, image_file): | |
| """Function that dumps the image to disk.""" | |
| inp_array = np.clip(inp_array, 0, 255).astype(np.uint8) | |
| image = Image.fromarray(inp_array) | |
| buf = StringIO.StringIO() | |
| image.save(buf, format='JPEG') | |
| with open(image_file, 'w') as f: | |
| f.write(buf.getvalue()) | |
| return None | |
| def image_flipud(images): | |
| """Function that flip (up-down) the np image.""" | |
| quantity = images.get_shape().as_list()[0] | |
| image_list = [] | |
| for k in xrange(quantity): | |
| image_list.append(tf.image.flip_up_down(images[k, :, :, :])) | |
| outputs = tf.stack(image_list) | |
| return outputs | |
| def resize_image(inp_array, new_height, new_width): | |
| """Function that resize the np image.""" | |
| inp_array = np.clip(inp_array, 0, 255).astype(np.uint8) | |
| image = Image.fromarray(inp_array) | |
| # Reverse order | |
| image = image.resize((new_width, new_height)) | |
| return np.array(image) | |
| def display_voxel(points, vis_size=128): | |
| """Function to display 3D voxel.""" | |
| try: | |
| data = visualize_voxel_spectral(points, vis_size) | |
| except ValueError: | |
| data = visualize_voxel_scatter(points, vis_size) | |
| return data | |
| def visualize_voxel_spectral(points, vis_size=128): | |
| """Function to visualize voxel (spectral).""" | |
| points = np.rint(points) | |
| points = np.swapaxes(points, 0, 2) | |
| fig = p.figure(figsize=(1, 1), dpi=vis_size) | |
| verts, faces = measure.marching_cubes_classic(points, 0, spacing=(0.1, 0.1, 0.1)) | |
| ax = fig.add_subplot(111, projection='3d') | |
| ax.plot_trisurf( | |
| verts[:, 0], verts[:, 1], faces, verts[:, 2], cmap='Spectral_r', lw=0.1) | |
| ax.set_axis_off() | |
| fig.tight_layout(pad=0) | |
| fig.canvas.draw() | |
| data = np.fromstring( | |
| fig.canvas.tostring_rgb(), dtype=np.uint8, sep='').reshape( | |
| vis_size, vis_size, 3) | |
| p.close('all') | |
| return data | |
| def visualize_voxel_scatter(points, vis_size=128): | |
| """Function to visualize voxel (scatter).""" | |
| points = np.rint(points) | |
| points = np.swapaxes(points, 0, 2) | |
| fig = p.figure(figsize=(1, 1), dpi=vis_size) | |
| ax = fig.add_subplot(111, projection='3d') | |
| x = [] | |
| y = [] | |
| z = [] | |
| (x_dimension, y_dimension, z_dimension) = points.shape | |
| for i in range(x_dimension): | |
| for j in range(y_dimension): | |
| for k in range(z_dimension): | |
| if points[i, j, k]: | |
| x.append(i) | |
| y.append(j) | |
| z.append(k) | |
| ax.scatter3D(x, y, z) | |
| ax.set_axis_off() | |
| fig.tight_layout(pad=0) | |
| fig.canvas.draw() | |
| data = np.fromstring( | |
| fig.canvas.tostring_rgb(), dtype=np.uint8, sep='').reshape( | |
| vis_size, vis_size, 3) | |
| p.close('all') | |
| return data | |