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

Оценка качества изображения

В этом разделе вы узнаете как интегрировать блок оценки качества изображения лица в свой проект на C++ или Python.

Блок оценки качества изображения лица (C++/Python)

1. Создание Quality Assessment Estimator

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

  • "QUALITY_ASSESSMENT_ESTIMATOR" для ключа "unit_type"
  • Пустую строку "" для ключа "model_path"
  • Для ключа "modification" нужно указать один из двух доступных режимов:
    • "assesment" - первый из реализованных режимов блока Quality Assessment, в рамках которого оцениваются следующие параметры: 'background_uniformity_score', 'dynamic_range_score', 'eyes_distance', 'has_watermark', 'illumination_score', 'is_background_uniform', 'is_dynamic_range_acceptable', 'is_evenly_illuminated', 'is_eyes_distance_acceptable', 'is_left_eye_opened', 'is_margins_acceptable', 'is_neutral_emotion', 'is_not_noisy', 'is_right_eye_opened', 'is_rotation_acceptable', 'is_sharp', 'left_eye_openness_score', 'margin_inner_deviation', 'margin_outer_deviation', ' max_rotation_deviation', 'neutral_emotion_score' , 'no_flare', 'noise_score', 'not_masked', 'not_masked_score', 'right_eye_openness_score', 'sharpness_score', 'total_score', 'watermark_score';
    • "estimation" - в данном режиме оценивается качество изображения в целом, а результат ("total_score") представляет собой реальное число от 0 (худшее качество) до 1 (идеальное качество).
configCtx["unit_type"] = "QUALITY_ASSESSMENT_ESTIMATOR";
//specify one key
configCtx["modification"] = "assessment"; //to evaluate metrics and obtain their results
// or
configCtx["modification"] = "estimation"; //to evaluate metrics and obtain photo quality values

// optional, default values are specified after "="
// paths specified for examples located in <sdk_dir>/bin
configCtx["sdk_path"] = "..";
configCtx["config_name"] = "quality_assessment.xml";
configCtx["facerec_conf_dir"] = sdk_path + "/conf/facerec/"

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-изображением в бинарном формате, выполнив шаги (1-3, 4.b), описанные в разделе Создание контейнера Context c RGB-изображением:

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

2.3.1 Создайте объект Capturer:

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

2.3.2 Выполните детекцию лиц с помощью метода capture:

std::vector<pbio::RawSample::Ptr> samples = capturer->capture(input_rawimg);

2.4.1 Каждый sample сконвертируйте в Context-контейнер и добавьте в objects:

auto objectsCtx = ioData["objects"];
for(auto &sample: samples)
{
objectsCtx.push_back(sample->toContext());
}

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

qualityAssessmentEstimator(ioData);

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

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

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

По ключу "quality" расположен контекст с полным набором оценок (результат работы метода qualityAssessmentEstimator()).

  • Ключ "total_score" содержит общую оценку типа long в диапазоне [0,100]

assessment modification

/*
{
"quality": {
"total_score": {"type": "long", "minimum": 0, "maximum": 100},
"is_sharp": {"type": "boolean"},
"sharpness_score": {"type": "long", "minimum": 0, "maximum": 100},
"is_evenly_illuminated": {"type": "boolean"},
"illumination_score": {"type": "long", "minimum": 0, "maximum": 100},
"no_flare": {"type": "boolean"},
"is_left_eye_opened": {"type": "boolean"},
"left_eye_openness_score": {"type": "long", "minimum": 0, "maximum": 100},
"is_right_eye_opened": {"type": "boolean"},
"right_eye_openness_score": {"type": "long", "minimum": 0, "maximum": 100},
"is_rotation_acceptable": {"type": "boolean"},
"max_rotation_deviation": {"type": "long"},
"not_masked": {"type": "boolean"},
"not_masked_score": {"type": "long", "minimum": 0, "maximum": 100},
"is_neutral_emotion": {"type": "boolean"},
"neutral_emotion_score": {"type": "long", "minimum": 0, "maximum": 100},
"is_eyes_distance_acceptable": {"type": "boolean"},
"eyes_distance": {"type": "long", "minimum": 0}
"is_margins_acceptable": {"type": "boolean"},
"margin_outer_deviation": {"type": "long", "minimum": 0}
"margin_inner_deviation": {"type": "long", "minimum": 0}
"is_not_noisy": {"type": "boolean"},
"noise_score": {"type": "long", "minimum": 0, "maximum": 100},
"watermark_score": {"type": "long", "minimum": 0},
"has_watermark": {"type": "boolean"},
"dynamic_range_score": {"type": "long", "minimum": 0},
"is_dynamic_range_acceptable": {"type": "boolean"},
"is_background_uniform": {"type": "boolean"},
"background_uniformity_score": {"type": "long", "minimum": 0, "maximum": 100}
}
}
*/