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

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

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

Под оценкой качества изображения лица в Face SDK понимается проверка соответствия изображения стандартам качества, описанным в таких документах, таких как ISO/IEC 19794-5:2011 или ICAO Guidelines for Passport Photographs.

В рамках этой процедуры реализован широкий набор проверок качества. Однако для современных алгоритмов распознавания не все из них одинаково значимы для обеспечения точности распознавания лиц.

Поэтому, если вам требуется контроль качества лиц исключительно для минимизации ошибок распознавания или при использовании Liveness Detection, см. Контроль качества изображений.

Время работы модификаций блока оценки качества

Модификация Версия Версия Face SDK Время детекции CPU (мс)* Время детекции GPU (мс)** Процент отбрасываемых по total_score худших сэмпловFNMRFPR
assessment13.16595710.00971.98E-07
50.00872.00E-07
100.00812.11E-07
23.24626110.00971.98E-07
50.00872.00E-07
100.00812.11E-07
* - CPU Intel Xeon E5-2683 v4 (1 ядро)
** - GPU (NVIDIA GTX 10xx серия)

Создание и конфигурирование блока

Модификация "assessment" — первый из реализованных режимов блока Quality Assessment, наиболее подходящий для задач проверки качества изображений лиц на соответствие таким стандартам, как ISO/IEC 19794-5:2011 или ICAO Guidelines for Passport Photographs. Все результаты отдельных проверок агрегируются в общий показатель total_score, который отражает, насколько фотография соответствует стандарту.

На данный момент рекомендуется использовать вторую версию модификации assessment. Обратите внимание: для корректной оценки на изображении должно присутствовать только одно лицо, смотрящее прямо в камеру. В противном случае итоговый балл может быть занижен. При захвате нескольких лиц сразу, каждое из них будет обработано независимо.

Параметры, оцениваемые модификацией "assessment" 1-й версии

Нажмите, чтобы отобразить список оцениваемых параметров
  • total_score - численное значение, обозначает общую оценку качества изображения в баллах от 0 до 1.
  • is_background_uniform - логическое значение, указывает на однородность фона.
  • background_uniformity_score - численное значение, оценка однородности фона в баллах от 0 до 1.
  • is_dynamic_range_acceptable - логическое значение, показывает, что динамический диапазон интенсивности изображения в области лица превышает или не превышает значение 1,28.
  • dynamic_range_score - численное значение, оценка динамического диапазона интенсивности в баллах от 0 до 2.55.
  • is_eyes_distance_acceptable - логическое значение, обозначает допустимое/недопустимое расстояние между глазами.
  • eyes_distance - численное значение расстояния между глазами в пикселях.
  • is_evenly_illuminated - логическое значение, обозначает равномерность освещения на изображении.
  • illumination_score - численное значение, оценка равномерности освещения в баллах от 0 до 1.
  • no_flare - логическое значение, указывает на наличие или отсутствие вспышек на изображении.
  • is_left_eye_opened - логическое значение, обозначает положение левого глаза (открыт или закрыт).
  • left_eye_openness_score - численное значение, обозначает степень открытости глаза в баллах от 0 до 1.
  • is_right_eye_opened - логическое значение, обозначает положение правого глаза (открыт или закрыт).
  • right_eye_openness_score - численное значение, обозначает степень открытости глаза в баллах от 0 до 1.
  • is_neutral_emotion - логическое значение, обозначает наличие или отсутствие нейтрального выражения лица.
  • neutral_emotion_score - численное значение, оценка степени нейтральных эмоций в баллах от 0 до 1.
  • is_not_noisy - логическое значение, обозначает наличие или отсутствие шумов на изображении.
  • noise_score - численное значение, оценка зашумленности изображения в баллах от 0 до 1.
  • is_sharp - логическое значение, обозначает резкость изображения.
  • sharpness_score - численное значение, обозначает оценку резкости в баллах от 0 до 1.
  • is_margins_acceptable - логическое значение, обозначает допустимые/недопустимые отступы.
  • margin_inner_deviation - численное значение внутреннего отклонения в пикселях.
  • margin_outer_deviation - численное значение внешнего отклонения в пикселях.
  • is_rotation_acceptable - логическое значение, обозначает допустимый/недопустимый поворот головы.
  • max_rotation_deviation - численное значение, максимальный градус отклонения для трех (yaw, pitch, roll) углов поворота головы.
  • not_masked - логическое значение, указывает на наличие или отсутствие маски на лице.
  • not_masked_score - численное значение, обозначает степень уверенности в отсутствии маски на лице от 0 до 1.
  • has_watermark - логическое значение, указывает на наличие или отсутствие водяного знака на изображении.
  • watermark_score - численное значение, обозначает степень уверенности в наличии водяного знака на изображении от 0 до 1.

