24 #include <onnxruntime_cxx_api.h>
33 int x_start = center_x - width / 2;
34 int y_start = center_y - height / 2;
35 int x_end = x_start + width;
36 int y_end = y_start + height;
39 for (
int iy = y_start; iy < y_end; iy++) {
40 for (
int ix = x_start; ix < x_end; ix++, index++) {
61 Ort::RunOptions run_options;
62 auto mem_info = Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU);
64 const int center_x =
static_cast<int>(centroid.
getCentroidX() + 0.5);
65 const int center_y =
static_cast<int>(centroid.
getCentroidY() + 0.5);
81 fillCutout(*image, center_x, center_y, input_shape[2], input_shape[3], input_data);
85 auto input_tensor = Ort::Value::CreateTensor<float>(
86 mem_info, input_data.
data(), input_data.
size(), input_shape.
data(), input_shape.
size());
87 auto output_tensor = Ort::Value::CreateTensor<O>(
88 mem_info, output_data.
data(), output_data.
size(), output_shape.
data(), output_shape.
size());
94 &input_name, &input_tensor, 1,
95 &output_name, &output_tensor, 1);
99 return Euclid::make_unique<OnnxProperty::NdWrapper<O>>(catalog_shape, output_data);
108 for (
const auto& model :
m_models) {
111 switch (model.m_output_type) {
112 case ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT:
113 result = computePropertiesSpecialized<float>(model, detection_frame_images, centroid);
115 case ONNX_TENSOR_ELEMENT_DATA_TYPE_INT32:
116 result = computePropertiesSpecialized<int32_t>(model, detection_frame_images, centroid);
122 output_dict.emplace(model.m_prop_name,
std::move(result));