Files
openvino/docs/snippets/gpu/preprocessing_nv12_two_planes_c.cpp
River Li d86d94edad [DOC][CAPI] document for remote tensor (#16408)
* [DOC][CAPI] document for remote tensor

* Update

* Update minor

* Update GPU_RemoteTensor_API.md

---------

Co-authored-by: Sebastian Golebiewski <sebastianx.golebiewski@intel.com>
2023-03-22 01:55:51 +04:00

127 lines
5.7 KiB
C++

// Copyright (C) 2018-2023 Intel Corporation
// SPDX-License-Identifier: Apache-2.0
//
#include <openvino/c/openvino.h>
#include <openvino/c/gpu/gpu_plugin_properties.h>
#include <openvino/runtime/intel_gpu/ocl/ocl.hpp>
cl::Image2D get_y_image();
cl::Image2D get_uv_image();
int main() {
ov_core_t* core = NULL;
ov_model_t* model = NULL;
ov_compiled_model_t* compiled_model = NULL;
ov_infer_request_t* infer_request = NULL;
ov_preprocess_prepostprocessor_t* preprocess = NULL;
ov_preprocess_input_info_t* preprocess_input_info = NULL;
ov_preprocess_input_tensor_info_t* preprocess_input_tensor_info = NULL;
ov_preprocess_preprocess_steps_t* preprocess_input_steps = NULL;
ov_preprocess_input_model_info_t* preprocess_input_model_info = NULL;
ov_layout_t* layout = NULL;
ov_model_t* model_with_preproc = NULL;
ov_remote_context_t* gpu_context = NULL;
char* input_name0 = NULL;
char* input_name1 = NULL;
ov_output_const_port_t* input_port0 = NULL;
ov_output_const_port_t* input_port1 = NULL;
size_t height = 480;
size_t width = 640;
ov_core_create(&core);
ov_core_read_model(core, "model.xml", "model.bin", &model);
//! [init_preproc]
ov_preprocess_prepostprocessor_create(model, &preprocess);
ov_preprocess_prepostprocessor_get_input_info(preprocess, &preprocess_input_info);
ov_preprocess_input_info_get_tensor_info(preprocess_input_info, &preprocess_input_tensor_info);
ov_preprocess_input_tensor_info_set_element_type(preprocess_input_tensor_info, ov_element_type_e::U8);
ov_preprocess_input_tensor_info_set_color_format_with_subname(preprocess_input_tensor_info,
ov_color_format_e::NV12_TWO_PLANES,
2,
"y",
"uv");
ov_preprocess_input_tensor_info_set_memory_type(preprocess_input_tensor_info, "GPU_SURFACE");
ov_preprocess_input_tensor_info_set_spatial_static_shape(preprocess_input_tensor_info, height, width);
ov_preprocess_input_info_get_preprocess_steps(preprocess_input_info, &preprocess_input_steps);
ov_preprocess_preprocess_steps_convert_color(preprocess_input_steps, ov_color_format_e::BGR);
ov_preprocess_preprocess_steps_resize(preprocess_input_steps, RESIZE_LINEAR);
ov_preprocess_input_info_get_model_info(preprocess_input_info, &preprocess_input_model_info);
ov_layout_create("NCHW", &layout);
ov_preprocess_input_model_info_set_layout(preprocess_input_model_info, layout);
ov_preprocess_prepostprocessor_build(preprocess, &model_with_preproc);
//! [init_preproc]
ov_core_compile_model(core, model_with_preproc, "GPU", 0, &compiled_model);
ov_compiled_model_get_context(compiled_model, &gpu_context);
ov_compiled_model_create_infer_request(compiled_model, &infer_request);
{
//! [single_batch]
ov_model_const_input_by_index(model, 0, &input_port0);
ov_model_const_input_by_index(model, 1, &input_port1);
ov_port_get_any_name(input_port0, &input_name0);
ov_port_get_any_name(input_port1, &input_name1);
ov_shape_t shape_y, shape_uv;
ov_tensor_t* remote_tensor_y = NULL;
ov_tensor_t* remote_tensor_uv = NULL;
ov_const_port_get_shape(input_port0, &shape_y);
ov_const_port_get_shape(input_port1, &shape_uv);
cl::Image2D image_y = get_y_image();
cl::Image2D image_uv = get_uv_image();
ov_remote_context_create_tensor(gpu_context,
ov_element_type_e::U8,
shape_y,
4,
&remote_tensor_y,
ov_property_key_intel_gpu_shared_mem_type,
"OCL_IMAGE2D",
ov_property_key_intel_gpu_mem_handle,
image_y.get());
ov_remote_context_create_tensor(gpu_context,
ov_element_type_e::U8,
shape_uv,
4,
&remote_tensor_y,
ov_property_key_intel_gpu_shared_mem_type,
"OCL_IMAGE2D",
ov_property_key_intel_gpu_mem_handle,
image_uv.get());
ov_infer_request_set_tensor(infer_request, input_name0, remote_tensor_y);
ov_infer_request_set_tensor(infer_request, input_name1, remote_tensor_uv);
ov_infer_request_infer(infer_request);
//! [single_batch]
ov_free(input_name0);
ov_free(input_name1);
ov_output_const_port_free(input_port0);
ov_output_const_port_free(input_port1);
ov_layout_free(layout);
ov_preprocess_input_model_info_free(preprocess_input_model_info);
ov_preprocess_preprocess_steps_free(preprocess_input_steps);
ov_preprocess_input_tensor_info_free(preprocess_input_tensor_info);
ov_preprocess_input_info_free(preprocess_input_info);
ov_preprocess_prepostprocessor_free(preprocess);
ov_tensor_free(remote_tensor_y);
ov_tensor_free(remote_tensor_uv);
ov_shape_free(&shape_y);
ov_shape_free(&shape_uv);
ov_infer_request_free(infer_request);
ov_compiled_model_free(compiled_model);
ov_model_free(model);
ov_model_free(model_with_preproc);
ov_remote_context_free(gpu_context);
ov_core_free(core);
}
return 0;
}