Flutter集成Contour AI SDK插件contouraisdk的使用

Flutter集成Contour AI SDK插件contouraisdk的使用

Contour AI SDK™ 被设计为业界最直观且安全的移动图像捕捉体验——通过iOS™或Android™移动设备捕获各种类型的文档。同时,它被设计为在有限的人工干预下,清晰、准确、完整地处理这些文档,从而提高效率并降低成本。

开始使用

请参阅文档网站以获取更多信息。

许可证

专有许可证

Contour AI SDK™(简称“SDK”)除非另有明确说明,否则是由Contour Document Imaging, LLC(“CDI”)拥有并受其许可条款约束的专有软件。访问此SDK即表示你同意以下条款和条件:

  • 仅用于评估SDK的目的,并进行内部软件和应用程序开发,以便这些应用程序能够将数据传输到Urban FT、X-35或CDI。
  • 不得接收任何底层软件或SDK的对象代码或源代码副本。
  • 不得复制SDK。
  • 不得向任何第三方提供SDK。
  • CDI拥有SDK中所有代码的所有修改、修订或衍生作品的版权。

你的使用权利取决于以下条件:

  • 不得出售、出租、租赁或以其他方式分发或共享SDK;
  • 不得反汇编、反编译或逆向工程SDK或其输出,或试图推导出源代码(或底层思想、算法、结构或组织);
  • 不得向任何第三方提供SDK访问权限;
  • 不得基于SDK创建任何衍生作品;
  • 不得以违反任何适用法律的方式使用SDK;
  • 不得干扰或破坏SDK的完整性或性能;
  • 不得尝试未经授权访问相关系统或网络。

CDI仅允许你根据上述条款和条件使用SDK。SDK不是出售的商品。CDI及其许可方保留对SDK及相关文档的所有权利、所有权和利益,包括但不限于任何组件、修正、更新、升级、方法、衍生作品及其相关文档,以及与SDK相关的所有商标、商号、商业秘密和其他专有信息。CDI还拥有与SDK相关的所有建议、想法、增强请求或反馈的权利。

所有未明确授予你的权利均保留给CDI及其许可方,你没有任何因暗示或禁止反言而产生的权利。


完整示例Demo

下面是使用Flutter集成Contour AI SDK插件的具体示例代码:

import 'dart:io';

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:contouraisdk/contouraisdk.dart';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

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

class _MyAppState extends State<MyApp> {
  String frontImageUri = '';
  String rearImageUri = '';

  [@override](/user/override)
  void initState() {
    super.initState();
    Contouraisdk.registerCallbacks(onDataReceived, onEventCaptured, onContourClosed);
  }

  // 异步初始化平台消息
  Future<void> callContour(String face) async {
    try {
      await Contouraisdk.startContourSDK("", face, "both", false);
    } on PlatformException catch (e) {
      print(e.message);
    }
  }

  // 接收数据回调函数
  void onDataReceived(Map<String, String> data) {
    String? croppedFront = data['croppedFrontUri'];
    String? croppedRear = data['croppedRearUri'];
    print('Received data from URI for front cropped: $croppedFront');
    print('Received data from URI for rear cropped: ${data['croppedRearUri']}');
    print('Received data from URI for front full: ${data['frontUri']}');
    print('Received data from URI for rear full: ${data['rearUri']}');
    if (croppedFront != null) {
      setState(() {
        frontImageUri = data['croppedFrontUri']!;
      });
    }
    if (croppedRear != null) {
      setState(() {
        rearImageUri = data['croppedRearUri']!;
      });
    }
  }

  // 事件捕获回调函数
  void onEventCaptured(String data) {
    print('Received data in onEventCaptured: $data');
  }

  // 关闭回调函数
  void onContourClosed() {
    print('Received data in onContourClosed');
  }

  // 构建图片控件
  Widget _buildImageWidget(String uri, double width, double height, String face) {
    if (uri.isNotEmpty) {
      return GestureDetector(
        onTap: () {
          callContour(face);
        }, // 定义点击处理函数
        child: Image.file(
          File(uri),
          width: width,
          height: height,
        ),
      );
    } else {
      return GestureDetector(
        onTap: () {
          callContour(face);
        },
        child: Image.asset(
          'assets/placeholder.png',
          width: width,
          height: height,
        ),
      );
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
          appBar: AppBar(
            title: const Text('Contour 示例'),
          ),
          body: Center(
              child: Column(
            mainAxisAlignment: MainAxisAlignment.start,
            children: [
              const SizedBox(height: 24),
              const Text("正面",
                  style: TextStyle(fontSize: 16, color: Colors.black87)),
              const SizedBox(height: 16),
              _buildImageWidget(frontImageUri, 400, 200, 'front'),
              const SizedBox(height: 30),
              const Text("背面",
                  style: TextStyle(fontSize: 16, color: Colors.black87)),
              const SizedBox(height: 16),
              _buildImageWidget(rearImageUri, 400, 200, 'back'),
            ],
          ))),
    );
  }
}

