Перейти к основному содержимому
Версия: 3.19.2

Преобразование RawSample в Context

В этом разделе вы узнаете, как преобразовать RawSample (старый API) в Context (API блока обработки) на C++ и Python. Это может быть полезно, если вы хотите использовать проверенный Capturer из старого API и некоторые новые блоки обработки, такие как Age Estimator, Quality Assessment Estimator или Liveness Estimator.

pbio::Capturer::Ptr capturer = service->createCapturer("common_capturer_refa_fda_a.xml");

cv::Mat image = cv::imread(input_image_path);
auto ioData = service->createContext();

pbio::RawImage rawImage(image.cols, image.rows, pbio::RawImage::Format::FORMAT_BGR, image.data);

// выполнение детекции
std::vector<pbio::RawSample::Ptr> samples = capturer->capture(rawImage);

auto objects = ioData["objects"];
auto imageContext = ioData["image"];

pbio::context_utils::putImage(imageContext, rawImage);

for (const auto& sample : samples)
{
// преобразование в Context
objects.push_back(sample->toContext());
}

auto configContext = service->createContext();

configContext["unit_type"] = "AGE_ESTIMATOR";
configContext["@sdk_path"] = sdk_dir;
configContext["ONNXRuntime"]["library_path"] = lib_dir;

pbio::ProcessingBlock block = service->createProcessingBlock(configContext);

block(ioData);

for (const auto& object : ioData["objects"])
{
auto bbox = object["bbox"];
cv::Point topLeft(bbox[0].getDouble() * image.cols, bbox[1].getDouble() * image.rows);
cv::Point bottomRight(bbox[2].getDouble() * image.cols, bbox[3].getDouble() * image.rows);

std::cout << "Bbox coordinates: (" << topLeft.x << ", " << topLeft.y << ") (" << bottomRight.x << ", " << bottomRight.y << ") " << "Age: " << object["age"].getLong() << std::endl;
}