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

Оценка Liveness

В этом разделе вы узнаете как интегрировать компонент Liveness Estimator в ваш проект на C++ или Python для оценки принадлежности лица реальному человеку ("живость").

2D RGB Оценка принадлежности лица реальному человеку (C++/Python)

Модификация 3

1. Создание Liveness Estimator

1.1 Для создания Liveness Estimator выполните шаги 1-3, описанные в разделе Создание процессинг-блока и укажите следующие значения:

  • "LIVENESS_ESTIMATOR" для ключа "unit_type"
  • Пустую строку "" для ключа "model_path"
configCtx["unit_type"] = "LIVENESS_ESTIMATOR";
configCtx["model_path"] = "";

// опционально, значения по умолчанию указаны после знака "="
// пути указаны для примеров, расположенных в <sdk_dir>/bin
configCtx["sdk_path"] = "..";
configCtx["capturer_config_name"] = "common_capturer_uld_fda.xml";
configCtx["config_name"] = "liveness_2d_estimator_v3.xml";
configCtx["facerec_conf_dir"] = sdk_dir + "/conf/facerec";
configCtx["dll_path"] = "facerec.dll"; // для Windows
// или
configCtx["dll_path"] = sdk_dir + "/lib/libfacerec.so"; // для Linux

Списки существующих конфигурационных файлов можно найти в разделах:

1.2 Создание процессинг-блока Liveness Estimator:

pbio::ProcessingBlock livenessEstimator = service->createProcessingBlock(configCtx);

2. Оценка лица

2.1 Создайте Context-контейнер ioData для данных ввода-вывода, используя метод createContext():

auto ioData = service->createContext();

2.2 Создайте Context-контейнер imgCtx с RGB-изображением, выполнив шаги, описанные на странице Создание контейнера Context c RGB-изображением:

// помещение изображения в контейнер
auto imgCtx = ioData["image"];
pbio::context_utils::putImage(imgCtx, input_rawimg);

2.3 Поместите исходное изображение в контейнер данных ввода-вывода:

ioData["image"] = imgCtx;

2.4 Вызовите livenessEstimator и передайте Context-контейнер ioData, содержащий изображение:

livenessEstimator(ioData);

Для точной оценки требуется присутствие в кадре лица только одного человека, смотрящего в камеру, иначе будет возвращен статус "MULTIPLE_FACE_FRAMED".

Если на изображении обнаружено несколько лиц, будет обработано только одно из них (случайным образом).

Метод livenessEstimator() добавит результат обработки сэмплов (изображений) в контейнер ioData.

Формат выходных данных представляет собой список объектов доступный по ключу "objects".

Каждый объект списка имеет ключ "class" со значением "face".

По ключу "liveness" доступен объект Context, содержащий 3 элемента:

  • ключ "confidence" со значением типа double в диапазоне [0,1]
  • ключ "value" со значением типа string, которое соответствует одному из состояний pbio::Liveness2DEstimator::Liveness
  • ключ "info" со значением типа string, которое соответствует одному из двух состояний: "REAL" или "FAKE"
/*
{
"objects": [{ "bbox": [x1, y2, x2, y2],
"class": "face",
"id": {"type": "long", "minimum": 0},
"liveness": {
"confidence": {"type": "double", "minimum": 0, "maximum": 1},
"info": {
"enum": [
"FACE_NOT_FULLY_FRAMED", "MULTIPLE_FACE_FRAMED",
"FACE_TURNED_RIGHT", "FACE_TURNED_LEFT", "FACE_TURNED_UP",
"FACE_TURNED_DOWN", "BAD_IMAGE_LIGHTING", "BAD_IMAGE_NOISE",
"BAD_IMAGE_BLUR", "BAD_IMAGE_FLARE", "NOT_COMPUTED"
]
},
"value": {
"enum": ["REAL", "FAKE"]
}
}
}]
}
*/

Модификация 4

1. Создание Liveness Estimator

1.1 Для создания Liveness Estimator выполните шаги 1-3, описанные на странице Создание Processing Block и укажите следующие значения:

  • "LIVENESS_ESTIMATOR" for the "unit_type" key
  • An empty string "" for the "model_path" key
configCtx["unit_type"] = "LIVENESS_ESTIMATOR";
configCtx["modification"] = "v4";
// optional, default values are specified after "="
// paths specified for examples located in <sdk_dir>/bin
configCtx["sdk_path"] = "..";
configCtx["facerec_conf_dir"] = sdk_dir + "/conf/facerec";
configCtx["dll_path"] = "facerec.dll"; // for Windows
// or
configCtx["dll_path"] = sdk_dir + "/lib/libfacerec.so"; // for Linux

1.2 Создание процессинг-блока Liveness Estimator:

pbio::ProcessingBlock livenessEstimator = service->createProcessingBlock(configCtx);

2. Оценка лиц

2.1 Перед применением блока Liveness Estimator следует создать и применить к изображению блоки Face Detector (модификация ULD) и Face Fitter (модификация tddfa).

2.2 Вызовите livenessEstimator и передайте Context-контейнер ioData, содержащий изображение:

livenessEstimator(ioData);

Если на изображении обнаружено несколько лиц, будет обработано только одно из них (случайным образом). Метод livenessEstimator() добавит результат обработки сэмплов (изображений) в контейнер ioData. Формат выходных данных представляет собой список объектов доступный по ключу "objects". Каждый объект списка имеет ключ "class"со значением "face".

По ключу "liveness" доступен объект Context, содержащий 2 элемента:

  • ключ "confidence" со значением типа double в диапазоне [0,1]
  • ключ "value" со значением типа string, которое соответствует одному из двух состояний: "REAL" или "FAKE"
/*
{
"objects": [{ "liveness": {
"confidence": {"type": "double", "minimum": 0, "maximum": 1},
"value": {
"enum": ["REAL", "FAKE"]
}
}
}]
}
*/