更多关于Flutter集成Contour AI SDK插件contouraisdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter集成Contour AI SDK插件contouraisdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中集成Contour AI SDK插件(contouraisdk)的步骤通常包括以下几个主要步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加 contouraisdk 插件的依赖。假设 contouraisdk 是一个已经发布在 pub.dev 上的插件,你可以直接添加:

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

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

2. 初始化 SDK

在你的Flutter应用中,通常需要在应用启动时初始化 contouraisdk。你可以在 main.dart 中进行初始化:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Contour AI SDK
  await ContourAISDK.initialize(
    apiKey: 'YOUR_API_KEY',  // 替换为你的API Key
    environment: Environment.sandbox,  // 或者 Environment.production
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Contour AI SDK Example',
      home: HomeScreen(),
    );
  }
}

3. 使用 SDK 功能

根据 contouraisdk 提供的功能,你可以在应用中使用它。例如,如果 SDK 提供了人脸检测功能,你可以这样调用:

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

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

class _HomeScreenState extends State<HomeScreen> {
  String _result = '';

  Future<void> _detectFace() async {
    try {
      final result = await ContourAISDK.detectFace();
      setState(() {
        _result = result;
      });
    } catch (e) {
      setState(() {
        _result = 'Error: $e';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Contour AI SDK Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _detectFace,
              child: Text('Detect Face'),
            ),
            SizedBox(height: 20),
            Text(_result),
          ],
        ),
      ),
    );
  }
}

4. 处理权限

某些功能可能需要特定的权限(例如相机权限)。你需要在 AndroidManifest.xmlInfo.plist 中添加相应的权限声明,并在Flutter中请求权限。

Android:

android/app/src/main/AndroidManifest.xml 中添加:

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

iOS:

ios/Runner/Info.plist 中添加:

<key>NSCameraUsageDescription</key>
<string>We need access to the camera for face detection.</string>

在Flutter中请求权限:

import 'package:permission_handler/permission_handler.dart';

Future<void> _requestPermissions() async {
  if (await Permission.camera.request().isGranted) {
    // 权限已授予
  } else {
    // 处理权限被拒绝的情况
  }
}

5. 处理回调与事件

如果 contouraisdk 提供了回调或事件监听机制,你需要在适当的地方注册监听器。例如:

ContourAISDK.onFaceDetected((result) {
  setState(() {
    _result = result;
  });
});

6. 调试与测试

在开发过程中,确保你能够捕获和处理SDK可能抛出的异常,并使用调试工具(如 printlogger)来输出调试信息。

7. 发布应用

在发布应用之前,确保你已经正确配置了所有必要的权限和设置,并进行了充分的测试。

8. 参考文档

最后,建议仔细阅读 contouraisdk 的官方文档,了解所有可用的功能、参数和配置选项。

示例代码

以下是一个完整的示例代码,假设 contouraisdk 提供了人脸检测功能:

import 'package:flutter/material.dart';
import 'package:contouraisdk/contouraisdk.dart';
import 'package:permission_handler/permission_handler.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化Contour AI SDK
  await ContourAISDK.initialize(
    apiKey: 'YOUR_API_KEY',
    environment: Environment.sandbox,
  );

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Contour AI SDK Example',
      home: HomeScreen(),
    );
  }
}

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

class _HomeScreenState extends State<HomeScreen> {
  String _result = '';

  Future<void> _detectFace() async {
    if (await Permission.camera.request().isGranted) {
      try {
        final result = await ContourAISDK.detectFace();
        setState(() {
          _result = result;
        });
      } catch (e) {
        setState(() {
          _result = 'Error: $e';
        });
      }
    } else {
      setState(() {
        _result = 'Camera permission denied';
      });
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Contour AI SDK Example'),
      ),
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: _detectFace,
              child: Text('Detect Face'),
            ),
            SizedBox(height: 20),
            Text(_result),
          ],
        ),
      ),
    );
  }
}
回到顶部