6 from openvino.inference_engine import ie_api as ie
7 from conftest import model_path, image_path
10 is_myriad = os.environ.get("TEST_DEVICE") == "MYRIAD"
11 path_to_image = image_path()
12 test_net_xml, test_net_bin = model_path(is_myriad)
17 n, c, h, w = (1, 3, 32, 32)
18 image = cv2.imread(path_to_image)
20 raise FileNotFoundError("Input image not found")
22 image = cv2.resize(image, (h, w)) / 255
23 image = image.transpose((2, 0, 1))
24 image = image.reshape((n, c, h, w))
28 def test_infer(device):
30 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
31 exec_net = ie_core.load_network(net, device)
33 res = exec_net.infer({'data': img})
34 assert np.argmax(res['fc_out'][0]) == 2
39 def test_infer_net_from_buffer(device):
41 with open(test_net_bin, 'rb') as f:
43 with open(test_net_xml, 'rb') as f:
45 net = ie_core.read_network(model=xml, weights=bin, init_from_buffer=True)
46 net2 = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
47 exec_net = ie_core.load_network(net, device)
48 exec_net2 = ie_core.load_network(net2, device)
50 res = exec_net.infer({'data': img})
51 res2 = exec_net2.infer({'data': img})
55 assert np.allclose(res['fc_out'], res2['fc_out'], atol=1E-4, rtol=1E-4)
58 def test_infer_wrong_input_name(device):
60 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
61 exec_net = ie_core.load_network(net, device)
63 with pytest.raises(AssertionError) as e:
64 exec_net.infer({'_data_': img})
65 assert "No input with name _data_ found in network" in str(e.value)
70 def test_input_info(device):
72 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
73 exec_net = ie_core.load_network(net, device, num_requests=5)
74 assert isinstance(exec_net.input_info['data'], ie.InputInfoCPtr)
75 assert exec_net.input_info['data'].name == "data"
76 assert exec_net.input_info['data'].precision == "FP32"
77 assert isinstance(exec_net.input_info['data'].input_data, ie.DataPtr)
82 def test_inputs_deprecated(device):
84 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
85 exec_net = ie_core.load_network(net, device, num_requests=5)
86 with warnings.catch_warnings(record=True) as w:
87 assert len(exec_net.inputs) == 1
88 assert "data" in exec_net.inputs
89 assert isinstance(exec_net.inputs['data'], ie.DataPtr)
91 for i in range (len(w)):
92 assert "'inputs' property of ExecutableNetwork class is deprecated. " \
93 "To access DataPtrs user need to use 'input_data' property " \
94 "of InputInfoCPtr objects which " \
95 "can be accessed by 'input_info' property." in str(w[i].message)
100 def test_outputs(device):
101 ie_core = ie.IECore()
102 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
103 exec_net = ie_core.load_network(net, device, num_requests=5)
104 assert len(exec_net.outputs) == 1
105 assert "fc_out" in exec_net.outputs
106 assert isinstance(exec_net.outputs['fc_out'], ie.CDataPtr)
111 def test_access_requests(device):
112 ie_core = ie.IECore()
113 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
114 exec_net = ie_core.load_network(net, device, num_requests=5)
115 assert len(exec_net.requests) == 5
116 assert isinstance(exec_net.requests[0], ie.InferRequest)
121 def test_async_infer_one_req(device):
122 ie_core = ie.IECore()
123 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
124 exec_net = ie_core.load_network(net, device, num_requests=1)
126 request_handler = exec_net.start_async(request_id=0, inputs={'data': img})
127 request_handler.wait()
128 res = request_handler.output_blobs['fc_out'].buffer
129 assert np.argmax(res) == 2
134 def test_async_infer_many_req(device):
135 ie_core = ie.IECore()
136 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
137 exec_net = ie_core.load_network(net, device, num_requests=5)
140 request_handler = exec_net.start_async(request_id=id, inputs={'data': img})
141 request_handler.wait()
142 res = request_handler.output_blobs['fc_out'].buffer
143 assert np.argmax(res) == 2
148 def test_async_infer_many_req_get_idle(device):
149 ie_core = ie.IECore()
150 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
152 exec_net = ie_core.load_network(net, device, num_requests=num_requests)
155 for id in range(2*num_requests):
156 request_id = exec_net.get_idle_request_id()
158 status = exec_net.wait(num_requests=1, timeout=ie.WaitMode.RESULT_READY)
159 assert(status == ie.StatusCode.OK)
160 request_id = exec_net.get_idle_request_id()
161 assert(request_id >= 0)
162 request_handler = exec_net.start_async(request_id=request_id, inputs={'data': img})
163 check_id.add(request_id)
164 status = exec_net.wait(timeout=ie.WaitMode.RESULT_READY)
165 assert status == ie.StatusCode.OK
166 for id in range(num_requests):
168 assert np.argmax(exec_net.requests[id].output_blobs['fc_out'].buffer) == 2
173 def test_wait_before_start(device):
174 ie_core = ie.IECore()
175 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
177 exec_net = ie_core.load_network(net, device, num_requests=num_requests)
179 requests = exec_net.requests
180 for id in range(num_requests):
181 status = requests[id].wait()
182 assert status == ie.StatusCode.INFER_NOT_STARTED
183 request_handler = exec_net.start_async(request_id=id, inputs={'data': img})
184 status = requests[id].wait()
185 assert status == ie.StatusCode.OK
186 assert np.argmax(request_handler.output_blobs['fc_out'].buffer) == 2
191 def test_wrong_request_id(device):
192 ie_core = ie.IECore()
193 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
194 exec_net = ie_core.load_network(net, device, num_requests=1)
196 with pytest.raises(ValueError) as e:
197 exec_net.start_async(request_id=20, inputs={'data': img})
198 assert "Incorrect request_id specified!" in str(e.value)
203 def test_wrong_num_requests(device):
204 with pytest.raises(ValueError) as e:
205 ie_core = ie.IECore()
206 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
207 ie_core.load_network(net, device, num_requests=-1)
208 assert "Incorrect number of requests specified: -1. Expected positive integer number or zero for auto detection" \
212 def test_wrong_num_requests_core(device):
213 with pytest.raises(ValueError) as e:
214 ie_core = ie.IECore()
215 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
216 exec_net = ie_core.load_network(net, device, num_requests=-1)
217 assert "Incorrect number of requests specified: -1. Expected positive integer number or zero for auto detection" \
221 def test_plugin_accessible_after_deletion(device):
222 ie_core = ie.IECore()
223 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
224 exec_net = ie_core.load_network(net, device)
226 res = exec_net.infer({'data': img})
227 assert np.argmax(res['fc_out'][0]) == 2
232 def test_exec_graph(device):
233 ie_core = ie.IECore()
234 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
235 exec_net = ie_core.load_network(net, device)
237 res = exec_net.infer({'data': img})
238 exec_graph = exec_net.get_exec_graph_info()
239 exec_graph_file = 'exec_graph.xml'
240 exec_graph.serialize(exec_graph_file)
241 assert os.path.exists(exec_graph_file)
242 os.remove(exec_graph_file)
248 @pytest.mark.skipif(os.environ.get("TEST_DEVICE", "CPU") != "MYRIAD", reason="Device specific test. "
249 "Only MYRIAD plugin implements network export")
250 def test_export_import():
251 ie_core = ie.IECore()
252 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
253 exec_net = ie_core.load_network(net, "MYRIAD")
254 exported_net_file = 'exported_model.bin'
255 exec_net.export(exported_net_file)
256 assert os.path.exists(exported_net_file)
257 exec_net = ie_core.import_network(exported_net_file, "MYRIAD")
258 os.remove(exported_net_file)
260 res = exec_net.infer({'data': img})
261 assert np.argmax(res['fc_out'][0]) == 3
266 def test_multi_out_data(device):
267 # Regression test CVS-23965
268 # Check that CDataPtr for all output layers not copied between outputs map items
269 ie_core = ie.IECore()
270 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
271 net.add_outputs(['28/Reshape'])
272 exec_net = ie_core.load_network(net, device)
273 assert "fc_out" in exec_net.outputs and "28/Reshape" in exec_net.outputs
274 assert isinstance(exec_net.outputs["fc_out"], ie.CDataPtr)
275 assert isinstance(exec_net.outputs["28/Reshape"], ie.CDataPtr)
276 assert exec_net.outputs["fc_out"].name == "fc_out" and exec_net.outputs["fc_out"].shape == [1, 10]
277 assert exec_net.outputs["28/Reshape"].name == "28/Reshape" and exec_net.outputs["28/Reshape"].shape == [1, 5184]
282 def test_get_metric(device):
283 ie_core = ie.IECore()
284 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
285 exec_net = ie_core.load_network(net, "CPU")
286 network_name = exec_net.get_metric("NETWORK_NAME")
287 assert network_name == "test_model"
290 @pytest.mark.skipif(os.environ.get("TEST_DEVICE", "CPU") != "CPU", reason="Device independent test")
291 def test_get_config(device):
292 ie_core = ie.IECore()
293 net = ie_core.read_network(model=test_net_xml, weights=test_net_bin)
294 exec_net = ie_core.load_network(net, device)
295 config = exec_net.get_config("PERF_COUNT")
296 assert config == "NO"