ArmNN
 21.02
ImageTensorGenerator.cpp File Reference
#include "ImageTensorGenerator.hpp"
#include "../InferenceTestImage.hpp"
#include <armnn/Logging.hpp>
#include <armnn/TypesUtils.hpp>
#include <Filesystem.hpp>
#include <mapbox/variant.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 287 of file ImageTensorGenerator.cpp.

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

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