-
Notifications
You must be signed in to change notification settings - Fork 2
/
io_utils.py
89 lines (72 loc) · 2.68 KB
/
io_utils.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# Author: Eduardo Ruiz
# Date: July 2020
from plyfile import PlyData
import pypcd
import h5py
import numpy as np
def load_h5(h5_filename):
f = h5py.File(h5_filename,'r')
data = f['data'][:]
if 'label' in f.keys():
label = f['label'][:]
return data, label
else:
return data, None
def save_as_h5(h5_filename, data, label=None, data_dtype='float32', label_dtype='uint8'):
h5_fout = h5py.File(h5_filename)
h5_fout.create_dataset(
'data', data=data,
compression='gzip', compression_opts=4,
dtype=data_dtype)
if label is not None:
h5_fout.create_dataset(
'label', data=label,
compression='gzip', compression_opts=1,
dtype=label_dtype)
h5_fout.close()
def load_pcd_data_binary(filename):
pc=pypcd.PointCloud.from_path(filename)
xyz = np.empty((pc.points, 3), dtype=np.float)
rgb=np.empty((pc.points, 1), dtype=np.int)
normals=np.empty((pc.points, 3), dtype=np.float)
xyz[:, 0] = pc.pc_data['x']
xyz[:, 1] = pc.pc_data['y']
xyz[:, 2] = pc.pc_data['z']
try:
rgb = pc.pc_data['rgb']
except Exception as e:
error_msg=e
try:
normals[:,0]=pc.pc_data['normal_x']
normals[:,1]=pc.pc_data['normal_y']
normals[:,2]=pc.pc_data['normal_z']
except Exception as e:
error_msg=e
return xyz,rgb,normals
def read_training_sample_point(data_file):
with open(data_file) as f:
content = f.readlines()
# you may also want to remove whitespace characters like `\n` at the end of each line
content = [x.strip() for x in content]
tmp=content[8].split(":")[1]
datapoint=tmp.split(',')
test_point=np.expand_dims(np.asarray([float(x) for x in datapoint]),axis=0)
return test_point
def load_ply_data(filename):
plydata = PlyData.read(filename)
pc = plydata['vertex'].data
pc_array = np.array([[x, y, z] for x,y,z in pc])
return pc_array
def save_point_cloud_data(data, fname, dtypes=None):
if dtypes is None:
dtypes = {'names': ('x', 'y', 'z'), 'formats': ('f4', 'f4', 'f4')}
if (len(dtypes['names']) != len(dtypes['formats']))\
or (len(dtypes['names']) != data.shape[1])\
or (len(dtypes['formats']) != data.shape[1]):
RuntimeError('Inconsistent field names, formats and data')
actual_data_array = np.zeros(data.shape[0], dtype=dtypes)
for j in range(data.shape[1]):
actual_data_array[dtypes['names'][j]] = data[:, j]
new_cloud = pypcd.PointCloud.from_array(actual_data_array)
new_cloud.save_pcd(fname, compression='ascii')
print('Saved {} data points in {}'.format(data.shape, fname))