ArmNN
 20.08
ImageTensorGenerator.cpp File Reference
#include "ImageTensorGenerator.hpp"
#include "../InferenceTestImage.hpp"
#include <armnn/Logging.hpp>
#include <armnn/TypesUtils.hpp>
#include <Filesystem.hpp>
#include <boost/program_options.hpp>
#include <boost/variant.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 246 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().

247 {
248  CommandLineProcessor cmdline;
249  if (!cmdline.ProcessCommandLine(argc, argv))
250  {
251  return -1;
252  }
253  const std::string imagePath(cmdline.GetInputFileName());
254  const std::string outputPath(cmdline.GetOutputFileName());
255  const SupportedFrontend& modelFormat(cmdline.GetModelFormat());
256  const armnn::DataType outputType(cmdline.GetOutputType());
257  const unsigned int newWidth = cmdline.GetNewWidth();
258  const unsigned int newHeight = cmdline.GetNewHeight();
259  const unsigned int batchSize = 1;
260  const armnn::DataLayout outputLayout(cmdline.GetLayout());
261 
262  using TContainer = boost::variant<std::vector<float>, std::vector<int>, std::vector<uint8_t>>;
263  std::vector<TContainer> imageDataContainers;
264  const NormalizationParameters& normParams = GetNormalizationParameters(modelFormat, outputType);
265  try
266  {
267  switch (outputType)
268  {
270  imageDataContainers.push_back(PrepareImageTensor<int>(
271  imagePath, newWidth, newHeight, normParams, batchSize, outputLayout));
272  break;
274  imageDataContainers.push_back(PrepareImageTensor<uint8_t>(
275  imagePath, newWidth, newHeight, normParams, batchSize, outputLayout));
276  break;
278  default:
279  imageDataContainers.push_back(PrepareImageTensor<float>(
280  imagePath, newWidth, newHeight, normParams, batchSize, outputLayout));
281  break;
282  }
283  }
284  catch (const InferenceTestImageException& e)
285  {
286  ARMNN_LOG(fatal) << "Failed to load image file " << imagePath << " with error: " << e.what();
287  return -1;
288  }
289 
290  std::ofstream imageTensorFile;
291  imageTensorFile.open(outputPath, std::ofstream::out);
292  if (imageTensorFile.is_open())
293  {
294  boost::apply_visitor([&imageTensorFile](auto&& imageData) { WriteImageTensorImpl(imageData, imageTensorFile); },
295  imageDataContainers[0]);
296  if (!imageTensorFile)
297  {
298  ARMNN_LOG(fatal) << "Failed to write to output file" << outputPath;
299  imageTensorFile.close();
300  return -1;
301  }
302  imageTensorFile.close();
303  }
304  else
305  {
306  ARMNN_LOG(fatal) << "Failed to open output file" << outputPath;
307  return -1;
308  }
309 
310  return 0;
311 }
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:163
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)
boost::variant< std::vector< float >, std::vector< int >, std::vector< unsigned char > > TContainer
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)