// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #pragma once #include "ClassifierTestCaseData.hpp" #include #include #include #include ///Tf requires RGB images, normalized in range [0, 1] and resized using Bilinear algorithm using ImageSet = std::pair; template class ImagePreprocessor { public: using DataType = TDataType; using TTestCaseData = ClassifierTestCaseData; enum DataFormat { NHWC, NCHW }; explicit ImagePreprocessor(const std::string& binaryFileDirectory, unsigned int width, unsigned int height, const std::vector& imageSet, float scale=255.0f, const std::array mean={{0, 0, 0}}, const std::array stddev={{1, 1, 1}}, DataFormat dataFormat=DataFormat::NHWC, unsigned int batchSize=1) : m_BinaryDirectory(binaryFileDirectory) , m_Height(height) , m_Width(width) , m_BatchSize(batchSize) , m_Scale(scale) , m_ImageSet(imageSet) , m_Mean(mean) , m_Stddev(stddev) , m_DataFormat(dataFormat) { } std::unique_ptr GetTestCaseData(unsigned int testCaseId); private: unsigned int GetNumImageElements() const { return 3 * m_Width * m_Height; } unsigned int GetNumImageBytes() const { return sizeof(DataType) * GetNumImageElements(); } unsigned int GetLabelAndResizedImageAsFloat(unsigned int testCaseId, std::vector & result); std::string m_BinaryDirectory; unsigned int m_Height; unsigned int m_Width; unsigned int m_BatchSize; // Quantization parameters float m_Scale; const std::vector m_ImageSet; const std::array m_Mean; const std::array m_Stddev; DataFormat m_DataFormat; };