ArmNN
 21.11
ImageTensorGenerator.cpp File Reference
#include "ImageTensorGenerator.hpp"
#include "../InferenceTestImage.hpp"
#include <armnn/Logging.hpp>
#include <armnn/TypesUtils.hpp>
#include <armnnUtils/Filesystem.hpp>
#include <cxxopts/cxxopts.hpp>
#include <algorithm>
#include <fstream>
#include <iostream>
#include <string>

Go to the source code of this file.

Functions

int main (int argc, char *argv[])
 

Function Documentation

◆ main()

int main ( int  argc,
char *  argv[] 
)

Definition at line 283 of file ImageTensorGenerator.cpp.

References ARMNN_LOG, armnn::Float32, GetNormalizationParameters(), PrepareImageTensor< float >(), PrepareImageTensor< int >(), PrepareImageTensor< int8_t >(), PrepareImageTensor< uint8_t >(), armnn::QAsymmS8, armnn::QAsymmU8, armnn::Signed32, Exception::what(), and WriteImageTensorImpl().

284 {
285  CommandLineProcessor cmdline;
286  if (!cmdline.ProcessCommandLine(argc, argv))
287  {
288  return -1;
289  }
290  const std::string imagePath(cmdline.GetInputFileName());
291  const std::string outputPath(cmdline.GetOutputFileName());
292  const SupportedFrontend& modelFormat(cmdline.GetModelFormat());
293  const armnn::DataType outputType(cmdline.GetOutputType());
294  const unsigned int newWidth = cmdline.GetNewWidth();
295  const unsigned int newHeight = cmdline.GetNewHeight();
296  const unsigned int batchSize = 1;
297  const armnn::DataLayout outputLayout(cmdline.GetLayout());
298 
299  std::vector<armnnUtils::TContainer> imageDataContainers;
300  const NormalizationParameters& normParams = GetNormalizationParameters(modelFormat, outputType);
301  try
302  {
303  switch (outputType)
304  {
306  imageDataContainers.push_back(PrepareImageTensor<int>(
307  imagePath, newWidth, newHeight, normParams, batchSize, outputLayout));
308  break;
310  imageDataContainers.push_back(PrepareImageTensor<uint8_t>(
311  imagePath, newWidth, newHeight, normParams, batchSize, outputLayout));
312  break;
314  imageDataContainers.push_back(PrepareImageTensor<int8_t>(
315  imagePath, newWidth, newHeight, normParams, batchSize, outputLayout));
316  break;
318  default:
319  imageDataContainers.push_back(PrepareImageTensor<float>(
320  imagePath, newWidth, newHeight, normParams, batchSize, outputLayout));
321  break;
322  }
323  }
324  catch (const InferenceTestImageException& e)
325  {
326  ARMNN_LOG(fatal) << "Failed to load image file " << imagePath << " with error: " << e.what();
327  return -1;
328  }
329 
330  std::ofstream imageTensorFile;
331  imageTensorFile.open(outputPath, std::ofstream::out);
332  if (imageTensorFile.is_open())
333  {
334  mapbox::util::apply_visitor(
335  [&imageTensorFile](auto&& imageData){ WriteImageTensorImpl(imageData,imageTensorFile); },
336  imageDataContainers[0]
337  );
338 
339  if (!imageTensorFile)
340  {
341  ARMNN_LOG(fatal) << "Failed to write to output file" << outputPath;
342  imageTensorFile.close();
343  return -1;
344  }
345  imageTensorFile.close();
346  }
347  else
348  {
349  ARMNN_LOG(fatal) << "Failed to open output file" << outputPath;
350  return -1;
351  }
352 
353  return 0;
354 }
DataLayout
Definition: Types.hpp:49
NormalizationParameters GetNormalizationParameters(const SupportedFrontend &modelFormat, const armnn::DataType &outputType)
Get normalization parameters.
virtual const char * what() const noexcept override
Definition: Exceptions.cpp:32
#define ARMNN_LOG(severity)
Definition: Logging.hpp:202
void WriteImageTensorImpl(const std::vector< ElemType > &imageData, std::ofstream &imageTensorFile)
Write image tensor to ofstream.
std::vector< uint8_t > PrepareImageTensor< uint8_t >(const std::string &imagePath, unsigned int newWidth, unsigned int newHeight, const NormalizationParameters &normParams, unsigned int batchSize, const armnn::DataLayout &outputLayout)
DataType
Definition: Types.hpp:35
std::vector< int > PrepareImageTensor< int >(const std::string &imagePath, unsigned int newWidth, unsigned int newHeight, const NormalizationParameters &normParams, unsigned int batchSize, const armnn::DataLayout &outputLayout)
std::vector< int8_t > PrepareImageTensor< int8_t >(const std::string &imagePath, unsigned int newWidth, unsigned int newHeight, const NormalizationParameters &normParams, unsigned int batchSize, const armnn::DataLayout &outputLayout)
std::vector< float > PrepareImageTensor< float >(const std::string &imagePath, unsigned int newWidth, unsigned int newHeight, const NormalizationParameters &normParams, unsigned int batchSize, const armnn::DataLayout &outputLayout)