Skip to content

Image Quality

  • When enabled, the image quality check status affects the optical and overall document statuses:
DocReader.shared.processParams.strictImageQuality = true
RGLDocReader.shared.processParams.strictImageQuality = @YES;
DocumentReader.Instance().processParams().strictImageQuality = true
DocumentReader.Instance().processParams().strictImageQuality = true;
DocumentReader.instance.processParams.strictImageQuality = true;
DocumentReader.instance.processParams.strictImageQuality = true
// Android
DocumentReader.Instance().ProcessParams().StrictImageQuality = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.StrictImageQuality = true;
DocumentReader.setProcessParams({
    strictImageQuality: true
}, _ => { }, _ => { });
DocumentReader.setProcessParams({
    strictImageQuality: true
});
DocumentReader.setProcessParams({
    strictImageQuality: true
}, function (m) { }, function (e) { });
  • Set the threshold for the actual DPI of the document below which the check fails:
DocReader.shared.processParams.imageQA.dpiThreshold = 150
RGLDocReader.shared.processParams.imageQA.dpiThreshold = @150;
DocumentReader.Instance().processParams().imageQA.dpiThreshold = 150
DocumentReader.Instance().processParams().imageQA.dpiThreshold = 150;
DocumentReader.instance.processParams.imageQA.dpiThreshold = 150;
DocumentReader.instance.processParams.imageQA.dpiThreshold = 150
// Android
DocumentReader.Instance().ProcessParams().ImageQA.DpiThreshold = (Java.Lang.Integer)150;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.DpiThreshold = 150;
DocumentReader.setProcessParams({
    imageQA: {
        dpiThreshold: 150
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        dpiThreshold: 150
    }
});
DocumentReader.setProcessParams({
    imageQA: {
          dpiThreshold: 150
    }
}, function (m) { }, function (e) { console.log(e); });
  • Set the threshold for the actual perspective angle of the document above which the check fails:
DocReader.shared.processParams.imageQA.angleThreshold = 5
RGLDocReader.shared.processParams.imageQA.angleThreshold = @5;
DocumentReader.Instance().processParams().imageQA.angleThreshold = 5
DocumentReader.Instance().processParams().imageQA.angleThreshold = 5;
DocumentReader.instance.processParams.imageQA.angleThreshold = 5;
DocumentReader.instance.processParams.imageQA.angleThreshold = 5
// Android
DocumentReader.Instance().ProcessParams().ImageQA.AngleThreshold = (Java.Lang.Integer)5;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.AngleThreshold = 5;
DocumentReader.setProcessParams({
    imageQA: {
        angleThreshold: 5
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        angleThreshold: 5
    }
});
DocumentReader.setProcessParams({
    imageQA: {
          angleThreshold: 5
    }
}, function (m) { }, function (e) { console.log(e); });
  • Enable or disable the focus check for the image quality validation:
DocReader.shared.processParams.imageQA.focusCheck = true
RGLDocReader.shared.processParams.imageQA.focusCheck = @YES;
DocumentReader.Instance().processParams().imageQA.focusCheck = true
DocumentReader.Instance().processParams().imageQA.focusCheck = true;
DocumentReader.instance.processParams.imageQA.focusCheck = true;
DocumentReader.instance.processParams.imageQA.focusCheck = true
// Android
DocumentReader.Instance().ProcessParams().ImageQA.FocusCheck = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.FocusCheck = true;
DocumentReader.setProcessParams({
    imageQA: {
        focusCheck: true
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        focusCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
DocumentReader.setProcessParams({
    imageQA: {
          focusCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
  • Enable or disable the glares check for the image quality validation:
DocReader.shared.processParams.imageQA.glaresCheck = true
RGLDocReader.shared.processParams.imageQA.glaresCheck = @YES;
DocumentReader.Instance().processParams().imageQA.glaresCheck = true
DocumentReader.Instance().processParams().imageQA.glaresCheck = true;
DocumentReader.instance.processParams.imageQA.glaresCheck = true;
DocumentReader.instance.processParams.imageQA.glaresCheck = true
// Android
DocumentReader.Instance().ProcessParams().ImageQA.GlaresCheck = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.GlaresCheck = true;
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
DocumentReader.setProcessParams({
    imageQA: {
          glaresCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
  • If the glares check is enabled, you can specify the indent from the document image border within which the glare detection will be ignored:
DocReader.shared.processParams.imageQA.glaresCheck = true
let glaresCheckParams = ImageQA.GlaresCheckParams()
glaresCheckParams.imgMarginPart = 0.05
DocReader.shared.processParams.imageQA.glaresCheckParams = glaresCheckParams
RGLDocReader.shared.processParams.imageQA.glaresCheck = @(YES);
RGLGlaresCheckParams *glaresCheckParams = [[RGLGlaresCheckParams alloc] init];
glaresCheckParams.imgMarginPart = @(0.05);
RGLDocReader.shared.processParams.imageQA.glaresCheckParams = glaresCheckParams;
DocumentReader.Instance().processParams().imageQA.glaresCheck = true
DocumentReader.Instance().processParams().imageQA.glaresCheckParams = ImageQA.GlaresCheckParams()
DocumentReader.Instance().processParams().imageQA.glaresCheckParams.imgMarginPart = 0.05
DocumentReader.Instance().processParams().imageQA.glaresCheck = true;
DocumentReader.Instance().processParams().imageQA.glaresCheckParams = new ImageQA.GlaresCheckParams();
DocumentReader.Instance().processParams().imageQA.glaresCheckParams.imgMarginPart = 0.05;
DocumentReader.instance.processParams.imageQA.glaresCheck = true;
DocumentReader.instance.processParams.imageQA.glaresCheckParams = new GlaresCheckParams(imgMarginPart: 0.05);
DocumentReader.instance.processParams.imageQA.glaresCheck = true
DocumentReader.instance.processParams.imageQA.glaresCheckParams = new GlaresCheckParams({ imgMarginPart: 0.05 })
// Android
DocumentReader.Instance().ProcessParams().ImageQA.GlaresCheck = (Java.Lang.Boolean)true;
DocumentReader.Instance().ProcessParams().ImageQA.GlaresCheckParams = new ImageQA.GlaresCheckParams();
DocumentReader.Instance().ProcessParams().ImageQA.GlaresCheckParams.ImgMarginPart = (Java.Lang.Double)0.05;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.GlaresCheck = true;
RGLDocReader.Shared.ProcessParams.ImageQA.GlaresCheckParams.ImgMarginPart = 0.05;
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true,
        glaresCheckParams: {
          imgMarginPart: 0.05
        },
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true,
        glaresCheckParams: {
          imgMarginPart: 0.05
        },
    }
});
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true,
        glaresCheckParams: {
          imgMarginPart: 0.05
        },
    }
}, function (m) { }, function (e) { console.log(e); });
  • If the glares check is enabled, you can specify the maximum size for glare-like objects that should not be considered as glares; only those exceeding this size will be validated:
DocReader.shared.processParams.imageQA.glaresCheck = true
let glaresCheckParams = ImageQA.GlaresCheckParams()
glaresCheckParams.maxGlaringPart = 0.01
DocReader.shared.processParams.imageQA.glaresCheckParams = glaresCheckParams
RGLDocReader.shared.processParams.imageQA.glaresCheck = @(YES);
RGLGlaresCheckParams *glaresCheckParams = [[RGLGlaresCheckParams alloc] init];
glaresCheckParams.maxGlaringPart = @(0.01);
RGLDocReader.shared.processParams.imageQA.glaresCheckParams = glaresCheckParams;
DocumentReader.Instance().processParams().imageQA.glaresCheck = true
DocumentReader.Instance().processParams().imageQA.glaresCheckParams = ImageQA.GlaresCheckParams()
DocumentReader.Instance().processParams().imageQA.glaresCheckParams.maxGlaringPart = 0.01
DocumentReader.Instance().processParams().imageQA.glaresCheck = true;
DocumentReader.Instance().processParams().imageQA.glaresCheckParams = new ImageQA.GlaresCheckParams();
DocumentReader.Instance().processParams().imageQA.glaresCheckParams.maxGlaringPart = 0.01;
DocumentReader.instance.processParams.imageQA.glaresCheck = true;
DocumentReader.instance.processParams.imageQA.glaresCheckParams = new GlaresCheckParams(maxGlaringPart: 0.01);
DocumentReader.instance.processParams.imageQA.glaresCheck = true
DocumentReader.instance.processParams.imageQA.glaresCheckParams = new GlaresCheckParams({ maxGlaringPart: 0.01 })
// Android
DocumentReader.Instance().ProcessParams().ImageQA.GlaresCheck = (Java.Lang.Boolean)true;
DocumentReader.Instance().ProcessParams().ImageQA.GlaresCheckParams = new ImageQA.GlaresCheckParams();
DocumentReader.Instance().ProcessParams().ImageQA.GlaresCheckParams.MaxGlaringPart = (Java.Lang.Double)0.01;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.GlaresCheck = true;
RGLDocReader.Shared.ProcessParams.ImageQA.GlaresCheckParams.MaxGlaringPart = 0.01;
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true,
        glaresCheckParams: {
          maxGlaringPart: 0.01
        },
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true,
        glaresCheckParams: {
          maxGlaringPart: 0.01
        },
    }
});
DocumentReader.setProcessParams({
    imageQA: {
        glaresCheck: true,
        glaresCheckParams: {
          maxGlaringPart: 0.01
        },
    }
}, function (m) { }, function (e) { console.log(e); });
  • Enable or disable the colorness check for the image quality validation:
DocReader.shared.processParams.imageQA.colornessCheck = true
RGLDocReader.shared.processParams.imageQA.colornessCheck = @YES;
DocumentReader.Instance().processParams().imageQA.colornessCheck = true
DocumentReader.Instance().processParams().imageQA.colornessCheck = true;
DocumentReader.instance.processParams.imageQA.colornessCheck = true;
DocumentReader.instance.processParams.imageQA.colornessCheck = true
// Android
DocumentReader.Instance().ProcessParams().ImageQA.ColornessCheck = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.ColornessCheck = true;
DocumentReader.setProcessParams({
    imageQA: {
        colornessCheck: true
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        colornessCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
DocumentReader.setProcessParams({
    imageQA: {
          colornessCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
  • Set the threshold for the actual brightness of the document below which the check fails:
DocReader.shared.processParams.imageQA.brightnessThreshold = 1.5
RGLDocReader.shared.processParams.imageQA.brightnessThreshold = @1.5;
DocumentReader.Instance().processParams().imageQA.brightnessThreshold = 1.5
DocumentReader.Instance().processParams().imageQA.brightnessThreshold = 1.5;
DocumentReader.instance.processParams.imageQA.brightnessThreshold = 1.5;
DocumentReader.instance.processParams.imageQA.brightnessThreshold = 1.5
// Android
DocumentReader.Instance().ProcessParams().ImageQA.BrightnessThreshold = (Java.Lang.Double)1.5;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.BrightnessThreshold = 1.5;
DocumentReader.setProcessParams({
    imageQA: {
        brightnessThreshold: 1.5
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        brightnessThreshold: 1.5
    }
});
DocumentReader.setProcessParams({
    imageQA: {
          brightnessThreshold: 1.5
    }
}, function (m) { }, function (e) { console.log(e); });
  • Enable the occlusion detection to identify cases where parts of a document are covered by fingers, hands, or other objects during image capture. Disabled by default.
DocReader.shared.processParams.imageQA.occlusionCheck = true
RGLDocReader.shared.processParams.imageQA.occlusionCheck = @YES;
DocumentReader.Instance().processParams().imageQA.occlusionCheck = true
DocumentReader.Instance().processParams().imageQA.occlusionCheck = true;
DocumentReader.instance.processParams.imageQA.occlusionCheck = true;
DocumentReader.instance.processParams.imageQA.occlusionCheck = true
// Android
DocumentReader.Instance().ProcessParams().ImageQA.OcclusionCheck = (Java.Lang.Boolean)true;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.OcclusionCheck = true;
DocumentReader.setProcessParams({
    imageQA: {
        OcclusionCheck: true
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        OcclusionCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
DocumentReader.setProcessParams({
    imageQA: {
          OcclusionCheck: true
    }
}, function (m) { }, function (e) { console.log(e); });
  • If the occlusion check is enabled, you can specify the maximum size for the occluded area of a document; only those exceeding this size will be validated:
DocReader.shared.processParams.imageQA.occlusionCheck = true
let occlusionCheckParams = ImageQA.OcclusionCheckParams()
occlusionCheckParams.maxOcclusionPart = 0.005
DocReader.shared.processParams.imageQA.occlusionCheckParams = occlusionCheckParams
RGLDocReader.shared.processParams.imageQA.occlusionCheck = @(YES);
RGLOcclusionCheckParams *occlusionCheckParams = [[RGLOcclusionCheckParams alloc] init];
occlusionCheckParams.maxOcclusionPart = @(0.005);
RGLDocReader.shared.processParams.imageQA.occlusionCheckParams = occlusionCheckParams;
DocumentReader.Instance().processParams().imageQA.occlusionCheck = true
DocumentReader.Instance().processParams().imageQA.occlusionCheckParams = ImageQA.OcclusionCheckParams()
DocumentReader.Instance().processParams().imageQA.occlusionCheckParams.maxOcclusionPart = 0.005
DocumentReader.Instance().processParams().imageQA.occlusionCheck = true;
DocumentReader.Instance().processParams().imageQA.occlusionCheckParams = new ImageQA.OcclusionCheckParams();
DocumentReader.Instance().processParams().imageQA.occlusionCheckParams.maxOcclusionPart = 0.005;
DocumentReader.instance.processParams.imageQA.occlusionCheck = true;
DocumentReader.instance.processParams.imageQA.occlusionCheckParams = new OcclusionCheckParams(maxOcclusionPart: 0.005);
DocumentReader.instance.processParams.imageQA.occlusionCheck = true
DocumentReader.instance.processParams.imageQA.occlusionCheckParams = new OcclusionCheckParams({ maxOcclusionPart: 0.005 })
// Android
DocumentReader.Instance().ProcessParams().ImageQA.occlusionCheck = (Java.Lang.Boolean)true;
DocumentReader.Instance().ProcessParams().ImageQA.OcclusionCheckParams = new ImageQA.OcclusionCheckParams();
DocumentReader.Instance().ProcessParams().ImageQA.OcclusionCheckParams.MaxOcclusionPart = (Java.Lang.Double)0.005;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.OcclusionCheck = true;
RGLDocReader.Shared.ProcessParams.ImageQA.OcclusionCheckParams.MaxOcclusionPart = 0.005;
DocumentReader.setProcessParams({
    imageQA: {
        occlusionCheck: true,
        occlusionCheckParams: {
          maxOcclusionPart: 0.005
        },
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        occlusionCheck: true,
        occlusionCheckParams: {
          maxOcclusionPart: 0.005
        },
    }
});
DocumentReader.setProcessParams({
    imageQA: {
        occlusionCheck: true,
        occlusionCheckParams: {
          maxOcclusionPart: 0.005
        },
    }
}, function (m) { }, function (e) { console.log(e); });
  • Use the following parameter to specify which image quality checks must pass for the image to be accepted during scanning.
DocReader.shared.processParams.imageQA.expectedPass = [.imageResolution, .imageGlares]
RGLDocReader.shared.processParams.imageQA.expectedPass = @[RGLImageQualityCheckTypeImageResolution, RGLImageQualityCheckTypeImageGlares];
DocumentReader.Instance().processParams().imageQA!!.expectedPass = intArrayOf(
        eImageQualityCheckType.IQC_IMAGE_RESOLUTION,
        eImageQualityCheckType.IQC_IMAGE_GLARES
    )
DocumentReader.Instance().processParams().imageQA.expectedPass = new int[] {eImageQualityCheckType.IQC_IMAGE_RESOLUTION, eImageQualityCheckType.IQC_IMAGE_GLARES};
DocumentReader.instance.processParams.imageQA.expectedPass = [
  ImageQualityCheckType.IMAGE_RESOLUTION,
  ImageQualityCheckType.IMAGE_GLARES
];
DocumentReader.instance.processParams.imageQA.expectedPass = [
  ImageQualityCheckType.IMAGE_RESOLUTION,
  ImageQualityCheckType.IMAGE_GLARES
]
// Android
DocumentReader.Instance().ProcessParams().ImageQA.ExpectedPass = new int[] { EImageQualityCheckType.IqcImageResolution, EImageQualityCheckType.IqcImageGlares};

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.ExpectedPass = { Constants.RGLImageQualityCheckTypeImageGlares, Constants.RGLImageQualityCheckTypeImageColorness };
DocumentReader.setProcessParams({
    imageQA: {
        expectedPass: [
            eImageQualityCheckType.IQC_IMAGE_RESOLUTION,
            eImageQualityCheckType.IQC_IMAGE_GLARES
        ]
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        expectedPass: [
            eImageQualityCheckType.IQC_IMAGE_RESOLUTION,
            eImageQualityCheckType.IQC_IMAGE_GLARES
          ]
    }
}, function (m) { }, function (e) { console.log(e); });
DocumentReader.setProcessParams({
    imageQA: {
        expectedPass: [
            eImageQualityCheckType.IQC_IMAGE_RESOLUTION,
            eImageQualityCheckType.IQC_IMAGE_GLARES
        ]
    }
}, function (m) { }, function (e) { console.log(e); });
  • Specify the minimum indent from the corners of the document to the borders of the image. The value reflects the allowed percentage for the indent relative to the width of the document. If it is detected that the corners of the document are closer than the specified value, the status will contain an error in the documentPosition field.
DocReader.shared.processParams.imageQA.documentPositionIndent = 5
RGLDocReader.shared.processParams.imageQA.documentPositionIndent = @5;    
DocumentReader.Instance().processParams().imageQA.documentPositionIndent = 5
DocumentReader.Instance().processParams().imageQA.documentPositionIndent = 5;
DocumentReader.instance.processParams.imageQA.documentPositionIndent = 5;
DocumentReader.instance.processParams.imageQA.documentPositionIndent = 5
// Android
DocumentReader.Instance().ProcessParams().ImageQA.DocumentPositionIndent = (Java.Lang.Integer)5;

// iOS
RGLDocReader.Shared.ProcessParams.ImageQA.DocumentPositionIndent = 5;
DocumentReader.setProcessParams({
    imageQA: {
        documentPositionIndent: 5
    }
}, (str) => { console.log(str) }, (error) => { console.log(error) });
DocumentReader.setProcessParams({
    imageQA: {
        documentPositionIndent: 5
    }
});
DocumentReader.setProcessParams({
    imageQA: {
          documentPositionIndent: 5
    }
}, function (m) { }, function (e) { console.log(e); });

Next Steps