How to read infer raw output?

I am trying to run the deepstream-app with a primary-gie as a yolo model and a secondary-gie as a classifier.
The yolo detector works well on the video display, but I can’t find a way to get the secondary-gie inference data in a readable form.
I am using the “infer-raw-output-dir” key in the config file, and receive unreadable bin files in that directory.
How to read these files?

In deepstream_primary_gie_bin.c

static void
write_infer_output_to_file (GstBuffer *buf,
    NvDsInferNetworkInfo *network_info,  NvDsInferLayerInfo *layers_info,
    guint num_layers, guint batch_size, gpointer user_data)
{
  NvDsGieConfig *config = (NvDsGieConfig *) user_data;
  guint i;

  /* "gst_buffer_get_nvstream_meta()" can be called on the GstBuffer to get more
   * information about the buffer.*/

  for (i = 0; i < num_layers; i++) {
    NvDsInferLayerInfo *info = &layers_info[i];
    guint element_size = 0;
    guint j;
    FILE *file;
    gchar file_name[PATH_MAX];
    gchar layer_name[128];

    switch (info->dataType) {
      case FLOAT: element_size = 4; break;
      case HALF: element_size = 2; break;
      case INT32: element_size = 4; break;
      case INT8: element_size = 1; break;
    }

    g_strlcpy (layer_name, info->layerName, 128);
    for (j = 0; layer_name[j] != '

static void
write_infer_output_to_file (GstBuffer *buf,
NvDsInferNetworkInfo *network_info, NvDsInferLayerInfo *layers_info,
guint num_layers, guint batch_size, gpointer user_data)
{
NvDsGieConfig *config = (NvDsGieConfig *) user_data;
guint i;

/* “gst_buffer_get_nvstream_meta()” can be called on the GstBuffer to get more

  • information about the buffer.*/

for (i = 0; i < num_layers; i++) {
NvDsInferLayerInfo *info = &layers_info[i];
guint element_size = 0;
guint j;
FILE *file;
gchar file_name[PATH_MAX];
gchar layer_name[128];

switch (info->dataType) {
  case FLOAT: element_size = 4; break;
  case HALF: element_size = 2; break;
  case INT32: element_size = 4; break;
  case INT8: element_size = 1; break;
}

g_strlcpy (layer_name, info->layerName, 128);
for (j = 0; layer_name[j] != '\0'; j++) {
  layer_name[j] = (layer_name[j] == '/') ? '_' : layer_name[j];
}

g_snprintf (file_name, PATH_MAX,
    "%s/%s_batch%010lu_batchsize%02d.bin",
    config->raw_output_directory, layer_name,
    config->file_write_frame_num, batch_size);
file_name[PATH_MAX -  1] = '\0';

file = fopen (file_name, "w");
if (!file) {
  g_printerr ("Could not open file '%s' for writing:%s\n",
      file_name, strerror(errno));
  continue;
}
fwrite (info->buffer, element_size, info->dims.numElements * batch_size, file);
fclose (file);

}
config->file_write_frame_num++;
}

'; j++) {
      layer_name[j] = (layer_name[j] == '/') ? '_' : layer_name[j];
    }

    g_snprintf (file_name, PATH_MAX,
        "%s/%s_batch%010lu_batchsize%02d.bin",
        config->raw_output_directory, layer_name,
        config->file_write_frame_num, batch_size);
    file_name[PATH_MAX -  1] = '

static void
write_infer_output_to_file (GstBuffer *buf,
NvDsInferNetworkInfo *network_info, NvDsInferLayerInfo *layers_info,
guint num_layers, guint batch_size, gpointer user_data)
{
NvDsGieConfig *config = (NvDsGieConfig *) user_data;
guint i;

/* “gst_buffer_get_nvstream_meta()” can be called on the GstBuffer to get more

  • information about the buffer.*/

for (i = 0; i < num_layers; i++) {
NvDsInferLayerInfo *info = &layers_info[i];
guint element_size = 0;
guint j;
FILE *file;
gchar file_name[PATH_MAX];
gchar layer_name[128];

switch (info->dataType) {
  case FLOAT: element_size = 4; break;
  case HALF: element_size = 2; break;
  case INT32: element_size = 4; break;
  case INT8: element_size = 1; break;
}

g_strlcpy (layer_name, info->layerName, 128);
for (j = 0; layer_name[j] != '\0'; j++) {
  layer_name[j] = (layer_name[j] == '/') ? '_' : layer_name[j];
}

g_snprintf (file_name, PATH_MAX,
    "%s/%s_batch%010lu_batchsize%02d.bin",
    config->raw_output_directory, layer_name,
    config->file_write_frame_num, batch_size);
file_name[PATH_MAX -  1] = '\0';

file = fopen (file_name, "w");
if (!file) {
  g_printerr ("Could not open file '%s' for writing:%s\n",
      file_name, strerror(errno));
  continue;
}
fwrite (info->buffer, element_size, info->dims.numElements * batch_size, file);
fclose (file);

}
config->file_write_frame_num++;
}

';

    file = fopen (file_name, "w");
    if (!file) {
      g_printerr ("Could not open file '%s' for writing:%s\n",
          file_name, strerror(errno));
      continue;
    }
    fwrite (info->buffer, element_size, info->dims.numElements * batch_size, file);
    fclose (file);
  }
  config->file_write_frame_num++;
}

In deepstream_secondary_gie_bin.c

