Flutter阿联酋身份证扫描插件emirates_id_scanner的使用

Flutter阿联酋身份证扫描插件emirates_id_scanner的使用

emirates_id_scanner 插件提供了通过Google ML Kit无缝且高效地扫描和提取阿联酋身份证数据的功能。此插件旨在简化应用程序中的身份证扫描过程,使其成为任何需要数据提取的应用程序的宝贵工具。

特性

  • 相机覆盖预览:包含内置的相机覆盖层,帮助用户准确捕捉身份证图像。覆盖层引导用户正确放置身份证,确保数据提取所需的图像最佳捕获。

  • 身份证区域裁剪:在捕捉到图像后,该插件会自动裁剪相关的身份证部分,专注于阿联酋身份证上的关键数据区域。

  • 数据提取与处理:利用先进的Google机器学习OCR技术扫描并提取身份证上的数据。提取的数据将被处理并返回为结构化的模型,便于集成到您的应用中。

  • 可定制的工作流程:提供实施的灵活性,允许您根据应用的具体需求和用户体验要求自定义扫描和数据提取流程。

要求

iOS

  • 最低iOS部署目标:12.0
  • Xcode版本:13.2.1或更新版本
  • Swift版本:Swift 5
  • 架构支持:ML Kit不支持32位架构(i386和armv7),仅支持64位架构(x86_64和arm64)。检查此列表以查看您的设备是否具有所需的设备功能。

注意:排除32位架构:由于ML Kit不支持32位架构,您需要在Xcode中排除armv7架构才能运行flutter build iosflutter build ipa

  1. 您的Podfile应包括:

    platform :ios, '12.0'  # 或更新版本
    
    ...
    
    # 添加这一行
    $iOSVersion = '12.0'  # 或更新版本
    
    post_install do |installer|
      # 添加这些行
      installer.pods_project.build_configurations.each do |config|
        config.build_settings["EXCLUDED_ARCHS[sdk=*]"] = "armv7"
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
      end
    
      installer.pods_project.targets.each do |target|
        flutter_additional_ios_build_settings(target)
    
        # 添加这些行
        target.build_configurations.each do |config|
          if Gem::Version.new($iOSVersion) > Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'])
            config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
          end
        end
      end
    end
    
  2. ios/Runner/Info.plist文件中添加两行:

    • 一个带有键Privacy - Camera Usage Description及其描述。
    • 另一个带有键Privacy - Microphone Usage Description及其描述。 如果以文本形式编辑Info.plist,添加以下内容:
    <key>NSCameraUsageDescription</key>
    <string>your usage description here</string>
    <key>NSMicrophoneUsageDescription</key>
    <string>your usage description here</string>
    

    注意:最低IPHONEOS_DEPLOYMENT_TARGET为12.0,您可以将其设置为更新版本但不能低于此值。

Android

  • minSdkVersion:21
  • targetSdkVersion:33
  • compileSdkVersion:33

入门指南

要开始使用emirates_id_scanner,请将其添加到您的Flutter项目中,并在pubspec.yaml文件中包含它。确保在您的应用中设置了相机权限,因为此包需要相机访问来进行身份证扫描。

支持的语言

注意:默认情况下,此包仅支持拉丁字符的识别。

使用方法

要将emirates_id_scanner集成到您的Flutter应用中,请遵循以下示例。此示例演示如何设置一个相机覆盖层来扫描阿联酋身份证,捕捉图像,然后使用EIDScanner扫描并提取身份证上的数据。

import 'dart:io';
import 'package:camera/camera.dart';
import 'package:emirates_id_scanner/camera_overlay/camera_overlay.dart';
import 'package:emirates_id_scanner/camera_overlay/overlay_model.dart';
import 'package:emirates_id_scanner/eid_scanner/eid_scanner.dart';
import 'package:emirates_id_scanner/eid_scanner/emirate_id_model.dart';
import 'package:flutter/material.dart';

class EidScreen extends StatefulWidget {
  const EidScreen({Key? key}) : super(key: key);

