Flutter定位服务插件accura_sdk的使用

Flutter定位服务插件Accura SDK的使用

Accura SDK简介

Accura SDK用于光学字符识别(Optical Character Recognition, OCR)和人脸匹配。它可以帮助用户验证身份并解锁真实身份。

以下是设置Accura SDK到项目的步骤:


1. 设置Android环境

添加权限到AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
在根目录build.gradle中添加仓库
allprojects {
   repositories {
       google()
       jcenter()
       maven {
           url 'https://jitpack.io'
           credentials { username 'jp_ssguccab6c5ge2l4jitaj92ek2' }
       }    
    }
}
配置app/build.gradle
packagingOptions {
   pickFirst 'lib/arm64-v8a/libcrypto.so'
   pickFirst 'lib/arm64-v8a/libssl.so'
   
   pickFirst 'lib/armeabi-v7a/libcrypto.so'
   pickFirst 'lib/armeabi-v7a/libssl.so'
   
   pickFirst 'lib/x86/libcrypto.so'
   pickFirst 'lib/x86/libssl.so'
   
   pickFirst 'lib/x86_64/libcrypto.so'
   pickFirst 'lib/x86_64/libssl.so'
}

2. 设置iOS环境

安装Git LFS并运行pod install
添加权限到Info.plist
<key>NSCameraUsageDescription</key>
<string>App usage camera for scan documents.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App usage photos for get document picture.</string>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>App usage photos for save document picture.</string>

3. 将AccuraScan许可证添加到项目中

Android环境
  1. app/src/main目录下创建assets文件夹。
  2. 将以下许可证文件放入assets文件夹:
    • key.license(用于Accura OCR)
    • accuraface.license(用于人脸匹配)

生成许可证地址:https://accurascan.com/developer/dashboard

iOS环境

将许可证文件放置在项目目录中,并将其添加到目标中。


4. 获取许可证配置

导入库并在代码中初始化SDK:

import 'package:accura_sdk/accura_sdk.dart';

Future<void> getMetaData() async {
  try {
    await AccuraSdk.setFaceBlurPercentage(80); // 设置人脸模糊阈值
    await AccuraSdk.setHologramDetection(true); // 启用全息检测
    await AccuraSdk.setLowLightTolerance(10); // 设置低光容忍度
    await AccuraSdk.setMotionThreshold(25); // 设置运动阈值
    await AccuraSdk.setMinGlarePercentage(6); // 设置最小眩光百分比
    await AccuraSdk.setMaxGlarePercentage(99); // 设置最大眩光百分比
    await AccuraSdk.setBlurPercentage(60); // 设置图像模糊阈值
    await AccuraSdk.setCameraFacing(0); // 设置摄像头方向
    await AccuraSdk.isCheckPhotoCopy(false); // 禁用照片复印检测

    await AccuraSdk.SCAN_TITLE_OCR_FRONT("Scan Front side of "); // 设置OCR正面扫描提示
    await AccuraSdk.SCAN_TITLE_OCR_BACK("Scan Back side of "); // 设置OCR背面扫描提示
    await AccuraSdk.SCAN_TITLE_MRZ_PDF417_FRONT("Scan Front Side of Document"); // 设置MRZ正面扫描提示
    await AccuraSdk.SCAN_TITLE_MRZ_PDF417_BACK("Scan Back Side of Document"); // 设置MRZ背面扫描提示

    await AccuraSdk.getMetaData().then((value) => 
        setupConfigData(json.decode(value))
    );
  } on PlatformException {}
  if (!mounted) return;
}

成功响应:

{
  "countries": [],
  "barcodes": [],
  "isValid": true,
  "isOCREnable": true,
  "isBarcodeEnable": true,
  "isBankCardEnable": true,
  "isMRZEnable": true
}

5. 扫描MRZ文档的方法

Future<void> startMRZ() async {
  try {
    var config = [
      {"enableLogs": false},
      "passport_mrz", // MRZ类型
      "IND" // 国家代码
    ];
    await AccuraSdk.startMRZ(config).then((value) => {
      setState(() {
        dynamic result = json.decode(value);
      })
    }).onError((error, stackTrace) => {});
  } on PlatformException {}
}

