Перейти к основному содержимому
Версия: 3.22.0 (последняя)

Оценка позы человека

Обзор

Процесс оценки позы человека в Face SDK состоит из нескольких этапов: детекции тела и определения позы.

Детекция тел

Для детекции тел в FaceSDK используются процессинг-блоки:

  • *HUMAN_BODY_DETECTOR* (Детектор тел)
  • *OBJECT_DETECTOR* (Детектор объектов)

Модификации и версии детекторов

Тип Модификация Версия Время детекции (мс)
640x4801280x7201920x1080
HUMAN_BODY_DETECTORssyv1238 241 244
OBJECT_DETECTORssyx12027 2023 2028

Спецификация детекторов

  • Входной контейнер Context должен содержать изображение в бинарном формате.
{
"image" : {
"format": "NDARRAY",
"blob": "data pointer",
"dtype": "uint8_t",
"shape": [height, width, channels]
}
}

Пример детекции тел

Создание процессинг-блоков

Создайте объект процессинг-блок детектора и фиттера с помощью метода FacerecService.createProcessingBlock, передав в качестве аргумента контейнер Context с установленными параметрами.

auto detectorConfigCtx = service->createContext();
detectorConfigCtx["unit_type"] = "HUMAN_BODY_DETECTOR";
pbio::ProcessingBlock bodyDetector = service->createProcessingBlock(detectorConfigCtx);

Запуск детекции

Нужно подать контейнер Context с бинарным изображением в процессинг-блок детектора:

ioData["image"] = imgCtx;
bodyDetector(ioData)

Результат выполнения детекции лица сохраняется переданный контейнер Context согласно спецификации процессинг-блока.

Оценка позы человека

Для оценки позы человека используется процессинг-блок HUMAN_POSE_ESTIMATOR

Модификации и версии

Модификация Версия Время детекции (мс)
heavy1195

Спецификация процессинг-блока оценки позы человека

  • Входной контейнер Context должен содержать изображение в бинарном формате и массив объектов, полученных от детектора
{
"image" : {
"format": "NDARRAY",
"blob": "data pointer",
"dtype": "uint8_t",
"shape": [height, width, channels]
},
"objects": [{
"id": {"type": "long", "minimum": 0},
"class": "body",
"confidence": {"double", "minimum": 0, "maximum": 1},
"bbox": [x1, y2, x2, y2]
}]
}

Пример оценки позы человека

  1. Создайте объект процессинг-блок оценки позы с помощью метода FacerecService.createProcessingBlock, передав в качестве аргумента контейнер Context с установленными параметрами.
auto configCtx = service->createContext();
configCtx["unit_type"] = "HUMAN_POSE_ESTIMATOR";
pbio::ProcessingBlock humanPoseEstimator = service->createProcessingBlock(configCtx);
  1. Выполните обнаружение человека с помощью BodyDetector или ObjectDetector, как описано в разделе Запуск детекции.

  2. Передайте полученный Context-контейнер методу humanPoseEstimator():

humanPoseEstimator(ioData);