Flutter阿里云OCR识别插件aliyun_ocr_sdk的使用

Flutter阿里云OCR识别插件aliyun_ocr_sdk的使用

特性

本插件支持用户跳过生成签名的过程,通过上传网页上的图片URL来使用阿里云OCR文本识别API。

本插件支持阿里云OCR方法的新旧版本。旧版可以正常使用,而新版仅支持以URL格式上传图片,不支持二进制图像。

旧方法

目前旧方法可以正常工作。

新方法

注意:由于某些原因,我无法通过HTTP上传我的图片,返回错误码503。经过与阿里云工程师咨询后,他们建议调试其他框架SDK(如JAVA)以找到一些解决办法,并拒绝向我展示如何将图片二进制文件放入HTTP主体。

开始使用

本插件需要用户提供阿里云的accessKeyIdaccessKeySecret。你需要登录阿里云网站并遵循以下步骤:

  • 用户的图片
  • 访问密钥管理

使用示例

/// 1. 老方法OCR
var aliYunSdkOld = aliYunOcrClientOld();

/// 1.1 输入你的AppCode
aliYunSdkOld.appCode = "YourappCode";
aliYunSdkOld.generateHeaders();

print(aliYunSdkOld.headers);

/// 1.2 输入图片URL
aliYunSdkOld.imgUrl = "https://img.alicdn.com/tfs/TB1Wo7eXAvoK1RjSZFDXXXY3pXa-2512-3509.jpg";
aliYunSdkOld.generateBodyWithImg();

/// 1.2 或者输入图片二进制数据
final value = File("bin/1.png");
var bytes = await value.readAsBytes();
aliYunSdkOld.imgBinary = bytes.buffer.asUint8List();
aliYunSdkOld.generateBodyWithImg();

// 1.3 使用post方法发送请求
var dio = Dio();
Response response;
try {
  response = await dio.post(
    aliYunSdkOld.baseUrl,
    data: aliYunSdkOld.body,
    options: Options(
      headers: aliYunSdkOld.headers,
    ),
  );
  print(response.statusCode);
  print(response.data);
} on DioError catch (e) {
  final response = e.response;
  if (response != null) {
    print(response.data);
    print(response.headers);
    print(response.requestOptions);
  } else {
    /// 发送请求时发生错误
    print(e.requestOptions);
    print(e.message);
  }
}

/// 2. 新方法OCR
var aliYunSdkNew = aliYunOcrClientNew();

/// 2.1 输入你的accessKeyId和accessKeySecret
aliYunSdkNew.accessKeyId = "YouraccessKeyId";
aliYunSdkNew.accessKeySecret = "YouraccessKeySecret";

/// 2.2 输入图片URL
aliYunSdkNew.imgUrl = "https://img.alicdn.com/tfs/TB1Wo7eXAvoK1RjSZFDXXXY3pXa-2512-3509.jpg";

aliYunSdkNew.queries['AccessKeyId'] = aliYunSdkNew.accessKeyId;
aliYunSdkNew.queries['Url'] = aliYunSdkNew.imgUrl;

/// 2.3 生成签名并更新查询参数
aliYunSdkNew.generateSignature(
  accessKeySecret: aliYunSdkNew.accessKeySecret,
  queries: aliYunSdkNew.queries,
  method: "POST",
);

print(aliYunSdkNew.queries);

// 2.4 使用post方法发送请求
var dio1 = Dio();
Response response1;
try {
  response1 = await dio1.post(
    aliYunSdkNew.baseUrl,
    queryParameters: aliYunSdkNew.queries,
  );
  print(response1.statusCode);
  print(response1.data);
} on DioError catch (e) {
  final response = e.response;
  if (response != null) {
    print(response.data);
    print(response.headers);
    print(response.requestOptions);
  } else {
    /// 发送请求时发生错误
    print(e.requestOptions);
    print(e.message);
  }
}

其他信息

如有问题,请提交到我的主页

该插件已发布在pub.dev网站上,以下是链接:aliyun_ocr_sdk 1.0.0


示例代码

import 'dart:io';
import 'package:aliyun_ocr_sdk/aliyun_ocr_sdk.dart';
import 'package:aliyun_ocr_sdk/src/aliyun_ocr_sdk_base.dart';
import 'package:dio/dio.dart';

