Flutter OCR识别插件flutter_accurascan_ocr的使用

Flutter OCR识别插件flutter_accurascan_ocr的使用

Accura Scan OCR 是一款用于光学字符识别(OCR)的插件。Accura Scan Face Match 用于匹配两张人脸,分别是源人脸和目标人脸,例如用户自拍图像与文档中的用户图像进行匹配。Accura Scan Authentication 用于客户验证和身份认证,通过3D自拍技术解锁用户的真实身份。

以下是将 Accura Scan 的 SDK 集成到您的 Flutter 项目中的步骤。


1. 设置 Android 环境

添加权限到 AndroidManifest.xml

在 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 中配置仓库

在项目的根目录下的 build.gradle 文件末尾添加以下内容:

allprojects {
   repositories {
       google()
       jcenter()
       maven {
           url 'https://jitpack.io'
           credentials { username 'jp_ssguccab6c5ge2l4jitaj92ek2' }
       }    
    }
}

app/build.gradle 中配置打包选项

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

确保安装了 Git LFS,并在项目根目录下运行以下命令:

pod install

Info.plist 中添加权限

在 iOS 的 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. 配置 Accura Scan 许可证

Accura Scan OCR 需要两个许可证才能启用所有功能。您可以在 Accura Scan 开发者仪表板 上生成自己的许可证。

对于 Android

  1. app/src/main 目录下创建一个名为 assets 的文件夹。
  2. 将许可证文件 key.license 放入 assets 文件夹中。

对于 iOS

  1. 将许可证文件放置在项目的 Runner 目录下。
  2. 将许可证添加到目标项目中。

4. 获取许可证配置信息

调用 getMetaData() 方法以获取许可证的详细信息。

Future<void> getMetaData() async {
  try {
    await AccuraOcr.getMetaData().then((value) => 
        setupConfigData(json.decode(value)));
  } on PlatformException {}
  if (!mounted) return;
}

错误响应:字符串
成功响应:JSON 字符串

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

5. 配置 Accura Scan 的设置和错误消息

以下代码演示如何设置 Accura Scan 的配置、错误消息和扫描提示。

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

    // 设置扫描提示
    await AccuraOcr.SCAN_TITLE_OCR_FRONT("Scan Front side of ");
    await AccuraOcr.SCAN_TITLE_OCR_BACK("Scan Back side of ");
    await AccuraOcr.SCAN_TITLE_OCR("Scan ");
    await AccuraOcr.SCAN_TITLE_MRZ_PDF417_FRONT("Scan Front Side of Document");
    await AccuraOcr.SCAN_TITLE_MRZ_PDF417_BACK("Scan Back Side of Document");
    await AccuraOcr.SCAN_TITLE_DLPLATE("Scan Number plate");
    await AccuraOcr.SCAN_TITLE_BANKCARD("Scan BankCard");

    // 设置错误消息
    await AccuraOcr.ACCURA_ERROR_CODE_MOTION("Keep Document Steady");
    await AccuraOcr.ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME("Keep document in frame");
    await AccuraOcr.ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME("Bring card near to frame");
    await AccuraOcr.ACCURA_ERROR_CODE_PROCESSING("Processing");
    await AccuraOcr.ACCURA_ERROR_CODE_BLUR_DOCUMENT("Blur detect in document");
    await AccuraOcr.ACCURA_ERROR_CODE_FACE_BLUR("Blur detected over face");
    await AccuraOcr.ACCURA_ERROR_CODE_GLARE_DOCUMENT("Glare detect in document");
    await AccuraOcr.ACCURA_ERROR_CODE_HOLOGRAM("Hologram Detected");
    await AccuraOcr.ACCURA_ERROR_CODE_DARK_DOCUMENT("Low lighting detected");
    await AccuraOcr.ACCURA_ERROR_CODE_PHOTO_COPY_DOCUMENT("Can not accept Photo Copy Document");
    await AccuraOcr.ACCURA_ERROR_CODE_FACE("Face not detected");
    await AccuraOcr.ACCURA_ERROR_CODE_MRZ("MRZ not detected");
    await AccuraOcr.ACCURA_ERROR_CODE_PASSPORT_MRZ("Passport MRZ not detected");
    await AccuraOcr.ACCURA_ERROR_CODE_ID_MRZ("ID MRZ not detected");
    await AccuraOcr.ACCURA_ERROR_CODE_VISA_MRZ("Visa MRZ not detected");
    await AccuraOcr.ACCURA_ERROR_CODE_UPSIDE_DOWN_SIDE("Document is upside down. Place it properly");
    await AccuraOcr.ACCURA_ERROR_CODE_WRONG_SIDE("Scanning wrong side of Document");

    // 启用日志
    await AccuraOcr.enableLogs(0);
    await AccuraOcr.isShowLogo(1);
    await AccuraOcr.isFlipImg(1);

    // 自定义界面颜色
    await AccuraOcr.CameraScreen_Color("#80000000");
    await AccuraOcr.CameraScreen_Back_Button(1);
    await AccuraOcr.CameraScreen_Change_Button(1);
    await AccuraOcr.CameraScreen_Frame_Color("#D5323F");
    await AccuraOcr.CameraScreen_Text_Border_Color("#000000");
    await AccuraOcr.CameraScreen_Text_Color("#FFFFFF");

    await AccuraOcr.setAccuraConfigs();
  } on PlatformException {}
}

