// Copyright (c) 2019 PaddlePaddle Authors. All Rights Reserved. // // 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. #include "lite/api/light_api.h" #include #include "lite/api/paddle_api.h" #include "lite/core/version.h" #include "lite/model_parser/model_parser.h" namespace paddle { namespace lite_api { class LightPredictorImpl : public PaddlePredictor { public: LightPredictorImpl() = default; std::unique_ptr GetInput(int i) override; std::unique_ptr GetOutput(int i) const override; void Run() override; std::string GetVersion() const override; std::vector GetInputNames() override; std::vector GetOutputNames() override; std::unique_ptr GetTensor( const std::string& name) const override; // Get InputTebsor by name std::unique_ptr GetInputByName(const std::string& name) override; void Init(const MobileConfig& config); private: std::unique_ptr raw_predictor_; }; void LightPredictorImpl::Init(const MobileConfig& config) { // LightPredictor Only support NaiveBuffer backend in publish lib raw_predictor_.reset(new lite::LightPredictor(config.model_dir(), config.model_buffer(), config.param_buffer(), config.model_from_memory(), LiteModelType::kNaiveBuffer)); raw_predictor_->PrepareFeedFetch(); } std::unique_ptr LightPredictorImpl::GetInput(int i) { return std::unique_ptr(new Tensor(raw_predictor_->GetInput(i))); } std::unique_ptr LightPredictorImpl::GetOutput(int i) const { return std::unique_ptr(new Tensor(raw_predictor_->GetOutput(i))); } void LightPredictorImpl::Run() { raw_predictor_->Run(); } std::string LightPredictorImpl::GetVersion() const { return lite::version(); } std::unique_ptr LightPredictorImpl::GetTensor( const std::string& name) const { return std::unique_ptr( new Tensor(raw_predictor_->GetTensor(name))); } std::unique_ptr LightPredictorImpl::GetInputByName( const std::string& name) { return std::unique_ptr( new Tensor(raw_predictor_->GetInputByName(name))); } std::vector LightPredictorImpl::GetInputNames() { return raw_predictor_->GetInputNames(); } std::vector LightPredictorImpl::GetOutputNames() { return raw_predictor_->GetOutputNames(); } template <> std::shared_ptr CreatePaddlePredictor( const MobileConfig& config) { auto x = std::make_shared(); x->Init(config); return x; } } // namespace lite_api } // namespace paddle