Blur Detection

Available on: iOS Android React Native Flutter Cordova .NET MAUI

The Genius Scan SDK helps acquire high-quality documents from mobile devices. Alongside its advanced image processing filters, the SDK includes a readability detection feature that evaluates the clarity of a document.

This feature can detect various types of blur:

  • Focus blur: When the camera fails to focus properly, or part of the document is out of focus
  • Motion blur: When the photo is taken while the device is moving

Readability detection is simple to integrate, and we strongly recommend enabling it in your project. It outperforms traditional blur detection techniques because it can detect various types of blur or partially blurry documents. The detection has been specifically tuned for textual documents and will not work optimally for documents with little text. It may work less effectively for text on textured backgrounds.

Example of a blur detection alert in the scan flow

Getting started

To enable readability detection in the scan flow, set the required readability level to a value above the lowest. For example, .medium ensures documents below this quality trigger a prompt.

Note: Don’t skip the post-processing screen, because the prompt is displayed there.

let configuration = GSKScanFlowConfiguration()
configuration.requiredReadabilityLevel = .highest
// Don't set skipPostProcessingScreen = true
val configuration = ScanConfiguration().apply {
    requiredReadabilityLevel = ScanConfiguration.ReadabilityLevel.HIGHEST
    // Don't set skipPostProcessingScreen = true
}
const configuration = {
  requiredReadabilityLevel: 'highest',
  // Don't set skipPostProcessingScreen: true
};

// Launch scanner with blur detection
const result = await RNGeniusScan.scanWithConfiguration(configuration);
var configuration = {
  'requiredReadabilityLevel': 'highest',
  // Don't set 'skipPostProcessingScreen': true
};

// Launch scanner with blur detection
var result = await FlutterGeniusScan.scanWithConfiguration(configuration);
var configuration = {
  requiredReadabilityLevel: 'highest'
  // Don't set skipPostProcessingScreen: true
};

// Launch scanner with blur detection
cordova.plugins.GeniusScan.scanWithConfiguration(configuration,
  function(result) {
    // Handle success
  },
  function(error) {
    // Handle error
  }
);
var configuration = new ScanConfiguration
{
    RequiredReadabilityLevel = ScanConfiguration.ReadabilityLevel.Highest
    // Don't set SkipPostProcessingScreen = true
};

// Launch scanner with blur detection
var result = await GeniusScan.ScanWithConfigurationAsync(configuration);

Example of a blur detection alert in the scan flow

Readability levels

Readability isn’t binary. Documents can fall anywhere on a quality spectrum. The Genius Scan SDK defines five readability levels that correspond to the likelihood of a scan being legible:

  • lowest: Scan with almost no chance of being readable
  • low: Scan with very little chance of being readable, even though it’s not impossible
  • medium: Scan with little chance of being entirely readable, even though it’s possible
  • high: Scan with high chance of being readable, even though it’s not guaranteed
  • highest: Scan with very high chance of being readable

Since the Scan Flow shows a warning when the required readability isn’t met, this will never be blocking for the user. It’s up to you whether you want to be more conservative or aggressive in showing this warning.

How to test the blur detection

Run your application on a physical device (the iOS Simulator doesn’t support camera access). To test readability detection, try scanning:

  • In low-light conditions
  • While shaking the device

This will help you observe how the SDK reacts to blur and low readability.

Products

Industries

Case Studies

Integration

Company

© 2025 The Grizzly Labs. All rights reserved.