Параметры, оцениваемые модификацией "assessment" 2-й версии

Нажмите, чтобы отобразить список оцениваемых параметров
  • total_score - численное значение, обозначает общую оценку качества изображения в баллах от 0 до 1.
  • is_background_uniform - логическое значение, указывает на однородность фона.
  • background_uniformity_score - численное значение, оценка однородности фона в баллах от 0 до 1.
  • is_dynamic_range_acceptable - логическое значение, показывает, что динамический диапазон интенсивности изображения в области лица превышает или не превышает значение 1,28.
  • dynamic_range_score - численное значение, оценка динамического диапазона интенсивности в баллах от 0 до 2.55.
  • is_eyes_distance_acceptable - логическое значение, обозначает допустимое/недопустимое расстояние между глазами.
  • eyes_distance - численное значение расстояния между глазами в пикселях.
  • is_evenly_illuminated - логическое значение, обозначает равномерность освещения на изображении.
  • illumination_score - численное значение, оценка равномерности освещения в баллах от 0 до 1.
  • no_flare - логическое значение, указывает на наличие или отсутствие вспышек на изображении.
  • is_left_eye_opened - логическое значение, обозначает положение левого глаза (открыт или закрыт).
  • left_eye_openness_score - численное значение, обозначает степень открытости глаза в баллах от 0 до 1.
  • is_right_eye_opened - логическое значение, обозначает положение правого глаза (открыт или закрыт).
  • right_eye_openness_score - численное значение, обозначает степень открытости глаза в баллах от 0 до 1.
  • is_neutral_emotion - логическое значение, обозначает наличие или отсутствие нейтрального выражения лица.
  • neutral_emotion_score - численное значение, оценка степени нейтральных эмоций в баллах от 0 до 1.
  • is_not_noisy - логическое значение, обозначает наличие или отсутствие шумов на изображении.
  • noise_score - численное значение, оценка зашумленности изображения в баллах от 0 до 1.
  • is_sharp - логическое значение, обозначает резкость изображения.
  • sharpness_score - численное значение, обозначает оценку резкости в баллах от 0 до 1.
  • is_margins_acceptable - логическое значение, обозначает допустимые/недопустимые отступы.
  • margin_inner_deviation - численное значение внутреннего отклонения в пикселях.
  • margin_outer_deviation - численное значение внешнего отклонения в пикселях.
  • is_rotation_acceptable - логическое значение, обозначает допустимый/недопустимый поворот головы.
  • max_rotation_deviation - численное значение, максимальный градус отклонения для трех (yaw, pitch, roll) углов поворота головы.
  • not_masked - логическое значение, указывает на наличие или отсутствие маски на лице.
  • not_masked_score - численное значение, обозначает степень уверенности в отсутствии маски на лице от 0 до 1.
  • has_watermark - логическое значение, указывает на наличие или отсутствие водяного знака на изображении.
  • watermark_score - численное значение, обозначает степень уверенности в наличии водяного знака на изображении от 0 до 1.
  • face_width_pixels - численное значение, обозначает ширину лица в пикселях
  • face_height_pixels - численное значение, обозначает высоту лица в пикселях
  • face_size_on_image - численное значение, обозначает размер лица на изображении от 0 до 1 (ICAO-параметр)
  • is_face_size_acceptable - логическое значение, обозначает допустимый размер лица на изображении (70-80% от площади изображения) (ICAO-параметр)
  • is_image_gray - логическое значение, обозначает является ли изображение серым (ICAO-параметр)
  • min_image_dpi - численное значение, обозначает количество пикселей на дюйм (ICAO-параметр)
  • is_high_resolution - логическое значение, обозначает является ли изображение изображением в высоком качестве (ICAO-параметр)
  • image_width_to_height_ratio - численное значение, обозначает отношение ширины к высоте изображения
  • red_eyes_right_score - численное значение, оценка степени красноты правого глаза (ICAO-параметр)
  • red_eyes_left_score - численное значение, оценка степени красноты левого глаза (ICAO-параметр)
  • is_red_eyes - логическое значение, обозначает наличие красноты глаз (ICAO-параметр)
  • not_has_glasses - логическое значение, обозначает отсутствие очков (ICAO-параметр)
  • glasses_score - численное значение, обозначает оценку наличия очков от 0 до 1 (ICAO-параметр)
  • mouth_openness_score - численное значение, оценка степени открытости рта от до 1 (ICAO-параметр)
  • is_mouth_openness - логическое значение, обозначает является ли рот открытым (ICAO-параметр)
