当前位置: 代码迷 >> 综合 >> 用modelnet40_ply_hdf5_2048数据集制作h5点云数据集(抽取特定类别)
  详细解决方案

用modelnet40_ply_hdf5_2048数据集制作h5点云数据集(抽取特定类别)

热度:99   发布时间:2024-02-11 10:51:21.0

3.1 打开和创建 h5py 文件

新建一个hdf5文件,文件名是tutorial.h5, 写的模式,描述为test file。

f = open_file('tutorial.h5',mode='w',title='test file')

HDF5 文件通常像标准 Python 文件对象一样工作。它们支持 r / w / a 等标准模式,并且在不再使用时应关闭。但是,显然没有“text”与“binary”模式的概念。 

文件名可以是字节字符串或 unicode 字符串。有效mode是:

mode 说明
r 只读,文件必须存在
r+ 读 / 写,文件必须存在
w 创建文件,已经存在的文件会被覆盖掉
w- / x 创建文件,文件如果已经存在则出错
a 打开已经存在的文件进行读 / 写,如果不存在则创建一个新文件读 / 写(默认)

在当前目录下会生成一个 myh5py.hdf5 文件

import os
import sys
import numpy as np
import h5py
BASE_DIR=os.path.dirname(os.path.abspath(__file__))
sys.path.clear()
sys.path.append(BASE_DIR)
print(sys.path)
print(BASE_DIR)label_subclass = (1,2,3,4,5,6,7,8,9)def getDataFiles(list_filename):return [line.rstrip() for line in open(list_filename)]def load_h5(h5_filename):h5f = h5py.File(h5_filename)data = h5f['data'][:]label = h5f['label'][:]normal= h5f['normal'][:]return (data, label , normal)def loadDataFile(filename):return load_h5(filename)# 写入文件
def write_data2h5(file_name, label, h5data):h5f = h5py.File(file_name, 'w')h5f['lables'] = labelh5f['data'] = h5data# h5f.close()# h5f.create_dataset(label, data=h5data)TRAIN_FILES = getDataFiles(os.path.join(BASE_DIR, 'data/modelnet40_ply_hdf5_2048/train_files.txt'))
TEST_FILES = getDataFiles(os.path.join(BASE_DIR, 'data/modelnet40_ply_hdf5_2048/test_files.txt'))filename_train0 = BASE_DIR+ '/data/mydata/train0.h5'  # 创建点云的路径
filename_train1 = BASE_DIR+ '/data/mydata/train1.h5'  # 创建点云的路径
filename_train2 = BASE_DIR+ '/data/mydata/train2.h5'  # 创建点云的路径filename_test0 = BASE_DIR+ '/data/mydata/test0.h5'  # 创建点云的路径
filename_test1 = BASE_DIR+ '/data/mydata/test1.h5'  # 创建点云的路径file_length2train = len(TRAIN_FILES)
file_length2test = len(TEST_FILES)
for fn in range(len(TRAIN_FILES)):current_data, current_label, current_normal = loadDataFile(TRAIN_FILES[fn])current_label = np.squeeze(current_label)current_data = np.concatenate((current_data, current_normal), axis=2)if fn < 2:for j in range(len(current_label)):label = current_label[j]if label in label_subclass:label2sub_class = labeldata2sub_class = current_datawrite_data2h5(filename_train0, label2sub_class, data2sub_class)elif fn < 4:for j in range(len(current_label)):label = current_label[j]if label in label_subclass:label2sub_class = labeldata2sub_class = current_datawrite_data2h5(filename_train1, label2sub_class, data2sub_class)else:for j in range(len(current_label)):label = current_label[j]if label in label_subclass:label2sub_class = labeldata2sub_class = current_datawrite_data2h5(filename_train2, label2sub_class, data2sub_class)for fn in range(len(TEST_FILES)):current_data, current_label, current_normal=loadDataFile(TEST_FILES[fn])current_label=np.squeeze(current_label)current_data=np.concatenate((current_data,current_normal),axis=2)if fn == 0:for j in range(len(current_label)):label = current_label[j]if label in label_subclass:label2sub_class = labeldata2sub_class = current_datawrite_data2h5(filename_test0, label2sub_class, data2sub_class)else:for j in range(len(current_label)):label = current_label[j]if label in label_subclass:label2sub_class = labeldata2sub_class = current_datawrite_data2h5(filename_test1, label2sub_class, data2sub_class)

 

  相关解决方案