Skip to content

roboflow/TFRecords

 
 

Repository files navigation

(forked to build on macOS, compile as commonjs, and read from the public npm repository)

TFRecords (.tfrecord) file format Builder and Reader for Browser and Node.js

Build Status

The TFRecords format is briefly documented here, and described as the recommended format for feeding data into TenosorFlow here and here.

This library facilitates producing data in the TFRecord format directly in node.js. The library is not "official" - it is not part of TensorFlow, and it is not maintained by the TensorFlow team.

An existing TFRecord Library and NPM Package (https://www.npmjs.com/package/tfrecord) already provide TFRecord API support for the Node.js platform. This Library provide a TFrecords Javascript API solution that support both Browser and Node.js runtime.

Usage - Build a TFRecords Buffer

The example below covers recommended API usage for generating a TFRecords buffer.

// Generate TFRecord
const builder = new TFRecordsBuilder();

builder.addFeature("image/width", FeatureType.Int64, 1024);
builder.addFeature("image/height", FeatureType.Int64, 800);
builder.addFeature("image/filename", FeatureType.String, "name");
builder.addFeature("image/encoded", FeatureType.Binary, imageBuffer);
builder.addFeature("image/format", FeatureType.String, "jpeg");
builder.addArrayFeature("image/object/bbox/xmin", FeatureType.Float, 0.0);
builder.addArrayFeature("image/object/bbox/ymin", FeatureType.Float, 0.0);
builder.addArrayFeature("image/object/bbox/xmax", FeatureType.Float, 1.0);
builder.addArrayFeature("image/object/bbox/ymax", FeatureType.Float, 1.0);
builder.addArrayFeature("image/object/class/text", FeatureType.String, "tag1");
builder.addArrayFeature("image/object/class/label", FeatureType.Int64, 0);

// Build single TFRecord
const tfrecord = builder.build()

// Get TFRecords buffer
const tfRecords = TFRecordsBuilder.buildTFRecords([tfrecord]);

Usage - Read a TFRecords Buffer

The example below covers recommended API usage for read a TFRecords buffer.

const reader = new TFRecordsReader(tfrecords);

const width = reader.getFeature(0, "image/width", FeatureType.Int64) as number;
const height = reader.getFeature(0, "image/height", FeatureType.Int64) as number;
const xminArray = reader.getArrayFeature(0, "image/object/bbox/xmin", FeatureType.Float) as number[];
const yminArray = reader.getArrayFeature(0, "image/object/bbox/ymin", FeatureType.Float) as number[];
const xmaxArray = reader.getArrayFeature(0, "image/object/bbox/xmax", FeatureType.Float) as number[];
const ymaxArray = reader.getArrayFeature(0, "image/object/bbox/ymax", FeatureType.Float) as number[];
const textArray = reader.getArrayFeature(0, "image/object/class/text", FeatureType.String) as string[];