Ключевые точки

Для получения лучших результатов при оценке качества изображения с помощью модификации "assessment" 2-й версии следует использовать FACE_FITTER с модификацией tddfa или tddfa_faster.

Также, при оценке качества изображения с помощью модификации "assessment" 2-й версии можно отключать некоторые проверки, при этом отключенные проверки не будут влиять на итоговый результат.

Отключаемые проверки 2-й версии модификации "assessment"

Нажмите, чтобы отобразить список отключаемых параметров. Все параметры включены по умолчанию
  • enable_check_sharpness - логическое значение, проверка резкости
  • enable_check_illumination - логическое значение, проверка равномерности освещения
  • enable_check_flare - логическое значение, проверка вспышек
  • enable_check_noise - логическое значение, проверка шумов
  • enable_check_dynamic_range - логическое значение, проверка динамического диапазона интенсивности
  • enable_check_watermark - логическое значение, проверка водяного знака
  • enable_check_background - логическое значение, проверка однородности фона
  • enable_check_eye_openness - логическое значение, проверка открытости глаз
  • enable_check_mask - логическое значение, проверка наличия маски
  • enable_check_neutral_emotion - логическое значение, проверка эмоций
  • enable_check_eye_distance - логическое значение, проверка расстояния между глазами
  • enable_check_margin - логическое значение, проверка отступов
  • enable_check_rotation - логическое значение, проверка поворота головы
  • enable_check_resolution - логическое значение, проверка разрешения изображения
  • enable_check_gray_scale - логическое значение, проверка является ли изображение серым
  • enable_check_face_size - логическое значение, проверка размера лица
  • enable_check_red_eye - логическое значение, проверка красноты глаз
  • enable_check_glasses - логическое значение, проверка наличия очков
  • enable_check_mouth_openness - логическое значение, проверка открытости рта

Спецификация входного контейнера Context

Processing Block ожидает входной контейнер Context, содержащий бинарное изображение и массив объектов, полученных после работы процессинг-блоков детекции лица и фиттера:

Нажмите, чтобы развернуть спецификацию входного контейнера Context

{
"image" : {
"format": "NDARRAY",
"blob": "data pointer",
"dtype": "uint8_t",
"shape": [height, width, channels]
},
"objects": [{
"id": {"type": "long", "minimum": 0},
"class": "face",
"confidence": {"double", "minimum": 0, "maximum": 1},
"bbox": [x1, y2, x2, y2],
"keypoints": {
"left_eye_brow_left": {"proj" : [x, y]},
"left_eye_brow_up": {"proj" : [x, y]},
"left_eye_brow_right": {"proj" : [x, y]},
"right_eye_brow_left": {"proj" : [x, y]},
"right_eye_brow_up": {"proj" : [x, y]},
"right_eye_brow_right": {"proj" : [x, y]},
"left_eye_left": {"proj" : [x, y]},
"left_eye": {"proj" : [x, y]},
"left_eye_right": {"proj" : [x, y]},
"right_eye_left": {"proj" : [x, y]},
"right_eye": {"proj" : [x, y]},
"right_eye_right": {"proj" : [x, y]},
"left_ear_bottom": {"proj" : [x, y]},
"nose_left": {"proj" : [x, y]},
"nose": {"proj" : [x, y]},
"nose_right": {"proj" : [x, y]},
"right_ear_bottom": {"proj" : [x, y]},
"mouth_left": {"proj" : [x, y]},
"mouth": {"proj" : [x, y]},
"mouth_right": {"proj" : [x, y]},
"chin": {"proj" : [x, y]},
"points": {"proj" : [x, y]}
}
}]
}

