Оценка качества изображения
Блок оценки качества изображения лица
Модификации процессинг-блока оценки качества
На данный момент существует следующие модификации:
- "assessment"- первый из реализованных режимов блока Quality 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.
- 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.
- 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- логическое значение, проверка открытости рта
 
- "estimation"- в данном режиме оценивается качество изображения в целом, а результат (- "total_score") представляет собой реальное число от 0 (худшее качество) до 1 (идеальное качество).
Спецификация процессинг-блока оценки качества
- Входной контейнер 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:
- assessment v1
- assessment v2
- estimation
{
    "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}
    }
}
{
    "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" },
    }
}
[{
    "quality": {
        "total_score": {"type": "double", "minimum": 0, "maximum": 1}
    }
}]
Пример работы процессинг-блока
- Создайте конфигурационный контейнер Context и укажите значения - "unit_type",- "modification",- "version", интересующего вас блока Пример создания процессинг-блока вы можете найти на странице Работа с процессинг-блоком.
- Передайте контейнер-контекст полученный после работы процессинг-блоков детекции лица и фиттера. 
- Вызовете процессинг-блок оценки. 
- Получите результат работы процессинг-блока. 
- C++
- Python
- Flutter
- C#
- Java
- Kotlin
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();
configCtx = {"unit_type": "QUALITY_ASSESSMENT_ESTIMATOR"}
blockQuality = service.create_processing_block(configCtx)
#------------------
# создание процессинг-блока и контейнера Context с бинарным изображением
#------------------
faceDetector(ioData)
faceFitter(ioData)
blockQuality(ioData)
total_score = ioData["objects"][0]["quality"]["total_score"].get_value()
ProcessingBlock blockQuality = service.createProcessingBlock({"unit_type": "QUALITY_ASSESSMENT_ESTIMATOR"});
//------------------
// создание процессинг-блока и контейнера Context с бинарным изображением
//------------------
faceDetector.process(ioData);
faceFitter.process(ioData);
blockQuality.process(ioData);
double total_score = ioData["objects"][0]["quality"]["total_score"].get_value();
Dictionary<object, object> configCtx = new();
configCtx["unit_type"] = "QUALITY_ASSESSMENT_ESTIMATOR";
ProcessingBlock blockQuality = service.CreateProcessingBlock(configCtx);
//------------------
// создание процессинг-блока оценки лица и Context-контейнера с бинарным изображением
//------------------
faceDetector.Invoke(ioData);
faceFitter.Invoke(ioData);
blockQuality.Invoke(ioData);
double total_score = ioData["objects"][0]["quality"]["total_score"].GetDouble();
Context configCtx = service.createContext();
configCtx.get("unit_type").setString("QUALITY_ASSESSMENT_ESTIMATOR");
ProcessingBlock blockQuality = service.createProcessingBlock(configCtx);
//------------------
// создание процессинг-блока оценки лица и Context-контейнера с бинарным изображением
//------------------
faceDetector.process(ioData);
faceFitter.process(ioData);
blockQuality.process(ioData);
double total_score = ioData.get("objects").get(0).get("quality").get("total_score").getDouble();
val configCtx = service.createContext()
configCtx["unit_type"].string = "QUALITY_ASSESSMENT_ESTIMATOR"
val blockQuality = service.createProcessingBlock(configCtx)
//------------------
// создание процессинг-блока оценки лица и Context-контейнера с бинарным изображением
//------------------
faceDetector.process(ioData)
faceFitter.process(ioData)
blockQuality.process(ioData)
val total_score = ioData["objects"][0]["quality"]["total_score"].double
Для точной оценки требуется только одно лицо человека в кадре, смотрящее в камеру, иначе общий балл будет низким, поскольку алгоритм учитывает относительный размер, положение и направленность головы.
Если захвачено несколько лиц, каждое из них будет обработано независимо.