Source code for neodroidvision.data.synthesis.conversion.mnist.threed.to_nrrd

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

__author__ = "Christian"
__doc__ = r"""

           Created on 29/03/2020
           """

import gzip
import pickle

import numpy
from draugr.numpy_utilities import SplitEnum
from tqdm import trange

from neodroidvision import PROJECT_APP_PATH
from .augmentation import rotate_y
from .gen import img_to_point_cloud, make_voxel

__all__ = ["save_dataset"]


[docs]def save_dataset(X, y, voxel, output, shape=(28, 28)): """ Args: X: y: voxel: output: shape: """ img = numpy.zeros((shape[0] + 2, shape[1] + 2)) import nrrd # pip install pynrrd for i in trange(len(X)): img[1:-1, 1:-1] = X[i].reshape(shape[0], shape[1]) data = img_to_point_cloud(img, voxel) # rotate to vertical transf = numpy.c_[data[:, :3], numpy.ones(data[:, :3].shape[0])] transf = transf @ rotate_y(90) data[:, :3] = transf[:, :-1] if i == 1: # data = numpy.zeros((70, 800, 600)) nrrd.write( str(PROJECT_APP_PATH.user_data / "mnist3d" / f"{y[i]}.nrrd"), data[:, :3], ) exit(0)
if __name__ == "__main__": with gzip.open(PROJECT_APP_PATH.user_data / "mnist.pkl.gz", "rb") as f: train_set, valid_set, test_set = pickle.load(f, encoding="iso-8859-1") N_VALID = 100 for split, set_ in zip( (SplitEnum.training, SplitEnum.validation, SplitEnum.testing), (train_set, valid_set, test_set), ): save_dataset( set_[0][:N_VALID], set_[1][:N_VALID], make_voxel(), PROJECT_APP_PATH.user_data / "mnist3d" / split.value, )