static void
write_infer_output_to_file (GstBuffer *buf,
    NvDsInferNetworkInfo *network_info,  NvDsInferLayerInfo *layers_info,
    guint num_layers, guint batch_size, gpointer user_data)
{
  NvDsGieConfig *config = (NvDsGieConfig *) user_data;
  guint i;

  /* "gst_buffer_get_nvstream_meta()" can be called on the GstBuffer to get more
   * information about the buffer.*/

  for (i = 0; i < num_layers; i++) {
    NvDsInferLayerInfo *info = &layers_info[i];
    guint element_size = 0;
    FILE *file;
    gchar file_name[PATH_MAX];
    gchar layer_name[128];
    guint j;

    switch (info->dataType) {
      case FLOAT: element_size = 4; break;
      case HALF: element_size = 2; break;
      case INT32: element_size = 4; break;
      case INT8: element_size = 1; break;
    }

    g_strlcpy (layer_name, info->layerName, 128);
    for (j = 0; layer_name[j] != '

static void
write_infer_output_to_file (GstBuffer *buf,
NvDsInferNetworkInfo *network_info, NvDsInferLayerInfo *layers_info,
guint num_layers, guint batch_size, gpointer user_data)
{
NvDsGieConfig *config = (NvDsGieConfig *) user_data;
guint i;

/* “gst_buffer_get_nvstream_meta()” can be called on the GstBuffer to get more

  • information about the buffer.*/

for (i = 0; i < num_layers; i++) {
NvDsInferLayerInfo *info = &layers_info[i];
guint element_size = 0;
FILE *file;
gchar file_name[PATH_MAX];
gchar layer_name[128];
guint j;

switch (info->dataType) {
  case FLOAT: element_size = 4; break;
  case HALF: element_size = 2; break;
  case INT32: element_size = 4; break;
  case INT8: element_size = 1; break;
}

g_strlcpy (layer_name, info->layerName, 128);
for (j = 0; layer_name[j] != '\0'; j++) {
  layer_name[j] = (layer_name[j] == '/') ? '_' : layer_name[j];
}

g_snprintf (file_name, PATH_MAX,
    "%s/%s_batch%010lu_batchsize%02d.bin",
    config->raw_output_directory, layer_name,
    config->file_write_frame_num, batch_size);
file_name[PATH_MAX - 1] = '\0';

file = fopen (file_name, "w");
if (!file) {
  g_printerr ("Could not open file '%s' for writing:%s\n",
      file_name, strerror(errno));
  continue;
}
fwrite (info->buffer, element_size, info->dims.numElements * batch_size, file);
fclose (file);

}
config->file_write_frame_num++;
}

'; j++) {
      layer_name[j] = (layer_name[j] == '/') ? '_' : layer_name[j];
    }

    g_snprintf (file_name, PATH_MAX,
        "%s/%s_batch%010lu_batchsize%02d.bin",
        config->raw_output_directory, layer_name,
        config->file_write_frame_num, batch_size);
    file_name[PATH_MAX - 1] = '

static void
write_infer_output_to_file (GstBuffer *buf,
NvDsInferNetworkInfo *network_info, NvDsInferLayerInfo *layers_info,
guint num_layers, guint batch_size, gpointer user_data)
{
NvDsGieConfig *config = (NvDsGieConfig *) user_data;
guint i;

/* “gst_buffer_get_nvstream_meta()” can be called on the GstBuffer to get more

  • information about the buffer.*/

for (i = 0; i < num_layers; i++) {
NvDsInferLayerInfo *info = &layers_info[i];
guint element_size = 0;
FILE *file;
gchar file_name[PATH_MAX];
gchar layer_name[128];
guint j;

switch (info->dataType) {
  case FLOAT: element_size = 4; break;
  case HALF: element_size = 2; break;
  case INT32: element_size = 4; break;
  case INT8: element_size = 1; break;
}

g_strlcpy (layer_name, info->layerName, 128);
for (j = 0; layer_name[j] != '\0'; j++) {
  layer_name[j] = (layer_name[j] == '/') ? '_' : layer_name[j];
}

g_snprintf (file_name, PATH_MAX,
    "%s/%s_batch%010lu_batchsize%02d.bin",
    config->raw_output_directory, layer_name,
    config->file_write_frame_num, batch_size);
file_name[PATH_MAX - 1] = '\0';

file = fopen (file_name, "w");
if (!file) {
  g_printerr ("Could not open file '%s' for writing:%s\n",
      file_name, strerror(errno));
  continue;
}
fwrite (info->buffer, element_size, info->dims.numElements * batch_size, file);
fclose (file);

}
config->file_write_frame_num++;
}

';

    file = fopen (file_name, "w");
    if (!file) {
      g_printerr ("Could not open file '%s' for writing:%s\n",
          file_name, strerror(errno));
      continue;
    }
    fwrite (info->buffer, element_size, info->dims.numElements * batch_size, file);
    fclose (file);
  }
  config->file_write_frame_num++;
}

NvDsInferLayerInfo:

typedef struct
{
  /** Data type of the layer. */
  NvDsInferDataType dataType;
  /** Dimensions of the layer. */
  NvDsInferDims dims;
  /** TensorRT binding index of the layer. */
  int bindingIndex;
  /** Name of the layer. */
  const char* layerName;
  /** Pointer to the buffer for the layer data. */
  void *buffer;
} NvDsInferLayerInfo;