Блок проверки качества фото
В этом разделе вы узнаете, как интегрировать блок оценки качества фотографии лица в свой проект C++.
Блок оценки качества фотографии лица (C++)
Требования
- Операционная система Windows x86 64-bit или Linux x86 64-bit.
- Установлен пакет Face SDK windows_x86_64 или linux_x86_64 (см. Начало работы).
1. Создание Quality Assessment Estimator
1.1. Для создания Quality Assessment Estimator, выполните шаги 1-3, описанные на странице Создание процессинг-блока и укажите следующие значения:
"QUALITY_ASSESSMENT_ESTIMATOR"
для ключа"unit_type"
;- При создании блока оценки качества вы можете не указывать значение ключа
"model_path"
или передать пустую строку""
.
configCtx["unit_type"] = "QUALITY_ASSESMENT_ESTIMATOR";
configCtx["config_name"] = "quality_assessment.xml";
// необязательно, значение по умолчанию ".." для примеров в <sdk_dir>/bin
configCtx["sdk_path"] = "..";
1.2. Создайте процессинг-блок Quality Assessment Estimator:
pbio::ProcessingBlock qualityAssessmentEstimator = service->createProcessingBlock(configCtx);
2. Проверка качества фотографии лица
2.1. Создайте Context-контейнер ioData
для данных ввода-вывода, используя метод createContext()
:
auto ioData = service->createContext();
2.2. Создайте Context-контейнер imgCtx
с RGB-изображением, выполнив шаги, описанные на странице
Создание контейнера Context c RGB-изображением.
2.3. Поместите исходное изображение в контейнер данных ввода-вывода:
ioData["image"] = imgCtx;
2.4. Вызовите qualityAssessmentEstimator()
и передайте Context-контейнер ioData
, содержащий исходное изображение:
qualityAssessmentEstimator(ioData);
Для точной оценки требуется только одно лицо человека в кадре, смотрящего в камеру, иначе общий балл будет низким, поскольку алгоритм учитывает относительный размер, положение и направленность головы.
Если захвачено несколько лиц, каждое из них будет обработано независимо.
Результат вызова qualityAssessmentEstimator()
будет добавлен в контейнер ioData
.
Формат выходных данных представлен в виде списка объектов с ключом "objects"
.
Каждый объект в списке имеет ключ "class"
со значением "face"
.
По ключам "quality":"qaa"
расположен контекст с полным набором оценок.
- Ключ
"totalScore"
содержит общую оценку типа long в диапазоне [0,100]
/*
{
"objects": [{ "id": {"type": "long", "minimum": 0}
"class": "face",
"confidence": {"type": "double", "minimum": 0, "maximum": 1},
"bbox": {x1, y1, x2, y2},
"quality": {
"qaa": {
"totalScore": {"type": "long", "minimum": 0, "maximum": 100},
"isSharp": {"type": "boolean"},
"sharpnessScore": {"type": "long", "minimum": 0, "maximum": 100},
"isEvenlyIlluminated": {"type": "boolean"},
"illuminationScore": {"type": "long", "minimum": 0, "maximum": 100},
"noFlare": {"type": "boolean"},
"isLeftEyeOpened": {"type": "boolean"},
"leftEyeOpennessScore": {"type": "long", "minimum": 0, "maximum": 100},
"isRightEyeOpened": {"type": "boolean"},
"rightEyeOpennessScore": {"type": "long", "minimum": 0, "maximum": 100},
"isRotationAcceptable": {"type": "boolean"},
"maxRotationDeviation": {"type": "long"},
"notMasked": {"type": "boolean"},
"notMaskedScore": {"type": "long", "minimum": 0, "maximum": 100},
"isNeutralEmotion": {"type": "boolean"},
"neutralEmotionScore": {"type": "long", "minimum": 0, "maximum": 100},
"isEyesDistanceAcceptable": {"type": "boolean"},
"eyesDistance": {"type": "long", "minimum": 0}
"isMarginsAcceptable": {"type": "boolean"},
"marginOuterDeviation": {"type": "long", "minimum": 0}
"marginInnerDeviation": {"type": "long", "minimum": 0}
"isNotNoisy": {"type": "boolean"},
"noiseScore": {"type": "long", "minimum": 0, "maximum": 100},
"watermarkScore": {"type": "long", "minimum": 0},
"hasWatermark": {"type": "boolean"},
"dynamicRangeScore": {"type": "long", "minimum": 0},
"isDynamicRangeAcceptable": {"type": "boolean"}
}
}
}]
}
*/
3. Ускорение на GPU
Блок оценки качества не поддерживает ускорение графического процессора, но задействованные модули, перечисленные в конфигурационном файле, могут иметь собственные возможности ускорения.