  [@override](/user/override)
  _EidScreenState createState() => _EidScreenState();
}

class _EidScreenState extends State<EidScreen> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        backgroundColor: Colors.transparent,
        foregroundColor: Colors.white
      ),
      backgroundColor: Colors.white,
      body: FutureBuilder<List<CameraDescription>>(
        future: availableCameras(),
        builder: (context, snapshot) {
          if (snapshot.connectionState == ConnectionState.waiting) {
            return const Center(child: CircularProgressIndicator());
          }
          if (snapshot.hasData && snapshot.data != null) {
            return CameraOverlay(
              onCapture: (XFile file) async {
                final EmirateIdModel? extractedText =
                    await EIDScanner.scanEmirateID(image: File(file.path));
                // 处理提取的数据
                print(extractedText);
              },
              model: CardOverlay.byFormat(),
              camera: snapshot.data!.first,
            );
          } else {
            return const Align(
                alignment: Alignment.center,
                child: Text(
                  'No camera found',
                  style: TextStyle(color: Colors.black),
                ));
          }
        },
      ),
    );
  }
}

更多关于Flutter阿联酋身份证扫描插件emirates_id_scanner的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter阿联酋身份证扫描插件emirates_id_scanner的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中使用emirates_id_scanner插件的示例代码。这个插件用于扫描阿联酋身份证(Emirates ID)。请确保你已经添加了该插件到你的pubspec.yaml文件中。

首先,在你的pubspec.yaml文件中添加依赖:

dependencies:
  flutter:
    sdk: flutter
  emirates_id_scanner: ^latest_version  # 请替换为最新的版本号

然后运行flutter pub get来安装依赖。

接下来,你可以在你的Flutter项目中使用emirates_id_scanner插件。以下是一个完整的示例代码,展示如何启动扫描器并处理扫描结果:

import 'package:flutter/material.dart';
import 'package:emirates_id_scanner/emirates_id_scanner.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Emirates ID Scanner Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: EmiratesIdScannerScreen(),
    );
  }
}

class EmiratesIdScannerScreen extends StatefulWidget {
  @override
  _EmiratesIdScannerScreenState createState() => _EmiratesIdScannerScreenState();
}

class _EmiratesIdScannerScreenState extends State<EmiratesIdScannerScreen> {
  String scanResult = '';

  Future<void> _scanEmiratesId() async {
    try {
      EmiratesIdResult result = await EmiratesIdScanner.scanEmiratesId();
      setState(() {
        scanResult = '''
Name: ${result.name}
ID Number: ${result.idNumber}
Nationality: ${result.nationality}
Date of Birth: ${result.dateOfBirth}
Gender: ${result.gender}
Expiry Date: ${result.expiryDate}
Image: ${result.imageBase64}  // Base64 encoded image string
        ''';
      });
    } catch (e) {
      setState(() {
        scanResult = 'Error: ${e.message}';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Emirates ID Scanner Demo'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: <Widget>[
            Text(
              'Scan Emirates ID',
              style: TextStyle(fontSize: 24),
            ),
            SizedBox(height: 20),
            ElevatedButton(
              onPressed: _scanEmiratesId,
              child: Text('Scan ID'),
            ),
            SizedBox(height: 20),
            if (scanResult.isNotEmpty)
              Text(
                scanResult,
                style: TextStyle(fontSize: 16),
                textAlign: TextAlign.center,
              ),
          ],
        ),
      ),
    );
  }
}

在这个示例中,我们创建了一个简单的Flutter应用,包含一个按钮,当用户点击按钮时,会启动阿联酋身份证扫描器。扫描完成后,扫描结果(包括姓名、身份证号码、国籍、出生日期、性别、有效期和身份证图片)会显示在屏幕上。

请注意,EmiratesIdResult类的属性可能会根据插件版本的不同而有所变化,因此请参考插件的官方文档以获取最新的属性和使用方法。

此外,由于扫描身份证涉及到用户隐私,确保你的应用已经获得了必要的用户权限,并且符合阿联酋的相关法律法规。

回到顶部