成功响应:

{
  "front_data": {},
  "back_data": {},
  "type": "Recognition Type",
  "face": "URI?",
  "front_img": "URI?",
  "back_img": "URI?"
}

6. 扫描OCR文档的方法

Future<void> startOCR() async {
  try {
    var config = [
      {"enableLogs": false},
      1, // 国家ID
      1, // 卡片ID
      "Card Name",
      1 // 卡片类型
    ];
    await AccuraSdk.startOcrWithCard(config).then((value) => {
      setState(() {
        dynamic result = json.decode(value);
      })
    }).onError((error, stackTrace) => {});
  } on PlatformException {}
}

7. 扫描条形码的方法

Future<void> startBarcode() async {
  var config = {"type": "barcode_type"};
  await AccuraSdk.startBarcode([config]).then((value) => {
    setState(() {
      dynamic result = json.decode(value);
    })
  });
}

8. 扫描银行卡的方法

Future<void> startBankCard() async {
  try {
    await AccuraSdk.startBankCard().then((value) => {
      setState(() {
        dynamic result = json.decode(value);
      })
    });
  } on PlatformException {}
}

9. 获取人脸匹配百分比的方法

Future<void> startFaceMatch() async {
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
  try {
    var accuraConfs = {
      "face_uri": "uri_of_face"
    };

    await AccuraSdk.setFaceMatchFeedbackTextSize(18);
    await AccuraSdk.setFaceMatchFeedBackframeMessage("Frame Your Face");
    await AccuraSdk.setFaceMatchFeedBackAwayMessage("Move Phone Away");
    await AccuraSdk.setFaceMatchFeedBackOpenEyesMessage("Keep Your Eyes Open");
    await AccuraSdk.setFaceMatchFeedBackCloserMessage("Move Phone Closer");
    await AccuraSdk.setFaceMatchFeedBackCenterMessage("Move Phone Center");

    await AccuraSdk.startFaceMatch([accuraConfs]).then((value) => {
      setState(() {
        dynamic result = json.decode(value);
      })
    }).onError((error, stackTrace) => {});
  } on PlatformException {}
}

成功响应:

{
  "detect": "URI?",
  "score": 0.98
}

10. 活体检测方法

Future<void> startLiveness() async {
  SystemChrome.setPreferredOrientations([DeviceOrientation.portraitUp]);
  try {
    var accuraConfs = {
      "face_uri": "uri_of_face"
    };

    await AccuraSdk.setLivenessFeedbackTextSize(18);
    await AccuraSdk.setLivenessFeedBackframeMessage("Frame Your Face");
    await AccuraSdk.setLivenessFeedBackAwayMessage("Move Phone Away");
    await AccuraSdk.setLivenessFeedBackOpenEyesMessage("Keep Your Eyes Open");

    await AccuraSdk.setLivenessBlurPercentage(80);
    await AccuraSdk.setLivenessGlarePercentage_0(-1);
    await AccuraSdk.setLivenessGlarePercentage_1(-1);
    await AccuraSdk.setLivenessFeedBackLowLightMessage("Low light detected");

    await AccuraSdk.setLivenessURL("https://accurascan.com:8443");

    await AccuraSdk.startLiveness([accuraConfs]).then((value) => {
      setState(() {
        dynamic result = json.decode(value);
      })
    }).onError((error, stackTrace) => {});
  } on PlatformException {}
}

成功响应:

{
  "detect": "URI?",
  "Face_score": 0.98,
  "score": 0.98
}

示例代码

以下是完整的示例代码:

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

void main() {
  runApp(MaterialApp(
    home: HomePage(),
    debugShowCheckedModeBanner: false,
  ));
}

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

  [@override](/user/override)
  State<HomePage> createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  [@override](/user/override)
  void initState() {
    super.initState();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("Accura SDK Demo"),
        backgroundColor: Colors.red[800],
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => FaceMatchPage()),
                );
              },
              child: Text("人脸匹配"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => OCRPage()),
                );
              },
              child: Text("OCR 扫描"),
            ),
            ElevatedButton(
              onPressed: () {
                Navigator.push(
                  context,
                  MaterialPageRoute(builder: (context) => MRZPage()),
                );
              },
              child: Text("MRZ 扫描"),
            ),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter定位服务插件accura_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter定位服务插件accura_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


