Skip to content

Face Image Quality Assessment

You can use the face image quality assessment feature to check if a portrait meets certain standards. Find the detailed information on how it works in the Web Service section.

Request

// with default values
configuration.customQuality = ImageQualityGroup.FaceImage.allRecommended()

// or with custom values
configuration.customQuality = [
  ImageQualityGroup.FaceImage.blurLevel().withCustomRange([0.1, 0.4]),
  ImageQualityGroup.Background.otherFaces().withCustomValue(2),
  ImageQualityGroup.HeadOcclusion.headphones().withCustomRange([0.0, 0.1]),
]

let detectFacesRequest = DetectFacesRequest(image: image,
                                    configuration: configuration)
// with default values
[configuration setCustomQuality:[RFSFaceImageQuality allRecommended]];

// or with custom values
[configuration setCustomQuality:@[
  [[RFSFaceImageQuality blurLevel] withCustomRange:@[@0.1, @0.4]],
  [[RFSQualityBackground otherFaces] withCustomValue: @2],
  [[RFSHeadOcclusion headphones] withCustomRange:@[@0, @0.1]],
]];

RFSDetectFacesRequest *detectFacesRequest = [[RFSDetectFacesRequest alloc] initWithImage:image
                                                                           configuration:configuration];
val configuration = DetectFacesConfiguration()

// with default values
configuration.customQuality = ImageQualityGroup.FaceImageQuality.allRecommended()  

// or with custom values
configuration.customQuality = listOf(
    ImageQualityGroup.FaceImageQuality.blurLevel().withCustomRange(0.1, 0.4),
    ImageQualityGroup.QualityBackground.otherFaces().withCustomValue(2.0),
    ImageQualityGroup.HeadOcclusion.headphones().withCustomRange(0.0, 0.1)
)

val detectFacesRequest = DetectFacesRequest(bitmap, configuration)
DetectFacesConfiguration configuration = new DetectFacesConfiguration();

// with default values
configuration.setCustomQuality(ImageQualityGroup.FaceImageQuality.allRecommended());

// or with custom values
configuration.setCustomQuality(Arrays.asList(
    ImageQualityGroup.FaceImageQuality.blurLevel().withCustomRange(0.1, 0.4),
    ImageQualityGroup.QualityBackground.otherFaces().withCustomValue(2),
    ImageQualityGroup.HeadOcclusion.headphones().withCustomRange(0.0, 0.1)));

DetectFacesRequest detectFacesRequest = new DetectFacesRequest(bitmap, configuration);
// with custom values
let configuration = new DetectFacesConfiguration()

let q1 = new ImageQualityCharacteristic()
q1.characteristicName = ImageQualityCharacteristicName.BLUR_LEVEL
let r1 = new ImageQualityRange()
r1.min = 0.1
r1.max = 0.4
q1.customRange = r1

let q2 = new ImageQualityCharacteristic()
q2.characteristicName = ImageQualityCharacteristicName.OTHER_FACES
let r2 = new ImageQualityRange()
r2.min = 2
r2.max = 2
q2.customRange = r2

let q3 = new ImageQualityCharacteristic()
q3.characteristicName = ImageQualityCharacteristicName.HEAD_PHONES
let r3 = new ImageQualityRange()
r3.min = 0
r3.max = 0.1
q3.customRange = r3

let customQuality = [q1, q2, q3]
configuration.customQuality = customQuality

let detectFacesRequest = new DetectFacesRequest()
detectFacesRequest.image = bitmap
detectFacesRequest.configuration = configuration
// with custom values
var configuration = new DetectFacesConfiguration();

var q1 = new ImageQualityCharacteristic();
q1.characteristicName = ImageQualityCharacteristicName.BLUR_LEVEL;
var r1 = new ImageQualityRange();
r1.min = 0.1;
r1.max = 0.4;
q1.customRange = r1;

var q2 = new ImageQualityCharacteristic();
q2.characteristicName = ImageQualityCharacteristicName.OTHER_FACES;
var r2 = new ImageQualityRange();
r2.min = 2;
r2.max = 2;
q2.customRange = r2;

var q3 = new ImageQualityCharacteristic();
q3.characteristicName = ImageQualityCharacteristicName.HEAD_PHONES;
var r3 = new ImageQualityRange();
r3.min = 0;
r3.max = 0.1;
q3.customRange = r3;