void main() async {
  /// 1. 老方法OCR
  var aliYunSdkOld = aliYunOcrClientOld();

  /// 1.1 输入你的AppCode
  aliYunSdkOld.appCode = "YourappCode";
  aliYunSdkOld.generateHeaders();

  print(aliYunSdkOld.headers);

  /// 1.2 输入图片URL
  aliYunSdkOld.imgUrl = "https://img.alicdn.com/tfs/TB1Wo7eXAvoK1RjSZFDXXXY3pXa-2512-3509.jpg";
  aliYunSdkOld.generateBodyWithImg();

  /// 1.2 或者输入图片二进制数据
  final value = File("bin/1.png");
  var bytes = await value.readAsBytes();
  aliYunSdkOld.imgBinary = bytes.buffer.asUint8List();
  aliYunSdkOld.generateBodyWithImg();

  // 1.3 使用post方法发送请求
  var dio = Dio();
  Response response;
  try {
    response = await dio.post(
      aliYunSdkOld.baseUrl,
      data: aliYunSdkOld.body,
      options: Options(
        headers: aliYunSdkOld.headers,
      ),
    );
    print(response.statusCode);
    print(response.data);
  } on DioError catch (e) {
    final response = e.response;
    if (response != null) {
      print(response.data);
      print(response.headers);
      print(response.requestOptions);
    } else {
      /// 发送请求时发生错误
      print(e.requestOptions);
      print(e.message);
    }
  }

  /// 2. 新方法OCR
  var aliYunSdkNew = aliYunOcrClientNew();

  /// 2.1 输入你的accessKeyId和accessKeySecret
  aliYunSdkNew.accessKeyId = "YouraccessKeyId";
  aliYunSdkNew.accessKeySecret = "YouraccessKeySecret";

  /// 2.2 输入图片URL
  aliYunSdkNew.imgUrl = "https://img.alicdn.com/tfs/TB1Wo7eXAvoK1RjSZFDXXXY3pXa-2512-3509.jpg";

  aliYunSdkNew.queries['AccessKeyId'] = aliYunSdkNew.accessKeyId;
  aliYunSdkNew.queries['Url'] = aliYunSdkNew.imgUrl;

  /// 2.3 生成签名并更新查询参数
  aliYunSdkNew.generateSignature(
    accessKeySecret: aliYunSdkNew.accessKeySecret,
    queries: aliYunSdkNew.queries,
    method: "POST",
  );

  print(aliYunSdkNew.queries);

  // 2.4 使用post方法发送请求
  var dio1 = Dio();
  Response response1;
  try {
    response1 = await dio1.post(
      aliYunSdkNew.baseUrl,
      queryParameters: aliYunSdkNew.queries,
    );
    print(response1.statusCode);
    print(response1.data);
  } on DioError catch (e) {
    final response = e.response;
    if (response != null) {
      print(response.data);
      print(response.headers);
      print(response.requestOptions);
    } else {
      /// 发送请求时发生错误
      print(e.requestOptions);
      print(e.message);
    }
  }
}

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

1 回复

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


aliyun_ocr_sdk 是一个 Flutter 插件,用于集成阿里云的 OCR(光学字符识别)功能。通过这个插件,你可以在 Flutter 应用中轻松调用阿里云的 OCR 服务,实现身份证识别、银行卡识别、车牌识别等功能。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  aliyun_ocr_sdk: ^1.0.0  # 请使用最新版本

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

2. 获取阿里云 OCR 的 AppKey 和 AppSecret

在使用阿里云 OCR 服务之前,你需要在阿里云控制台创建一个 OCR 应用,并获取 AppKeyAppSecret

3. 初始化 SDK

在你的 Flutter 应用中初始化 aliyun_ocr_sdk

import 'package:aliyun_ocr_sdk/aliyun_ocr_sdk.dart';

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: HomePage(),
    );
  }
}

class HomePage extends StatefulWidget {
  @override
  _HomePageState createState() => _HomePageState();
}

class _HomePageState extends State<HomePage> {
  @override
  void initState() {
    super.initState();
    _initAliyunOCR();
  }

  Future<void> _initAliyunOCR() async {
    await AliyunOCR.init(
      appKey: 'your_app_key',
      appSecret: 'your_app_secret',
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('阿里云 OCR 示例'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _startOCR,
          child: Text('开始 OCR 识别'),
        ),
      ),
    );
  }

  Future<void> _startOCR() async {
    try {
      // 调用 OCR 识别功能
      var result = await AliyunOCR.recognizeIDCard();
      print('OCR 识别结果: $result');
    } catch (e) {
      print('OCR 识别失败: $e');
    }
  }
}

4. 调用 OCR 功能

aliyun_ocr_sdk 提供了多种 OCR 识别功能,例如:

  • 身份证识别AliyunOCR.recognizeIDCard()
  • 银行卡识别AliyunOCR.recognizeBankCard()
  • 车牌识别AliyunOCR.recognizeLicensePlate()

你可以根据需求调用相应的函数。

5. 处理 OCR 结果

OCR 识别的结果通常是一个 Map 对象,包含了识别出的信息。你可以根据需要解析和处理这些信息。

Future<void> _startOCR() async {
  try {
    var result = await AliyunOCR.recognizeIDCard();
    print('OCR 识别结果: $result');
    // 解析身份证信息
    var name = result['name'];
    var idNumber = result['id_number'];
    print('姓名: $name, 身份证号: $idNumber');
  } catch (e) {
    print('OCR 识别失败: $e');
  }
}
回到顶部