accura_sdk 是一个用于 Flutter 的插件,主要用于身份证、护照、驾驶证等文档的扫描和识别。它提供了高精度的 OCR(光学字符识别)和 MRZ(机器可读区)识别功能。以下是如何在 Flutter 项目中使用 accura_sdk 的基本步骤。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  accura_sdk: ^2.0.0  # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 初始化 SDK

在使用 accura_sdk 之前,需要先初始化 SDK。通常你会在应用的启动时进行初始化。

import 'package:accura_sdk/accura_sdk.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化 Accura SDK
  await AccuraSdk.initialize();
  
  runApp(MyApp());
}

3. 配置 License

accura_sdk 需要有效的 License 才能使用。你需要将 License 文件放在项目的 assets 目录下,并在 pubspec.yaml 中进行配置。

flutter:
  assets:
    - assets/accura_license.license

然后,在初始化 SDK 时加载 License 文件:

await AccuraSdk.setupLicense('assets/accura_license.license');

4. 使用 OCR 功能

accura_sdk 提供了 OCR 功能,可以用于识别身份证、护照等文档。以下是一个简单的示例:

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

class OcrPage extends StatefulWidget {
  @override
  _OcrPageState createState() => _OcrPageState();
}

class _OcrPageState extends State<OcrPage> {
  String _ocrResult = '';

  Future<void> _scanDocument() async {
    try {
      // 调用 OCR 识别功能
      final result = await AccuraSdk.scanDocument();
      setState(() {
        _ocrResult = result;
      });
    } catch (e) {
      setState(() {
        _ocrResult = 'Error: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OCR Scan'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _scanDocument,
              child: Text('Scan Document'),
            ),
            SizedBox(height: 20),
            Text('OCR Result: $_ocrResult'),
          ],
        ),
      ),
    );
  }
}

5. 使用 MRZ 功能

accura_sdk 还支持 MRZ(机器可读区)识别,通常用于护照和签证的识别。以下是一个简单的示例:

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

class MrzPage extends StatefulWidget {
  @override
  _MrzPageState createState() => _MrzPageState();
}

class _MrzPageState extends State<MrzPage> {
  String _mrzResult = '';

  Future<void> _scanMrz() async {
    try {
      // 调用 MRZ 识别功能
      final result = await AccuraSdk.scanMrz();
      setState(() {
        _mrzResult = result;
      });
    } catch (e) {
      setState(() {
        _mrzResult = 'Error: $e';
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('MRZ Scan'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _scanMrz,
              child: Text('Scan MRZ'),
            ),
            SizedBox(height: 20),
            Text('MRZ Result: $_mrzResult'),
          ],
        ),
      ),
    );
  }
}

6. 处理扫描结果

accura_sdk 返回的扫描结果通常是 JSON 格式的字符串,你可以将其解析为 Dart 对象以便进一步处理。

import 'dart:convert';

Map<String, dynamic> resultMap = json.decode(_ocrResult);
print(resultMap['name']); // 例如:获取姓名

7. 错误处理

在使用 accura_sdk 时,可能会遇到各种错误,例如 License 无效、设备不支持等。建议在使用时进行适当的错误处理。

try {
  final result = await AccuraSdk.scanDocument();
  setState(() {
    _ocrResult = result;
  });
} catch (e) {
  setState(() {
    _ocrResult = 'Error: $e';
  });
}

8. 权限处理

accura_sdk 可能需要访问摄像头和存储权限。确保在 AndroidManifest.xmlInfo.plist 中配置了相应的权限。

Android:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

iOS:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera to scan documents.</string>

9. 构建和运行

完成上述步骤后,你可以构建并运行你的 Flutter 应用程序,使用 accura_sdk 进行文档扫描和识别。

flutter run
回到顶部