ArmNN
 21.05
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 279 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().

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