var customQuality = [q1, q2, q3];
configuration.customQuality = customQuality;

var detectFacesRequest = new DetectFacesRequest();
detectFacesRequest.image = bitmap;
detectFacesRequest.configuration = configuration;
// with custom values
configuration = new DetectFacesConfiguration()

q1 = new ImageQualityCharacteristic()
q1.characteristicName = Enum.ImageQualityCharacteristicName.BLUR_LEVEL
r1 = new ImageQualityRange()
r1.min = 0.1
r1.max = 0.4
q1.customRange = r1

q2 = new ImageQualityCharacteristic()
q2.characteristicName = Enum.ImageQualityCharacteristicName.OTHER_FACES
r2 = new ImageQualityRange()
r2.min = 2
r2.max = 2
q2.customRange = r2

q3 = new ImageQualityCharacteristic()
q3.characteristicName = Enum.ImageQualityCharacteristicName.HEAD_PHONES
r3 = new ImageQualityRange()
r3.min = 0
r3.max = 0.1
q3.customRange = r3

customQuality = [q1, q2, q3]
configuration.customQuality = customQuality

detectFacesRequest = new DetectFacesRequest()
detectFacesRequest.image = bitmap
detectFacesRequest.configuration = configuration
  // with custom values
  let configuration = new DetectFacesConfiguration()

  let q1 = new ImageQualityCharacteristic()
  q1.characteristicName = ImageQualityCharacteristicName.BLUR_LEVEL
  let r1 = new ImageQualityRange()
  r1.min = 0.1
  r1.max = 0.4
  q1.customRange = r1

  let q2 = new ImageQualityCharacteristic()
  q2.characteristicName = ImageQualityCharacteristicName.OTHER_FACES
  let r2 = new ImageQualityRange()
  r2.min = 2
  r2.max = 2
  q2.customRange = r2

  let q3 = new ImageQualityCharacteristic()
  q3.characteristicName = ImageQualityCharacteristicName.HEAD_PHONES
  let r3 = new ImageQualityRange()
  r3.min = 0
  r3.max = 0.1
  q3.customRange = r3

  let customQuality = [q1, q2, q3]
  configuration.customQuality = customQuality

  let detectFacesRequest = new DetectFacesRequest()
  detectFacesRequest.image = bitmap
  detectFacesRequest.configuration = configuration

Response

detectFaceResponse.detection?.quality?.forEach { imageQualityResult in
  let status = imageQualityResult.status
  let group = imageQualityResult.group
  let tname = imageQualityResult.name
  let range = imageQualityResult.range
  let value = imageQualityResult.value
}
for (RFSImageQualityResult *imageQualityResult in detectFaceResponse.detection.quality) {
  RFSImageQualityResultStatus status = imageQualityResult.status;
  RFSImageQualityGroup group = imageQualityResult.group;
  RFSImageQualityCharacteristicName name = imageQualityResult.name;
  RFSImageQualityRange *range = imageQualityResult.range;
  NSNumber *value = imageQualityResult.value;
}
for (imageQuality in detectFacesResponse.detection!!.quality!!) {
    val status = imageQuality.status
    val group = imageQuality.group
    val name = imageQuality.name
    val range = imageQuality.range
    val value = imageQuality.value
}
for (ImageQualityResult imageQuality : detectFacesResponse.getDetection().getQuality()) {
    ImageQualityResultStatus status = imageQuality.getStatus();
    ImageQualityGroupName group = imageQuality.getGroup();
    ImageQualityCharacteristicName name = imageQuality.getName();
    ImageQualityRange range = imageQuality.getRange();
    double value = imageQuality.getValue();
}
  detectFacesResponse.detection.quality.forEach(quality => {
    let status = quality.status
    let group = quality.group
    let name = quality.name
    let range = quality.range
    let value = quality.value
  })
  detectFacesResponse?.detection?.quality.forEach((quality) {
    var status = quality?.status;
    var group = quality?.group;
    var name = quality?.name;
    var range = quality?.range;
    var value = quality?.value;
  });
  detectFacesResponse.detection.quality.forEach(quality => {
    status = quality.status
    group = quality.group
    name = quality.name
    range = quality.range
    value = quality.value
  })
    detectFacesResponse.detection.quality.forEach(quality => {
      let status = quality.status
      let group = quality.group
      let name = quality.name
      let range = quality.range
      let value = quality.value
    })