Create TensorFlow Dataset with custom file format

I am trying to create a tf.data.Dataset, where filenames are mapped to Depth images. My images are saved as raw binary, 320*240*4 bytes per file. Images are 320x240 pixels, with 4 bytes representing a pixel.

I cannot figure out how to create a parsing function that will take a tf.Tensor filename, and return a (240, 320) tf.Tensor containing my image.

Here is what I've tried.

import tensorflow as tf
import numpy as np
import struct
import math
from os import listdir

class Dataset:
def init(self):
filenames = [“./depthframes/” + f for f in listdir(“./depthframes/”)]

    self._dataset = tf.data.Dataset.from_tensor_slices(filenames).map(Dataset._parse)

@staticmethod
def _parse(filename):
    img = DepthImage(filename)
    return img.frame

class DepthImage:
def init(self, path):
self.rows, self.cols = 240, 320
self.f = open(path, ‘rb’)
self.frame = []
self.get_frame()

def _get_frame(self):
    for row in range(self.rows):
        tmp_row = []
        for col in range(self.cols):
            tmp_row.append([struct.unpack('i', self.f.read(4))[0], ])
        tmp_row = [[0, ] if math.isnan(i[0]) else list(map(int, i)) for i in tmp_row]
        self.frame.append(tmp_row)

def get_frame(self):
    self._get_frame()
    self.frame = tf.convert_to_tensor(np.array(self.frame).reshape(240, 320))

if name == “main”:
Dataset()

My error is as follows:

File “C:/Users/gcper/Code/STEM/msrdailyact3d.py”, line 23, in init
self.f = open(path, ‘rb’)
TypeError: expected str, bytes or os.PathLike object, not Tensor


#python #numpy #tensorflow #image

5 Likes43.70 GEEK