// // Copyright © 2023 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include #include #include #include #include int main() { std::unique_ptr model; model = tflite::FlatBufferModel::BuildFromFile("./simple_conv2d_1_op.tflite"); if (!model) { std::cout << "Failed to load TfLite model from: ./simple_conv2d_1_op.tflite" << std::endl; return -1; } std::unique_ptr m_TfLiteInterpreter; m_TfLiteInterpreter = std::make_unique(); tflite::ops::builtin::BuiltinOpResolver resolver; tflite::InterpreterBuilder builder(*model, resolver); if (builder(&m_TfLiteInterpreter) != kTfLiteOk) { std::cout << "Error loading the model into the TfLiteInterpreter." << std::endl; return -1; } // Use default settings until options have been enabled flatbuffers::FlatBufferBuilder flatBufferBuilder; tflite::TFLiteSettingsBuilder tfliteSettingsBuilder(flatBufferBuilder); flatbuffers::Offset tfliteSettings = tfliteSettingsBuilder.Finish(); flatBufferBuilder.Finish(tfliteSettings); const tflite::TFLiteSettings* settings = flatbuffers::GetRoot(flatBufferBuilder.GetBufferPointer()); std::unique_ptr delegatePlugIn = tflite::delegates::DelegatePluginRegistry::CreateByName("armnn_delegate", *settings); // Create Armnn Opaque Delegate from Armnn Delegate Plugin tflite::delegates::TfLiteDelegatePtr armnnDelegate = delegatePlugIn->Create(); // Add Delegate to the builder builder.AddDelegate(armnnDelegate.get()); if (builder(&m_TfLiteInterpreter) != kTfLiteOk) { std::cout << "Unable to add the Arm NN delegate to the TfLite runtime." << std::endl; return -1; } if (m_TfLiteInterpreter->AllocateTensors() != kTfLiteOk) { std::cout << "Failed to allocate tensors in the TfLiteInterpreter." << std::endl; return -1; } // Really should populate the tensors here, but it'll work without it. int status = m_TfLiteInterpreter->Invoke(); if (status != kTfLiteOk) { std::cout << "Inference failed." << std::endl; return -1; } }