/* * Copyright (c) 2022 Arm Limited. All rights reserved. * SPDX-License-Identifier: Apache-2.0 * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef VWW_PROCESSING_HPP #define VWW_PROCESSING_HPP #include "BaseProcessing.hpp" #include "Model.hpp" #include "Classifier.hpp" namespace arm { namespace app { /** * @brief Pre-processing class for Visual Wake Word use case. * Implements methods declared by BasePreProcess and anything else needed * to populate input tensors ready for inference. */ class VisualWakeWordPreProcess : public BasePreProcess { public: /** * @brief Constructor * @param[in] inputTensor Pointer to the TFLite Micro input Tensor. * @param[in] rgb2Gray Convert image from 3 channel RGB to 1 channel grayscale. **/ explicit VisualWakeWordPreProcess(TfLiteTensor* inputTensor, bool rgb2Gray=true); /** * @brief Should perform pre-processing of 'raw' input image data and load it into * TFLite Micro input tensors ready for inference * @param[in] input Pointer to the data that pre-processing will work on. * @param[in] inputSize Size of the input data. * @return true if successful, false otherwise. **/ bool DoPreProcess(const void* input, size_t inputSize) override; private: TfLiteTensor* m_inputTensor; bool m_rgb2Gray; }; /** * @brief Post-processing class for Visual Wake Word use case. * Implements methods declared by BasePostProcess and anything else needed * to populate result vector. */ class VisualWakeWordPostProcess : public BasePostProcess { private: TfLiteTensor* m_outputTensor; Classifier& m_vwwClassifier; const std::vector& m_labels; std::vector& m_results; public: /** * @brief Constructor * @param[in] outputTensor Pointer to the TFLite Micro output Tensor. * @param[in] classifier Classifier object used to get top N results from classification. * @param[in] model Pointer to the VWW classification Model object. * @param[in] labels Vector of string labels to identify each output of the model. * @param[out] results Vector of classification results to store decoded outputs. **/ VisualWakeWordPostProcess(TfLiteTensor* outputTensor, Classifier& classifier, const std::vector& labels, std::vector& results); /** * @brief Should perform post-processing of the result of inference then * populate classification result data for any later use. * @return true if successful, false otherwise. **/ bool DoPostProcess() override; }; } /* namespace app */ } /* namespace arm */ #endif /* VWW_PROCESSING_HPP */