Как преобразовать файл .pts или .npy в файл .ply или .h5? - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть данные трехмерного облака точек в виде файла .npy и данных .pts.

Чтобы использовать эти данные для нейронной сети 3D-классификации, я должен изменить эти данные на файл .h5.

Итак, сначала я пытаюсь преобразовать файл .npy или .pts в файл .ply, используя python.

Не могли бы вы сослаться на примеры кодов или помочь мне в преобразовании формата файла?

ТакжеЯ буду очень признателен за способы конвертации .ply в формат .h5 ..

Извините за плохое знание английского языка.

1 Ответ

0 голосов
/ 15 сентября 2018

Я надеюсь, что этот код поможет вам начать, он показывает, как создать файл h5 из npy (или случайных точек).Предупреждение: имя группы и набор данных являются произвольными (это пример).

import os
import h5py
import numpy as np

# reading or creating an array of points numpy style
def create_or_load_random_points_npy(file_radix, size, min, max):
    if os.path.exists(file_radix+'.npy'):
        arr = np.load(file_radix+'.npy')
    else:
        arr = np.random.uniform(min, max, (size,3))
        np.save(file_radix, arr)
    return arr


# converting a numpy array (size,3) to a h5 file with two groups representng two way
# of serializing points
def convert_array_2_shades_of_grey(file_radix, arr):
    file = h5py.File(file_radix + '.h5', 'w')
    #only one dataset in a group
    group = file.create_group("single_dataset")
    group.attrs["desc"]=np.string_("random points in a single dataset")
    dset=group.create_dataset("points", (len(arr), len(arr[0])), h5py.h5t.NATIVE_DOUBLE)
    dset[...]=arr
    #create a dataset for each coordinate
    group = file.create_group("several_datasets")
    group.attrs["desc"] = np.string_("random points in a several coordinates (one for each coord)")
    dset = group.create_dataset("x", (len(arr),), h5py.h5t.NATIVE_DOUBLE)
    dset[...] = arr[:, 0]
    dset = group.create_dataset("y", (len(arr),), h5py.h5t.NATIVE_DOUBLE)
    dset[...] = arr[:, 1]
    dset = group.create_dataset("z", (len(arr),), h5py.h5t.NATIVE_DOUBLE)
    dset[...] = arr[:, 2]

# loads the h5 file, choose which way of storing you would like to deserialize
def load_random_points_h5(file_radix, single=True):
    file = h5py.File(file_radix + '.h5', 'r')
    if single:
        group = file["single_dataset"]
        print 'reading -> ', group.attrs["desc"]
        dset=group["points"]
        arr = dset[...]
    else:
        group = file["several_datasets"]
        print 'reading -> ', group.attrs["desc"]
        dset = group["x"]
        arr = np.zeros((dset.size, 3))
        arr[:, 0] = dset[...]
        dset = group["y"]
        arr[:, 1] = dset[...]
        dset = group["z"]
        arr[:, 2] = dset[...]
    return arr

# And now we test !!!
file_radix = 'test'
# create or load the npy file
arr =  create_or_load_random_points_npy(file_radix, 10000, -100.0, 100.0)
# Well, well, what is in the box ?
print arr

# converting numpy array to h5
convert_array_2_shades_of_grey(file_radix, arr)

# loading single dataset style.
arr = load_random_points_h5(file_radix, True)
# Well, well, what is in the box ?
print arr
# loading several dataset style.
arr = load_random_points_h5(file_radix, False)
# Well, well, what is in the box ?
print arr

Чтобы просмотреть содержимое файла h5, загрузите HDFview .

h5 file content

Также не стесняйтесь смотреть на h5py документ .

И последнее, но не менее важное, вы всегда можете задать вопросСообщество HDF5 на форуме HDFgroup (они предоставляют блестящие значки, такие как ТАК, вау !!!)

...