6. 扫描 MRZ 文档的方法

以下代码展示了如何启动 MRZ 文档扫描。

Future<void> startMRZ() async {
  try {
    var config = [
      mrzselected,
    ];
    print('startMRZ:- $config');
    await AccuraOcr.startMRZ(config).then((value) => {
      setState(() {
        _result = json.decode(value);
        ResultScreen.result = _result;
        print("RESULT:- $_result");
      })
    }).onError((error, stackTrace) => {
      setState(() {
        print("error");
      })
    });
  } on PlatformException {}
}

MRZType: String
: other_mrz, passport_mrz, id_mrz, visa_mrz

成功响应

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

错误响应: 字符串


7. 扫描 OCR 文档的方法

以下代码展示了如何启动 OCR 文档扫描。

Future<void> startOCR() async {
  try {
    var config = [
      widget.countrySelect['id'],
      cardSelected['id'],
      cardSelected['name'],
      cardSelected['type'],
    ];
    await AccuraOcr.startOcrWithCard(config).then((value) =>
    {
      setState(() {
        dynamic result = json.decode(value);
      })
    })
        .onError((error, stackTrace) =>
    {
    });
  } on PlatformException {}
}

CountryId: integer
: 所选国家的 ID。

CardId: integer
: 所选卡的 ID。

CardName: String
: 所选卡的名称。

CardType: integer
: 所选卡的类型。

成功响应: JSON 响应 {}
错误响应: 字符串


8. 扫描银行卡的方法

以下代码展示了如何启动银行卡扫描。

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

成功响应: JSON 响应 {}
错误响应: 字符串


示例代码

以下是一个完整的示例代码,展示如何集成 flutter_accurascan_ocr 插件并使用其功能。

