def read_binary_files_factorized(filename, rootdir='./'): """Read from compressed binary files: 1) Compressed latent features. 2) Number of input points. 3) Positions of each cube. """ print('===== Read binary files =====') file_strings = os.path.join(rootdir, filename + '.strings') file_pointnums = os.path.join(rootdir, filename + '.pointnums') file_cubepos = os.path.join(rootdir, filename + '.cubepos') ply_cubepos = os.path.join(rootdir, filename + '_cubepos.ply') with open(file_strings, 'rb') as f: shape = np.frombuffer(f.read(2 * 5), dtype=np.int16) min_v, max_v = np.frombuffer(f.read(1 * 2), dtype=np.int8) strings = f.read() with open(file_pointnums, 'rb') as f: points_numbers = np.frombuffer(f.read(), dtype=np.uint16) gpcc_decode(file_cubepos, ply_cubepos) cube_positions = load_ply_data(ply_cubepos) return strings, points_numbers, cube_positions, min_v, max_v, shape
def read_binary_files_hyper(filename, rootdir='./'): """Read from compressed binary files: 1) Compressed latent features. 2) Compressed hyperprior. 3) Number of input points. 4) Positions of each cube. """ print('===== Read binary files =====') file_strings = os.path.join(rootdir, filename + '.strings') file_strings_head = os.path.join(rootdir, filename + '.strings_head') file_strings_hyper = os.path.join(rootdir, filename + '.strings_hyper') file_pointnums = os.path.join(rootdir, filename + '.pointnums') file_cubepos = os.path.join(rootdir, filename + '.cubepos') ply_cubepos = os.path.join(rootdir, filename + '_cubepos.ply') with open(file_strings_head, 'rb') as f: y_strings_num = int(np.frombuffer(f.read(1 * 2), dtype=np.int16)) y_max_min_vs = np.frombuffer(f.read(y_strings_num * 1), dtype=np.uint8).astype('int32') y_max_vs = y_max_min_vs // 16 y_min_vs = -(y_max_min_vs % 16) # y_min_vs = np.array(y_min_vs).astype('int32') # y_max_vs = np.array(y_max_vs).astype('int32') y_strings_lens = [] for i in range(y_strings_num): l = np.frombuffer(f.read(1 * 1), dtype=np.uint8) if l == 0: l = int(np.frombuffer(f.read(1 * 2), dtype=np.int16)) y_strings_lens.append(l) y_strings_lens = np.array(y_strings_lens, dtype=np.int32) y_shape = np.frombuffer(f.read(2 * 5), dtype=np.int16) f.close() with open(file_strings, 'rb') as f: y_strings = [] for i, l in enumerate(y_strings_lens): y_strings.append(f.read(int(l))) y_strings = np.array(y_strings) f.close() with open(file_strings_hyper, 'rb') as f: z_shape = np.frombuffer(f.read(2 * 5), dtype=np.int16) z_min_v, z_max_v = np.frombuffer(f.read(1 * 2), dtype=np.int8) z_strings = f.read() with open(file_pointnums, 'rb') as f: points_numbers = np.frombuffer(f.read(), dtype=np.uint16) gpcc_decode(file_cubepos, ply_cubepos) cube_positions = load_ply_data(ply_cubepos) # y_shape = np.array([1, 16, 16, 16, 16]) return y_strings, z_strings, points_numbers, cube_positions, y_min_vs, y_max_vs, y_shape, z_min_v, z_max_v, z_shape