本文参考: 用modelnet40_ply_hdf5_2048数据集制作txt点云数据集(抽取特定类别)_好好学习嘻嘻的博客-CSDN博客

最近要做modelnet10的分类问题,发现网上没有modelnet10的hd5文件资源,自己使用off文件又不会制作,那就使用modelnet40_ply_hdf5_2048制作我们的modelnet10_ply_hdf5_2048文件吧。只看到有人使用modelnet40_ply_hdf5_2048制作了每个点云的txt文档,具体如何制作hd5文件没有其他的资料。本文简单的制作了一下,如有不对的地方,欢迎指正。

modelnet40_ply_hdf5_2048数据集下载地址为:https://shapenet.cs.stanford.edu/media/modelnet40_ply_hdf5_2048.zip

打开和创建 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)# label2sub_class = (1, 2, 3, 4, 5, 6, 7, 8, 9)
label2sub_class = (2, 4, 8, 12, 14, 19, 28, 30, 33, 38)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, normaldef loadDataFile(filename):return load_h5(filename)# 写入文件
def write_data2h5(file_name, label, h5data, h5normal):h5f = h5py.File(file_name, 'w')h5f['label'] = labelh5f['data'] = h5datah5f['normal'] = h5normalh5f.close()# h5f.create_dataset(label, data=h5data)# 由于 train_files 的路径设定为 .../data/modelnet40_ply_hdf5_2048/...',在这里我们不做修改
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'))# 本人的存储路径,modelnet40_ply_hdf5_2048有5个train文件,在这里也是5个。两个test文件,本人如是
# ...//data/mydata/...为本人存放数据的路径
filename_train0 = BASE_DIR + '/data/mydata/ply_data_train0.h5'  # 创建点云的路径
filename_train1 = BASE_DIR + '/data/mydata/ply_data_train1.h5'  # 创建点云的路径
filename_train2 = BASE_DIR + '/data/mydata/ply_data_train2.h5'  # 创建点云的路径
filename_train3 = BASE_DIR + '/data/mydata/ply_data_train3.h5'  # 创建点云的路径
filename_train4 = BASE_DIR + '/data/mydata/ply_data_train4.h5'  # 创建点云的路径filename_test0 = BASE_DIR + '/data/mydata/ply_data_test0.h5'  # 创建点云的路径
filename_test1 = BASE_DIR + '/data/mydata/ply_data_test1.h5'  # 创建点云的路径file_length2train = len(TRAIN_FILES)
file_length2test = len(TEST_FILES)label_list2sub_class = []
data_list2sub_class = []
normal_list2sub_class = []
for fn in range(len(TRAIN_FILES)):current_data, current_label, current_normal = loadDataFile(TRAIN_FILES[fn])current_label = np.squeeze(current_label)label_length = len(current_label)if fn == 0:for j in range(label_length):label = current_label[j]if label in label2sub_class:data = current_data[j]normal = current_normal[j]label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])write_data2h5(filename_train0, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()elif fn == 1:for j in range(label_length):label = current_label[j]if label in label2sub_class:label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])write_data2h5(filename_train1, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()elif fn == 2:for j in range(label_length):label = current_label[j]if label in label2sub_class:label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])write_data2h5(filename_train2, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()elif fn == 3:for j in range(label_length):label = current_label[j]if label in label2sub_class:label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])write_data2h5(filename_train3, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()elif fn == 4:for j in range(label_length):label = current_label[j]if label in label2sub_class:label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])write_data2h5(filename_train4, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()for fn in range(len(TEST_FILES)):current_data, current_label, current_normal=loadDataFile(TEST_FILES[fn])current_label = np.squeeze(current_label)label_length2test = len(current_label)if fn == 0:for j in range(label_length2test):label = current_label[j]if label in label2sub_class:label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])write_data2h5(filename_test0, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()else:for j in range(label_length2test):label = current_label[j]if label in label2sub_class:label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])write_data2h5(filename_test1, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()

上面的代码比较冗长,low了点,本人就不删了,便于理解,下面为简洁的。

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)# label2sub_class = (1, 2, 3, 4, 5, 6, 7, 8, 9)
label2sub_class = (2, 4, 8, 12, 14, 19, 28, 30, 33, 38)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, normaldef loadDataFile(filename):return load_h5(filename)# 写入文件
def write_data2h5(file_name, label, h5data, h5normal):h5f = h5py.File(file_name, 'w')h5f['label'] = labelh5f['data'] = h5datah5f['normal'] = h5normalh5f.close()# h5f.create_dataset(label, data=h5data)# 由于 train_files 的路径设定为 .../data/modelnet40_ply_hdf5_2048/...',在这里我们不做修改
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'))# 本人的存储路径,modelnet40_ply_hdf5_2048有5个train文件,在这里也是5个。两个test文件,本人如是
# ...//data/mydata/...为本人存放数据的路径
filename_train0 = BASE_DIR + '/data/mydata/ply_data_train0.h5'  # 创建点云的路径
filename_train1 = BASE_DIR + '/data/mydata/ply_data_train1.h5'  # 创建点云的路径
filename_train2 = BASE_DIR + '/data/mydata/ply_data_train2.h5'  # 创建点云的路径
filename_train3 = BASE_DIR + '/data/mydata/ply_data_train3.h5'  # 创建点云的路径
filename_train4 = BASE_DIR + '/data/mydata/ply_data_train4.h5'  # 创建点云的路径filename_test0 = BASE_DIR + '/data/mydata/ply_data_test0.h5'  # 创建点云的路径
filename_test1 = BASE_DIR + '/data/mydata/ply_data_test1.h5'  # 创建点云的路径file_length2train = len(TRAIN_FILES)
file_length2test = len(TEST_FILES)label_list2sub_class = []
data_list2sub_class = []
normal_list2sub_class = []
for fn in range(len(TRAIN_FILES)):current_data, current_label, current_normal = loadDataFile(TRAIN_FILES[fn])current_label = np.squeeze(current_label)label_length = len(current_label)for j in range(label_length):label = current_label[j]if label in label2sub_class:data = current_data[j]normal = current_normal[j]label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])if fn == 0:write_data2h5(filename_train0, label_list2sub_class, data_list2sub_class, normal_list2sub_class)elif fn == 1:write_data2h5(filename_train1, label_list2sub_class, data_list2sub_class, normal_list2sub_class)elif fn == 2:write_data2h5(filename_train2, label_list2sub_class, data_list2sub_class, normal_list2sub_class)elif fn == 3:write_data2h5(filename_train3, label_list2sub_class, data_list2sub_class, normal_list2sub_class)elif fn == 4:write_data2h5(filename_train4, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()for fn in range(len(TEST_FILES)):current_data, current_label, current_normal=loadDataFile(TEST_FILES[fn])current_label = np.squeeze(current_label)label_length2test = len(current_label)for j in range(label_length2test):label = current_label[j]if label in label2sub_class:label_list2sub_class.append(current_label[j])data_list2sub_class.append(current_data[j])normal_list2sub_class.append(current_normal[j])if fn == 0:write_data2h5(filename_test0, label_list2sub_class, data_list2sub_class, normal_list2sub_class)else:write_data2h5(filename_test1, label_list2sub_class, data_list2sub_class, normal_list2sub_class)label_list2sub_class.clear()data_list2sub_class.clear()normal_list2sub_class.clear()

抽取modelnet40_ply_hdf5_2048数据集的子类集制作h5点云相关推荐

  1. 数据集划分——训练集、测试集、验证集按照7:1:2

    数据集划分--训练集.测试集.验证集按照7:1:2 前面我对乳腺超声图像数据库进行数据增强,得到: 然后对数据集进行划分,按照训练集.测试集.验证集7:1:2的比例. 代码: import os im ...

  2. 【干货】超强整理19个辅助制作H5的工具/网站

    本期分享从文案策划到交互设计共包含19个工具/网站,把控你的H5制作. 关于H5制作流程 笔者接触的H5制作辅助制作工作基本构成分为文案策划.设计交流学习.制图.视频编辑与剪辑.原型.H5动效/动画制 ...

  3. 十折交叉验证10-fold cross validation, 数据集划分 训练集 验证集 测试集

    机器学习 数据挖掘 数据集划分 训练集 验证集 测试集 Q:如何将数据集划分为测试数据集和训练数据集? A:three ways: 1.像sklearn一样,提供一个将数据集切分成训练集和测试集的函数 ...

  4. Python计算训练数据集(测试集)中某个分类变量阴性(阳性)标签样本的不同水平(level)或者分类值的统计个数以及比例

    Python计算训练数据集(测试集)中某个分类变量阴性(阳性)标签样本的不同水平(level)或者分类值的统计个数以及比例 目录

  5. MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比

    MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比 目录 输出结果 实现代码 输出结果 实现代码 load iris_data.mat P_train ...

  6. DL之NN/Average_Darkness/SVM:手写数字图片识别(本地数据集50000训练集+数据集加4倍)比较3种算法Average_Darkness、SVM、NN各自的准确率

    DL之NN/Average_Darkness/SVM:手写数字图片识别(本地数据集50000训练集+数据集加4倍)比较3种算法Average_Darkness.SVM.NN各自的准确率 目录 数据集下 ...

  7. 一款可视化的在线制作H5

    一款可视化的在线制作H5 官方网站: http://www.iii66.cn 制作H5网址: http://www.iii66.cn/love/page/index 包括对图片,文字,图形,视频,声音 ...

  8. iris数据_MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比...

    MAT之ELM:ELM实现鸢尾花(iris数据集)种类测试集预测识别正确率(better)结果对比 目录 输出结果 实现代码 输出结果 ​ 实现代码 load iris_data.mat P_trai ...

  9. h5课件制作_PPT新功能!竟然还能用来制作H5

    原标题:PPT新功能!竟然还能用来制作H5 最近几年随着移动端的快速发展,我们获取信息的途径更加便捷了,我们几乎每天都会刷微博.看朋友圈.而在众多的信息传递中,H5页面成了最受大众欢迎的形式. 所谓的 ...

最新文章

  1. SQL Server自定义字符串分割函数——Split
  2. keepalived热备 keepalived+LVS Haproxy
  3. ML之回归预测之Lasso:利用Lasso算法对红酒品质wine数据集实现红酒口感评分预测(实数值评分预测)
  4. 不能导入android项目备注
  5. Redis基础知识之————如何处理客户端连接
  6. 曝光:一位来自微软公司的粉丝 写给我的信
  7. adb查看安卓设备系统Android版本
  8. 安装pypcap = 安装flex:the fast lexical analyser + 安装libpcap-1.7.4
  9. java 断点续传 开源_java断点续传后台代码
  10. windows 打印机 print spooler 无法启动 错误1068 的问题
  11. 测试工程师职业素养:懂得拒绝无效工作
  12. hbase 预写日志_HDInsight HBase 加速写入现已正式发布
  13. 谷歌LaMDA|工业级端到端预训练对话模型
  14. java时间格式大全_Java时间格式转换大全
  15. 已知二叉树的后序和中序遍历结果 求前序结果
  16. confluent(Confluent Cloud)
  17. 如何做好企业绩效管理?
  18. pythonpath环境变量pth_.pth 文件扩展python环境路径
  19. 记录一次GeoTIFF文件二进制源码阅读
  20. 公共WiFi到底该不该连?

热门文章

  1. vue引入图片的方式
  2. 数制转换c语言 1a 26,C语言数制转换
  3. 需要administrator权限才能删除文件的处理方法
  4. 视频教程:Java常见面试题目深度解析!
  5. go语言视频教程_ go语言入门视频教程_go语言实战视频教程
  6. qq群排名如何引流?QQ群排名引流方法,QQ群排名如何做?
  7. 《Charles配置教程之Mac》
  8. Anker 拓展坞连接网线经常断网问题
  9. vc 鲜为人知的 __if_exists
  10. 什么是 数据,数据库,数据库管理系统,数据库系统?