import 'dart:convert';
import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter_accurascan_ocr/flutter_accurascan_ocr.dart';
import 'package:flutter_accurascan_ocr_example/ResultScreen.dart';

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

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

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  dynamic _result = {"isValid", false};

  [@override](/user/override)
  void initState() {
    super.initState();
    getMetaData();
  }

  Future<void> getMetaData() async {
    try {
      await AccuraOcr.getMetaData().then((value) => 
          setupConfigData(json.decode(value)));
    } on PlatformException {}
    if (!mounted) return;
  }

  void setupConfigData(obj) {
    setState(() {
      if (obj["isValid"] == true) {
        setAccuraConfig();
      }
    });
  }

  Future<void> setAccuraConfig() async {
    try {
      await AccuraOcr.setFaceBlurPercentage(80);
      await AccuraOcr.setHologramDetection(true);
      await AccuraOcr.setLowLightTolerance(10);
      await AccuraOcr.setMotionThreshold(25);
      await AccuraOcr.setMinGlarePercentage(6);
      await AccuraOcr.setMaxGlarePercentage(99);
      await AccuraOcr.setBlurPercentage(60);
      await AccuraOcr.setCameraFacing(0);
      await AccuraOcr.isCheckPhotoCopy(false);

      await AccuraOcr.SCAN_TITLE_OCR_FRONT("Scan Front side of ");
      await AccuraOcr.SCAN_TITLE_OCR_BACK("Scan Back side of ");
      await AccuraOcr.SCAN_TITLE_OCR("Scan ");

      await AccuraOcr.ACCURA_ERROR_CODE_MOTION("Keep Document Steady");
      await AccuraOcr.ACCURA_ERROR_CODE_DOCUMENT_IN_FRAME("Keep document in frame");
      await AccuraOcr.ACCURA_ERROR_CODE_BRING_DOCUMENT_IN_FRAME("Bring card near to frame");
      await AccuraOcr.ACCURA_ERROR_CODE_PROCESSING("Processing");

      await AccuraOcr.setAccuraConfigs();
    } on PlatformException {}
  }

  Future<void> startMRZ() async {
    try {
      var config = ["passport_mrz"];
      await AccuraOcr.startMRZ(config).then((value) => {
        setState(() {
          _result = json.decode(value);
          Navigator.push(
              context,
              MaterialPageRoute(builder: (context) => ResultScreen()));
        })
      });
    } on PlatformException {}
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text("Accura KYC"),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: startMRZ,
            child: Text("Start MRZ Scan"),
          ),
        ),
      ),
    );
  }
}

更多关于Flutter OCR识别插件flutter_accurascan_ocr的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter OCR识别插件flutter_accurascan_ocr的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_accurascan_ocr 是一个用于Flutter的OCR(光学字符识别)插件,它可以帮助你在移动应用中实现文本识别功能。以下是如何使用 flutter_accurascan_ocr 插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 flutter_accurascan_ocr 插件的依赖。

dependencies:
  flutter:
    sdk: flutter
  flutter_accurascan_ocr: ^latest_version

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

2. 配置权限

在Android和iOS平台上,你可能需要配置一些权限来访问相机和存储。

Android:AndroidManifest.xml 中添加以下权限:

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

iOS:Info.plist 中添加以下权限:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera for scanning documents.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>We need access to your photo library for scanning documents.</string>

3. 使用插件进行OCR识别

在你的Flutter代码中,你可以使用 flutter_accurascan_ocr 插件来进行OCR识别。

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

class OCRScreen extends StatefulWidget {
  [@override](/user/override)
  _OCRScreenState createState() => _OCRScreenState();
}

class _OCRScreenState extends State<OCRScreen> {
  String _recognizedText = '';

  Future<void> _recognizeText() async {
    try {
      // Initialize the OCR scanner
      final FlutterAccurascanOcr scanner = FlutterAccurascanOcr();

      // Start the OCR process
      final String recognizedText = await scanner.scanDocument();

      // Update the UI with the recognized text
      setState(() {
        _recognizedText = recognizedText;
      });
    } catch (e) {
      print("Error during OCR: $e");
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OCR Recognition'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _recognizeText,
              child: Text('Scan Document'),
            ),
            SizedBox(height: 20),
            Text(
              'Recognized Text:',
              style: TextStyle(fontSize: 18, fontWeight: FontWeight.bold),
            ),
            SizedBox(height: 10),
            Expanded(
              child: SingleChildScrollView(
                child: Text(_recognizedText),
              ),
            ),
          ],
        ),
      ),
    );
  }
}

void main() => runApp(MaterialApp(
  home: OCRScreen(),
));
回到顶部