24 #include <onnxruntime_cxx_api.h>
28 namespace SourceXtractor {
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;
41 for (
int iy = y_start; iy < y_end; iy++) {
42 for (
int ix = x_start; ix < x_end; ix++, index++) {
44 out[index] = accessor.
getValue(ix, iy);
63 Ort::RunOptions run_options;
64 auto mem_info = Ort::MemoryInfo::CreateCpu(OrtDeviceAllocator, OrtMemTypeCPU);
66 const int center_x =
static_cast<int>(centroid.
getCentroidX() + 0.5);
67 const int center_y =
static_cast<int>(centroid.
getCentroidY() + 0.5);
83 fillCutout(*image, center_x, center_y, input_shape[2], input_shape[3], input_data);
87 auto input_tensor = Ort::Value::CreateTensor<float>(
88 mem_info, input_data.
data(), input_data.
size(), input_shape.
data(), input_shape.
size());
89 auto output_tensor = Ort::Value::CreateTensor<O>(
90 mem_info, output_data.
data(), output_data.
size(), output_shape.
data(), output_shape.
size());
96 &input_name, &input_tensor, 1,
97 &output_name, &output_tensor, 1);
101 return Euclid::make_unique<OnnxProperty::NdWrapper<O>>(catalog_shape, output_data);
110 for (
const auto& model :
m_models) {
113 switch (model.m_output_type) {
114 case ONNX_TENSOR_ELEMENT_DATA_TYPE_FLOAT:
115 result = computePropertiesSpecialized<float>(model, detection_frame_images, centroid);
117 case ONNX_TENSOR_ELEMENT_DATA_TYPE_INT32:
118 result = computePropertiesSpecialized<int32_t>(model, detection_frame_images, centroid);
124 output_dict.emplace(model.m_prop_name,
std::move(result));
Euclid::NdArray::NdArray< T > NdArray