Skip to main content
Version: v8001

Handle low-quality or blurry images

BlinkID assesses the quality of every camera frame before it tries to extract data. You can control how strictly the SDK treats blur, glare, and poor lighting through the documentCaptureModule of ScanningSettings.

note

The built-in camera UX already guides users in real time, prompting them to move closer, hold steady, or avoid glare. Most low-quality input is handled automatically, so you only need these settings when you want finer control over which frames the SDK accepts.

Reject low-quality frames​

When a quality issue is detected on a frame, you can tell the SDK to skip that frame instead of processing it. Three boolean flags control this:

  • imageWithBlurRejected: when true, frames with detected blur are skipped, so only sharp frames are processed.
  • imageWithGlareRejected: when true, frames with detected glare are skipped.
  • imageWithPoorLightingRejected: when true, frames with inadequate lighting are skipped.

Rejecting low-quality frames improves the reliability of the extracted data because the SDK only reads from clean input. The trade-off is capture speed: in difficult conditions, such as poor lighting or a reflective document, fewer frames qualify, so scanning can take longer before a usable frame arrives.

const settings: ScanningSettings = {
documentCaptureModule: {
imageWithBlurRejected: true,
imageWithGlareRejected: true,
imageWithPoorLightingRejected: true,
},
};

Tune the sensitivity levels​

Blur and glare detection have an adjustable sensitivity that determines how aggressively the SDK flags a frame as affected. Two fields control this:

  • blurSensitivityLevel
    • type: string
    • one of "off", "low", "mid", "high"
    • a higher level means more aggressive blur detection
  • glareSensitivityLevel
    • type: string
    • one of "off", "low", "mid", "high"
    • a higher level means more aggressive glare detection

Setting a level to "off" disables detection for that quality issue. Raising the level catches more borderline frames, which pairs well with the rejection flags above for the strictest possible capture. Lowering it is more permissive and can speed up capture when conditions are consistently good.

const settings: ScanningSettings = {
documentCaptureModule: {
blurSensitivityLevel: "high",
imageWithBlurRejected: true,
glareSensitivityLevel: "high",
imageWithGlareRejected: true,
imageWithPoorLightingRejected: true,
},
};

On web the sensitivity is a plain string. On Android it is the SensitivityLevel enum (SensitivityLevel.Off, .Low, .Mid, .High), and on iOS it is the SensitivityLevel case (.off, .low, .mid, .high).