summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRichard Burton <richard.burton@arm.com>2022-05-05 17:23:43 +0100
committerRichard Burton <richard.burton@arm.com>2022-05-05 17:23:43 +0100
commitfcca863bafd5f33522bc14c23dde4540e264ec94 (patch)
tree8d15ee9000ef9fd0fa21314650900723cefc8b36
parent4e002791bc6781b549c6951cfe44f918289d7e82 (diff)
downloadml-embedded-evaluation-kit-fcca863bafd5f33522bc14c23dde4540e264ec94.tar.gz
MLECO-3171: Add flag to make VWW grayscale conversion optional
Signed-off-by: Richard Burton <richard.burton@arm.com> Change-Id: I4ae40a60efc0c09f27b02f739769238e95bb112c
-rw-r--r--source/use_case/vww/include/VisualWakeWordProcessing.hpp4
-rw-r--r--source/use_case/vww/src/VisualWakeWordProcessing.cc18
2 files changed, 14 insertions, 8 deletions
diff --git a/source/use_case/vww/include/VisualWakeWordProcessing.hpp b/source/use_case/vww/include/VisualWakeWordProcessing.hpp
index bef161f..f9f9d72 100644
--- a/source/use_case/vww/include/VisualWakeWordProcessing.hpp
+++ b/source/use_case/vww/include/VisualWakeWordProcessing.hpp
@@ -35,8 +35,9 @@ namespace app {
/**
* @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);
+ explicit VisualWakeWordPreProcess(TfLiteTensor* inputTensor, bool rgb2Gray=true);
/**
* @brief Should perform pre-processing of 'raw' input image data and load it into
@@ -49,6 +50,7 @@ namespace app {
private:
TfLiteTensor* m_inputTensor;
+ bool m_rgb2Gray;
};
/**
diff --git a/source/use_case/vww/src/VisualWakeWordProcessing.cc b/source/use_case/vww/src/VisualWakeWordProcessing.cc
index a9863c0..4ae8a54 100644
--- a/source/use_case/vww/src/VisualWakeWordProcessing.cc
+++ b/source/use_case/vww/src/VisualWakeWordProcessing.cc
@@ -15,6 +15,7 @@
* limitations under the License.
*/
#include "VisualWakeWordProcessing.hpp"
+
#include "ImageUtils.hpp"
#include "VisualWakeWordModel.hpp"
#include "log_macros.h"
@@ -22,8 +23,9 @@
namespace arm {
namespace app {
- VisualWakeWordPreProcess::VisualWakeWordPreProcess(TfLiteTensor* inputTensor)
- :m_inputTensor{inputTensor}
+ VisualWakeWordPreProcess::VisualWakeWordPreProcess(TfLiteTensor* inputTensor, bool rgb2Gray)
+ :m_inputTensor{inputTensor},
+ m_rgb2Gray{rgb2Gray}
{}
bool VisualWakeWordPreProcess::DoPreProcess(const void* data, size_t inputSize)
@@ -34,17 +36,19 @@ namespace app {
auto input = static_cast<const uint8_t*>(data);
- auto unsignedDstPtr = static_cast<uint8_t*>(this->m_inputTensor->data.data);
+ uint8_t* unsignedDstPtr = this->m_inputTensor->data.uint8;
- /* VWW model has one channel input => Convert image to grayscale here.
- * We expect images to always be RGB. */
- image::RgbToGrayscale(input, unsignedDstPtr, inputSize);
+ if (this->m_rgb2Gray) {
+ image::RgbToGrayscale(input, unsignedDstPtr, inputSize);
+ } else {
+ std::memcpy(unsignedDstPtr, input, inputSize);
+ }
/* VWW model pre-processing is image conversion from uint8 to [0,1] float values,
* then quantize them with input quantization info. */
QuantParams inQuantParams = GetTensorQuantParams(this->m_inputTensor);
- auto signedDstPtr = static_cast<int8_t*>(this->m_inputTensor->data.data);
+ int8_t* signedDstPtr = this->m_inputTensor->data.int8;
for (size_t i = 0; i < this->m_inputTensor->bytes; i++) {
auto i_data_int8 = static_cast<int8_t>(
((static_cast<float>(unsignedDstPtr[i]) / 255.0f) / inQuantParams.scale) + inQuantParams.offset