// Helper function to read the model file std::vector<char> ReadFile(const std::string& file_path){ std::ifstream file(file_path, std::ios::binary | std::ios::ate); if (!file) { throw std::runtime_error("Failed to open file: " + file_path); } std::streamsize size = file.tellg(); file.seekg(0, std::ios::beg);
std::vector<char> buffer(size); if (!file.read(buffer.data(), size)) { throw std::runtime_error("Failed to read file: " + file_path); } return buffer; }
// Load the TensorFlow Lite model std::vector<char> model_data = ReadFile(model_path); auto model = tflite::FlatBufferModel::BuildFromBuffer(model_data.data(), model_data.size()); if (!model) { std::cerr << "Failed to load TFLite model." << std::endl; return1; }
// Create the interpreter tflite::ops::builtin::BuiltinOpResolver resolver; tflite::InterpreterBuilder builder(*model, resolver); std::unique_ptr<tflite::Interpreter> interpreter; if (builder(&interpreter) != kTfLiteOk) { std::cerr << "Failed to create interpreter." << std::endl; return1; }
// Allocate tensors if (interpreter->AllocateTensors() != kTfLiteOk) { std::cerr << "Failed to allocate tensors." << std::endl; return1; }
// Copy data to input tensor std::copy(normalized_image.begin(), normalized_image.end(), input_data);
// Run inference if (interpreter->Invoke() != kTfLiteOk) { std::cerr << "Failed to invoke interpreter." << std::endl; return1; }
// Get output tensor and print results float* output_data = interpreter->typed_output_tensor<float>(0); int output_size = interpreter->output_tensor(0)->dims->data[1];