1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
6 * @brief This is a header file for the Inference Engine plugin C++ API
7 * @file ie_plugin_cpp.hpp
15 #include "ie_plugin.hpp"
16 #include "details/ie_exception_conversion.hpp"
17 #include "cpp/ie_executable_network.hpp"
18 #include "ie_plugin_ptr.hpp"
19 #include "ie_cnn_network.h"
22 namespace InferenceEngine {
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.
28 class InferencePlugin {
29 InferenceEnginePluginPtr actual;
32 /** @brief A default constructor */
33 InferencePlugin() = default;
36 * @brief Constructs a plugin instance from the given pointer.
37 * @param pointer Initialized Plugin pointer
39 explicit InferencePlugin(const InferenceEnginePluginPtr &pointer) : actual(pointer) {}
42 * @brief Wraps original method
43 * IInferencePlugin::GetVersion
45 const Version *GetVersion() {
46 const Version *versionInfo = nullptr;
47 actual->GetVersion(versionInfo);
48 if (versionInfo == nullptr) {
49 THROW_IE_EXCEPTION << "Unknown device is used";
55 * @deprecated Use InferencePlugin::LoadNetwork(ICNNNetwork &, const std::map<std::string, std::string> &)
56 * @brief Wraps original method IInferencePlugin::LoadNetwork(ICNNNetwork &, ResponseDesc *)
57 * @param network A network object to load
59 INFERENCE_ENGINE_DEPRECATED
60 void LoadNetwork(ICNNNetwork &network) {
61 IE_SUPPRESS_DEPRECATED_START
62 CALL_STATUS_FNC(LoadNetwork, network);
63 IE_SUPPRESS_DEPRECATED_END
67 * @brief Wraps original method
68 * IInferencePlugin::LoadNetwork(IExecutableNetwork::Ptr&, ICNNNetwork&, const std::map<std::string, std::string> &, ResponseDesc*).
69 * @param network A network object to load
70 * @param config A map of configuration options
71 * @return Created Executable Network object
73 ExecutableNetwork LoadNetwork(ICNNNetwork &network, const std::map<std::string, std::string> &config) {
74 IExecutableNetwork::Ptr ret;
75 CALL_STATUS_FNC(LoadNetwork, ret, network, config);
76 return ExecutableNetwork(ret, actual);
80 * @brief Wraps original method
81 * IInferencePlugin::LoadNetwork(IExecutableNetwork::Ptr&, ICNNNetwork&, const std::map<std::string, std::string> &, ResponseDesc*).
82 * @param network A network object to load
83 * @param config A map of configuration options
84 * @return Created Executable Network object
86 ExecutableNetwork LoadNetwork(CNNNetwork network, const std::map<std::string, std::string> &config) {
87 IExecutableNetwork::Ptr ret;
88 CALL_STATUS_FNC(LoadNetwork, ret, network, config);
89 if (ret.get() == nullptr) THROW_IE_EXCEPTION << "Internal error: pointer to executable network is null";
90 return ExecutableNetwork(ret, actual);
94 * @deprecated Use IExecutableNetwork to create IInferRequest.
95 * @brief Wraps original method IInferencePlugin::Infer(const BlobMap&, BlobMap&, ResponseDesc *)
96 * @param input A map of input blobs accessed by input names
97 * @param result A map of output blobs accessed by output names
99 INFERENCE_ENGINE_DEPRECATED
100 void Infer(const BlobMap &input, BlobMap &result) {
101 IE_SUPPRESS_DEPRECATED_START
102 CALL_STATUS_FNC(Infer, input, result);
103 IE_SUPPRESS_DEPRECATED_END
107 * @deprecated Use IInferRequest to get performance counters
108 * @brief Wraps original method IInferencePlugin::GetPerformanceCounts
109 * @return Map of layers names to profiling information for that layers
111 INFERENCE_ENGINE_DEPRECATED
112 std::map<std::string, InferenceEngineProfileInfo> GetPerformanceCounts() const {
113 std::map<std::string, InferenceEngineProfileInfo> perfMap;
114 IE_SUPPRESS_DEPRECATED_START
115 CALL_STATUS_FNC(GetPerformanceCounts, perfMap);
116 IE_SUPPRESS_DEPRECATED_END
121 * @brief Wraps original method
122 * IInferencePlugin::AddExtension
123 * @param extension Pointer to loaded Extension
125 void AddExtension(InferenceEngine::IExtensionPtr extension) {
126 CALL_STATUS_FNC(AddExtension, extension);
130 * @brief Wraps original method
131 * IInferencePlugin::SetConfig
132 * @param config A configuration map
134 void SetConfig(const std::map<std::string, std::string> &config) {
135 CALL_STATUS_FNC(SetConfig, config);
139 * @brief Wraps original method
140 * IInferencePlugin::ImportNetwork
141 * @param modelFileName A path to the imported network
142 * @param config A configuration map
143 * @return Created Executable Network object
145 ExecutableNetwork ImportNetwork(const std::string &modelFileName, const std::map<std::string, std::string> &config) {
146 IExecutableNetwork::Ptr ret;
147 CALL_STATUS_FNC(ImportNetwork, ret, modelFileName, config);
148 return ExecutableNetwork(ret, actual);
152 * @deprecated Use InferencePlugin::QueryNetwork(const ICNNNetwork &, const std::map<std::string, std::string> &, QueryNetworkResult &) const
153 * @brief Wraps original method
154 * IInferencePlugin::QueryNetwork(const ICNNNetwork&, QueryNetworkResult& ) const
155 * @param network A network object to query
156 * @param res Query results
158 INFERENCE_ENGINE_DEPRECATED
159 void QueryNetwork(const ICNNNetwork &network, QueryNetworkResult &res) const {
160 QueryNetwork(network, { }, res);
164 * @brief Wraps original method
165 * IInferencePlugin::QueryNetwork(const ICNNNetwork&, const std::map<std::string, std::string> &, QueryNetworkResult&) const
166 * @param network A network object to query
167 * @param config A configuration map
168 * @param res Query results
170 void QueryNetwork(const ICNNNetwork &network, const std::map<std::string, std::string> &config, QueryNetworkResult &res) const {
171 actual->QueryNetwork(network, config, res);
172 if (res.rc != OK) THROW_IE_EXCEPTION << res.resp.msg;
176 * @brief Converts InferenceEngine to InferenceEnginePluginPtr pointer
177 * @return Wrapped object
179 operator InferenceEngine::InferenceEnginePluginPtr() {
184 * @deprecated Deprecated since HeteroPluginPtr is deprecated
185 * @brief Converts InferenceEngine to HeteroPluginPtr pointer
186 * @return Wrapped Hetero object if underlined object is HeteroPlugin instance, nullptr otherwise
188 IE_SUPPRESS_DEPRECATED_START
189 operator InferenceEngine::HeteroPluginPtr() {
192 IE_SUPPRESS_DEPRECATED_END
195 * @brief Shared pointer on InferencePlugin object
197 using Ptr = std::shared_ptr<InferencePlugin>;
199 } // namespace InferenceEngine