Спецификация выходного контейнера

После вызова процессинг-блока оценки качества каждому объекту из массива "objects" будут добавлены соответствующие атрибуты.

Спецификация выходного контейнера Context:

{
"quality": {
"total_score": {"type": "double", "minimum": 0, "maximum": 1},
"is_sharp": {"type": "boolean"},
"sharpness_score": {"type": "double", "minimum": 0, "maximum": 1},
"is_evenly_illuminated": {"type": "boolean"},
"illumination_score": {"type": "double", "minimum": 0, "maximum": 1},
"no_flare": {"type": "boolean"},
"is_left_eye_opened": {"type": "boolean"},
"left_eye_openness_score": {"type": "double", "minimum": 0, "maximum": 1},
"is_right_eye_opened": {"type": "boolean"},
"right_eye_openness_score": {"type": "double", "minimum": 0, "maximum": 1},
"is_rotation_acceptable": {"type": "boolean"},
"max_rotation_deviation": {"type": "long"},
"not_masked": {"type": "boolean"},
"not_masked_score": {"type": "double", "minimum": 0, "maximum": 1},
"is_neutral_emotion": {"type": "boolean"},
"neutral_emotion_score": {"type": "double", "minimum": 0, "maximum": 1},
"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": "double", "minimum": 0, "maximum": 1},
"watermark_score": {"type": "long", "minimum": 0},
"has_watermark": {"type": "boolean"},
"dynamic_range_score": {"type": "double", "minimum": 0},
"is_dynamic_range_acceptable": {"type": "boolean"},
"is_background_uniform": {"type": "boolean"},
"background_uniformity_score": {"type": "double", "minimum": 0, "maximum": 1},
"face_width_pixels": { "type": "long" },
"face_height_pixels": { "type": "long" },
"face_size_on_image": { "type": "double", "minimum": 0, "maximum": 1 },
"is_face_size_acceptable": { "type": "boolean" },
"is_image_gray": { "type": "boolean" },
"min_image_dpi": { "type": "long" },
"is_high_resolution": { "type": "boolean" },
"image_width_to_height_ratio": { "type": "double" },
"red_eyes_right_score": { "type": "double" },
"red_eyes_left_score": { "type": "double" },
"is_red_eyes": { "type": "boolean" },
"glasses_score": { "type": "double", "minimum": 0, "maximum": 1 },
"not_has_glasses": { "type": "boolean" },
"mouth_openness_score": { "type": "double", "minimum": 0, "maximum": 1 },
"is_mouth_openness": { "type": "boolean" }
}
}

Пример работы процессинг-блока

  1. Создайте конфигурационный контейнер Context и укажите значения "unit_type", "modification", "version" для нужного вам блока. Пример создания процессинг-блока можно найти на странице Работа с процессинг-блоком.

  2. Передайте контейнер-контекст, полученный после работы процессинг-блоков детектора и фиттера.

  3. Вызовите процессинг-блок оценки.

  4. Получите результат работы процессинг-блока.

auto configCtx = service->createContext();
configCtx["unit_type"] = "QUALITY_ASSESSMENT_ESTIMATOR";
pbio::ProcessingBlock blockQuality = service->createProcessingBlock(configCtx);

//------------------
// создание процессинг-блока и контейнера Context с бинарным изображением
//------------------

faceDetector(ioData);
faceFitter(ioData);
blockQuality(ioData);

double total_score = ioData["objects"][0]["quality"]["total_score"].getDouble();