ie_plugin_cpp.hpp
Go to the documentation of this file.
1 // Copyright (C) 2018 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
3 //
4 
5 /**
6  * @brief This is a header file for the Inference Engine plugin C++ API
7  * @file ie_plugin_cpp.hpp
8  */
9 #pragma once
10 
11 #include <map>
12 #include <string>
13 #include <memory>
14 
15 #include "ie_plugin.hpp"
18 #include "ie_plugin_ptr.hpp"
19 #include "ie_cnn_network.h"
20 
21 
22 namespace InferenceEngine {
23 
24 /**
25  * @brief This class is a C++ API wrapper for IInferencePlugin.
26  * It can throw exceptions safely for the application, where it is properly handled.
27  */
30 
31 public:
32  /** @brief A default constructor */
33  InferencePlugin() = default;
34 
35  /**
36  * @brief Constructs a plugin instance from the given pointer.
37  */
38  explicit InferencePlugin(const InferenceEnginePluginPtr &pointer) : actual(pointer) {}
39 
40  /**
41  * @brief Wraps original method
42  * IInferencePlugin::GetVersion
43  */
44  const Version *GetVersion() {
45  const Version *versionInfo = nullptr;
46  actual->GetVersion(versionInfo);
47  return versionInfo;
48  }
49 
50  /**
51  * @brief Wraps original method
52  * IInferencePlugin::LoadNetwork
53  */
54  void LoadNetwork(ICNNNetwork &network) {
55  CALL_STATUS_FNC(LoadNetwork, network);
56  }
57 
58  /**
59  * @brief Wraps original method
60  * IInferencePlugin::LoadNetwork(IExecutableNetwork::Ptr&, ICNNNetwork&, const std::map<std::string, std::string> &, ResponseDesc*).
61  */
62  ExecutableNetwork LoadNetwork(ICNNNetwork &network, const std::map<std::string, std::string> &config) {
64  CALL_STATUS_FNC(LoadNetwork, ret, network, config);
65  return ExecutableNetwork(ret);
66  }
67 
68  /**
69  * @brief Wraps original method
70  * IInferencePlugin::LoadNetwork(IExecutableNetwork::Ptr&, ICNNNetwork&, const std::map<std::string, std::string> &, ResponseDesc*).
71  */
72  ExecutableNetwork LoadNetwork(CNNNetwork network, const std::map<std::string, std::string> &config) {
74  CALL_STATUS_FNC(LoadNetwork, ret, network, config);
75  if (ret.get() == nullptr) THROW_IE_EXCEPTION << "Internal error: pointer to executable network is null";
76  return ExecutableNetwork(ret);
77  }
78 
79  /**
80  * @brief Wraps original method
81  * IInferencePlugin::Infer(const BlobMap&, BlobMap&, ResponseDesc *resp)
82  */
83  void Infer(const BlobMap &input, BlobMap &result) {
84  CALL_STATUS_FNC(Infer, input, result);
85  }
86 
87  /**
88  * @brief Wraps original method
89  * IInferencePlugin::GetPerformanceCounts
90  */
91  std::map<std::string, InferenceEngineProfileInfo> GetPerformanceCounts() const {
92  std::map<std::string, InferenceEngineProfileInfo> perfMap;
93  CALL_STATUS_FNC(GetPerformanceCounts, perfMap);
94  return perfMap;
95  }
96 
97  /**
98  * @brief Wraps original method
99  * IInferencePlugin::AddExtension
100  */
101  void AddExtension(InferenceEngine::IExtensionPtr extension) {
102  CALL_STATUS_FNC(AddExtension, extension);
103  }
104 
105  /**
106  * @brief Wraps original method
107  * IInferencePlugin::SetConfig
108  */
109  void SetConfig(const std::map<std::string, std::string> &config) {
110  CALL_STATUS_FNC(SetConfig, config);
111  }
112 
113  /**
114  * @brief Wraps original method
115  * IInferencePlugin::ImportNetwork
116  */
117  ExecutableNetwork ImportNetwork(const std::string &modelFileName, const std::map<std::string, std::string> &config) {
119  CALL_STATUS_FNC(ImportNetwork, ret, modelFileName, config);
120  return ExecutableNetwork(ret);
121  }
122 
123  /**
124  * @depricated Use the version with config parameter
125  * @brief Wraps original method
126  * IInferencePlugin::QueryNetwork
127  */
128  void QueryNetwork(const ICNNNetwork &network, QueryNetworkResult &res) const {
129  actual->QueryNetwork(network, res);
130  if (res.rc != OK) THROW_IE_EXCEPTION << res.resp.msg;
131  }
132 
133  /**
134  * @brief Wraps original method
135  * IInferencePlugin::QueryNetwork
136  */
137  void QueryNetwork(const ICNNNetwork &network, const std::map<std::string, std::string> &config, QueryNetworkResult &res) const {
138  actual->QueryNetwork(network, config, res);
139  if (res.rc != OK) THROW_IE_EXCEPTION << res.resp.msg;
140  }
141 
142  /**
143  * @brief Returns wrapped object
144  */
146  return actual;
147  }
148 
149  /**
150  * @return wrapped Hetero object if underlined object is HeteroPlugin instance, nullptr otherwise
151  */
153  return actual;
154  }
155 
156  /**
157  * @brief Shared pointer on InferencePlugin object
158  */
159  using Ptr = std::shared_ptr<InferencePlugin>;
160 };
161 } // namespace InferenceEngine
#define THROW_IE_EXCEPTION
A macro used to throw the exception with a notable description.
Definition: ie_exception.hpp:22
InferenceEngine::details::SOPointer< IInferencePlugin > InferenceEnginePluginPtr
A C++ helper to work with objects created by the plugin. Implements different interfaces.
Definition: ie_plugin_ptr.hpp:50
A header file that provides wrapper classes for IExecutableNetwork.
A header file that provides wrapper for ICNNNetwork object.
ExecutableNetwork LoadNetwork(CNNNetwork network, const std::map< std::string, std::string > &config)
Wraps original method IInferencePlugin::LoadNetwork(IExecutableNetwork::Ptr&, ICNNNetwork&, const std::map<std::string, std::string> &, ResponseDesc*).
Definition: ie_plugin_cpp.hpp:72
Definition: ie_argmax_layer.hpp:11
Represents version information that describes plugins and the inference engine runtime library...
Definition: ie_version.hpp:20
This class is a C++ API wrapper for IInferencePlugin. It can throw exceptions safely for the applicat...
Definition: ie_plugin_cpp.hpp:28
A header file for Main Inference Engine API.
A header file that provides macros to handle no exception methods.
InferencePlugin()=default
A default constructor.
InferenceEngine::details::SOPointer< IHeteroInferencePlugin > HeteroPluginPtr
Definition: ie_plugin_ptr.hpp:53
A header file contains a wrapper class for handling plugin instantiation and releasing resources...
void LoadNetwork(ICNNNetwork &network)
Wraps original method IInferencePlugin::LoadNetwork.
Definition: ie_plugin_cpp.hpp:54
void QueryNetwork(const ICNNNetwork &network, QueryNetworkResult &res) const
Wraps original method IInferencePlugin::QueryNetwork.
Definition: ie_plugin_cpp.hpp:128
std::map< std::string, InferenceEngineProfileInfo > GetPerformanceCounts() const
Wraps original method IInferencePlugin::GetPerformanceCounts.
Definition: ie_plugin_cpp.hpp:91
void AddExtension(InferenceEngine::IExtensionPtr extension)
Wraps original method IInferencePlugin::AddExtension.
Definition: ie_plugin_cpp.hpp:101
void Infer(const BlobMap &input, BlobMap &result)
Wraps original method IInferencePlugin::Infer(const BlobMap&, BlobMap&, ResponseDesc *resp) ...
Definition: ie_plugin_cpp.hpp:83
This is the main interface to describe the NN topology.
Definition: ie_icnn_network.hpp:35
wrapper over IExecutableNetwork
Definition: ie_executable_network.hpp:26
std::shared_ptr< InferencePlugin > Ptr
Shared pointer on InferencePlugin object.
Definition: ie_plugin_cpp.hpp:159
This class contains all the information about the Neural Network and the related binary information...
Definition: ie_cnn_network.h:29
std::map< std::string, Blob::Ptr > BlobMap
This is a convenient type for working with a map containing pairs(string, pointer to a Blob instance)...
Definition: ie_blob.h:259
ExecutableNetwork LoadNetwork(ICNNNetwork &network, const std::map< std::string, std::string > &config)
Wraps original method IInferencePlugin::LoadNetwork(IExecutableNetwork::Ptr&, ICNNNetwork&, const std::map<std::string, std::string> &, ResponseDesc*).
Definition: ie_plugin_cpp.hpp:62
const Version * GetVersion()
Wraps original method IInferencePlugin::GetVersion.
Definition: ie_plugin_cpp.hpp:44
void SetConfig(const std::map< std::string, std::string > &config)
Wraps original method IInferencePlugin::SetConfig.
Definition: ie_plugin_cpp.hpp:109
char msg[256]
A character buffer that holds the detailed information for an error.
Definition: ie_common.h:199
void QueryNetwork(const ICNNNetwork &network, const std::map< std::string, std::string > &config, QueryNetworkResult &res) const
Wraps original method IInferencePlugin::QueryNetwork.
Definition: ie_plugin_cpp.hpp:137
std::shared_ptr< IExecutableNetwork > Ptr
A smart pointer to the current IExecutableNetwork object.
Definition: ie_iexecutable_network.hpp:36
Responce structure encapsulating information about supported layer.
Definition: ie_plugin.hpp:46
ExecutableNetwork ImportNetwork(const std::string &modelFileName, const std::map< std::string, std::string > &config)
Wraps original method IInferencePlugin::ImportNetwork.
Definition: ie_plugin_cpp.hpp:117
InferencePlugin(const InferenceEnginePluginPtr &pointer)
Constructs a plugin instance from the given pointer.
Definition: ie_plugin_cpp.hpp:38