ArmNN
 21.08
ImageTensorGenerator.cpp File Reference
#include "ImageTensorGenerator.hpp"
#include "../InferenceTestImage.hpp"
#include <armnn/Logging.hpp>
#include <armnn/TypesUtils.hpp>
#include <armnnUtils/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 284 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().

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