Flutter OCR识别插件mnc_identifier_ocr的使用

Flutter OCR识别插件mnc_identifier_ocr的使用

MNC Identifier OCR

banner_ocr

这是一个用于Android和iOS平台扫描印尼身份证(KTP)的Flutter插件。

安装

添加依赖

你可以使用以下命令添加MNC Identifier OCR作为依赖项,使用最新稳定版本:

$ dart pub add mnc_identifier_ocr

或者你可以手动将MNC Identifier OCR添加到pubspec.yaml文件的依赖部分:

dependencies:
  mnc_identifier_ocr: ^1.0.20

最新的版本是:1.0.20

额外步骤

Android

该插件需要Android SDK 21或更高版本。

在你的AndroidManifest.xml中添加CaptureOCRActivity

<activity android:name="id.mncinnovation.ocr.CaptureOCRActivity" android:theme="@style/Theme.AppCompat.Light.NoActionBar" />
iOS

该插件需要iOS 11.0或更高版本。

在你的info.plist文件中添加NSCameraUsageDescription键。描述你的应用程序为什么需要访问相机。这在可视化编辑器中被称为隐私 - 相机使用描述。

使用方法

以下是使用mnc_identifier_ocr插件进行KTP扫描的示例代码:

import 'package:mnc_identifier_ocr/mnc_identifier_ocr.dart';
import 'package:mnc_identifier_ocr/model/ocr_result_model.dart';

...

Future<void> scanKtp() async {
    try {
      // 调用插件开始扫描KTP,启用闪光灯并且只使用相机
      OcrResultModel res = await MncIdentifierOcr.startCaptureKtp(withFlash: true, cameraOnly: true);
      debugPrint('result: ${res.toString()}');
    } catch (e) {
      debugPrint('something goes wrong $e');
    }
}

注意:在iOS上,这个插件只能在真实设备上工作。

示例Demo

下面是一个完整的Flutter应用示例,展示如何使用mnc_identifier_ocr插件进行KTP扫描:

import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'dart:async';
import 'package:mnc_identifier_ocr/mnc_identifier_ocr.dart';
import 'package:mnc_identifier_ocr/model/ocr_result_model.dart';

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

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

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

class _MyAppState extends State<MyApp> {
  OcrResultModel? result;

  // 平台消息是异步的,所以我们初始化在一个异步方法中。
  Future<void> scanKtp() async {
    OcrResultModel? res;
    try {
      // 开始扫描KTP,启用闪光灯并且只使用相机
      res = await MncIdentifierOcr.startCaptureKtp(withFlash: true, cameraOnly: true);
    } catch (e) {
      debugPrint('something goes wrong $e');
    }

    if (!mounted) return;

    setState(() {
      result = res;
    });
  }

  // 从图库选择图片
  _imgGlr() async {
    final XFile? image = await ImagePicker().pickImage(source: ImageSource.gallery);
    debugPrint('path: ${image?.path}');
  }

  // 从相机拍摄图片
  _imgCmr() async {
    final XFile? image = await ImagePicker().pickImage(source: ImageSource.camera);
    debugPrint('path: ${image?.path}');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Stack(
          children: [
            Text('Ktp data: ${result?.toJson()}'),
            Center(
              child: Column(
                mainAxisAlignment: MainAxisAlignment.center,
                children: [
                  // 按钮触发KTP扫描
                  ElevatedButton(onPressed: scanKtp, child: const Text('PUSH HERE')),
                  const SizedBox(height: 8),
                  // 按钮打开相机
                  ElevatedButton(onPressed: _imgCmr, child: const Text('CAMERA')),
                  const SizedBox(height: 8),
                  // 按钮打开图库
                  ElevatedButton(onPressed: _imgGlr, child: const Text('GALLERY')),
                ],
              ),
            ),
          ],
        ),
      ),
    );
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用mnc_identifier_ocr插件进行OCR(光学字符识别)的示例代码。这个插件允许你从图像中提取文本。

首先,确保你已经在pubspec.yaml文件中添加了mnc_identifier_ocr依赖:

dependencies:
  flutter:
    sdk: flutter
  mnc_identifier_ocr: ^最新版本号  # 请替换为实际的最新版本号

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

接下来,在你的Flutter应用中,你可以按照以下步骤使用mnc_identifier_ocr插件:

  1. 导入插件
import 'package:mnc_identifier_ocr/mnc_identifier_ocr.dart';
  1. 请求权限(如果需要处理来自相机或图库的图像,请确保已请求相应的权限):
import 'package:permission_handler/permission_handler.dart';

Future<void> requestPermissions() async {
  var status = await Permission.camera.status;
  if (!status.isGranted) {
    Map<Permission, PermissionStatus> permissions = await Permission.request([
      Permission.camera,
      Permission.storage,
    ]);

    if (permissions[Permission.camera] == PermissionStatus.granted &&
        permissions[Permission.storage] == PermissionStatus.granted) {
      print("Permissions granted");
    } else {
      print("Permissions denied");
    }
  } else {
    print("Permissions already granted");
  }
}

注意:你可能需要添加permission_handler依赖来处理权限请求。

  1. 使用OCR进行文本识别
import 'dart:io';
import 'package:image_picker/image_picker.dart';

class OcrScreen extends StatefulWidget {
  @override
  _OcrScreenState createState() => _OcrScreenState();
}

class _OcrScreenState extends State<OcrScreen> {
  File? _image;
  String _result = '';

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('OCR Recognition'),
      ),
      body: Column(
        mainAxisAlignment: MainAxisAlignment.center,
        children: <Widget>[
          _image == null
              ? Text('No image selected.')
              : Image.file(_image!),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _pickImage,
            child: Text('Pick Image'),
          ),
          SizedBox(height: 20),
          ElevatedButton(
            onPressed: _performOCR,
            child: Text('Perform OCR'),
            enabled: _image != null,
          ),
          SizedBox(height: 20),
          Text('OCR Result: $_result'),
        ],
      ),
    );
  }

  Future<void> _pickImage() async {
    final picker = ImagePicker();
    final pickedFile = await picker.pickImage(source: ImageSource.gallery);

    setState(() {
      if (pickedFile != null) {
        _image = File(pickedFile!.path);
      } else {
        _image = null;
      }
    });
  }

  Future<void> _performOCR() async {
    if (_image == null) return;

    final Ocr ocr = Ocr();
    try {
      String result = await ocr.extractTextFromImage(imagePath: _image!.path);
      setState(() {
        _result = result;
      });
    } catch (e) {
      print('Error during OCR: $e');
    }
  }
}

在这个示例中:

  • 我们首先导入了必要的包,包括mnc_identifier_ocrimage_picker(用于从图库中选择图像)。
  • 我们创建了一个简单的UI,允许用户选择图像并执行OCR。
  • _pickImage方法用于从图库中选择图像。
  • _performOCR方法使用mnc_identifier_ocr插件从选定的图像中提取文本。

请确保你已经按照插件的文档进行了所有必要的配置,例如Android和iOS平台的配置,以便插件能够正常工作。此外,由于插件的更新和API的变化,请查阅最新的插件文档以获取最新的使用指南和示例代码。

回到顶部