flutter_document_scan_sdk

The Flutter plugin is a wrapper for Dynamsoft's Document Normalizer SDK. It enables you to build document rectification applications for Windows, Linux, web, Android and iOS.

Try Document Rectification Example

Desktop: Windows & Linux

Windows

cd example
flutter run -d windows

Flutter windows document edge detection and normalization

Linux

cd example
flutter run -d linux

Flutter Linux document edge detection and normalization

Web

cd example
flutter run -d chrome

Flutter web document edge detection and normalization

Mobile: Android & iOS

cd example
flutter run 

Flutter document rectification for Android and iOS

Getting a License Key for Dynamsoft Document Normalizer

Supported Platforms

  • Web
  • Windows
  • Linux
  • Android
  • iOS

Installation

Add flutter_document_scan_sdk as a dependency in your pubspec.yaml file.

dependencies:
    ...
    flutter_document_scan_sdk:

One More Step for Web

Include the JavaScript library of Dynamsoft Document Normalizer in your index.html file:

<script src="https://cdn.jsdelivr.net/npm/dynamsoft-document-normalizer@1.0.12/dist/ddn.js"></script>

API Compatibility

Methods Android iOS Windows Linux Web
Future<int?> init(String key) :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Future<List<DocumentResult>?> detectFile(String file) :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Future<NormalizedImage?> normalizeFile(String file, dynamic points) :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Future<int?> setParameters(String params) :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Future<String?> getParameters() :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Future<List<DocumentResult>?> detectBuffer(Uint8List bytes, int width, int height, int stride, int format) :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:
Future<NormalizedImage?> normalizeBuffer(Uint8List bytes, int width, int height, int stride, int format, dynamic points) :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark: :heavy_check_mark:

Usage

  • Initialize the document rectification SDK with a valid license key:

    final _flutterDocumentScanSdkPlugin = FlutterDocumentScanSdk();
    await _flutterDocumentScanSdkPlugin.init(
       "DLS2eyJoYW5kc2hha2VDb2RlIjoiMjAwMDAxLTE2NDk4Mjk3OTI2MzUiLCJvcmdhbml6YXRpb25JRCI6IjIwMDAwMSIsInNlc3Npb25QYXNzd29yZCI6IndTcGR6Vm05WDJrcEQ5YUoifQ==");
    
    await _flutterDocumentScanSdkPlugin.setParameters(Template.grayscale);
    
  • Do document edge detection and return quadrilaterals:

    List<DocumentResult>? detectionResults =
            await _flutterDocumentScanSdkPlugin
                .detectFile(file);
    
  • Detect document edges from a buffer:

    List<DocumentResult>? detectionResults =
            await _flutterDocumentScanSdkPlugin
                .detectBuffer(bytes, width, height, stride, format);
    
  • Rectify the document based on document corners:

    NormalizedImage? normalizedImage = await _flutterDocumentScanSdkPlugin.normalizeFile(
        file, detectionResults[0].points);
    
  • Rectify the document based on document corners from a buffer:

    NormalizedImage? normalizedImage = await _flutterDocumentScanSdkPlugin.normalizeBuffer(
        bytes, width, height, stride, format, detectionResults[0].points);
    
  • Save the rectified document image to a file:

    if (normalizedUiImage != null) {
        const String mimeType = 'image/png';
        ByteData? data = await normalizedUiImage!
            .toByteData(format: ui.ImageByteFormat.png);
        if (data != null) {
            final XFile imageFile = XFile.fromData(
                data.buffer.asUint8List(),
                mimeType: mimeType,
            );
            await imageFile.saveTo(path);
        }
    }