Flutter深度学习模型集成插件deepar_flutter的使用

发布于 1周前 作者 yuanlaile 来自 Flutter

Flutter深度学习模型集成插件deepar_flutter的使用

这个插件是DeepAR的官方SDK。支持的平台:Android和iOS。

当前版本的插件支持以下功能:

  • 实时AR预览 ✅
  • 截图 ✅
  • 录制视频 ✅
  • 切换摄像头 ✅
  • 开关闪光灯 ✅

支持情况表

Support Android iOS
SDK 23+ iOS 13.0+

安装步骤

请访问我们的开发者网站来创建项目并为两个平台生成各自的许可证密钥。

完成后,请将最新的deepar_flutter依赖添加到你的pubspec.yaml中。

Android设置

  1. compileSdkVersion 应该是 33 或更高。
  2. minSdkVersion 应该是 23 或更高。
  3. 从我们的下载部分下载本地安卓依赖,并将其粘贴到你的Flutter项目的android/app/libs/deepar.aar路径下。
  4. 确保运行pub cleanflutter pub upgrade 来获取最新代码。

还需要在AndroidManifest.xml中添加以下权限请求:

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

确保在proguard-rules.pro中添加以下规则,否则在发布版本中应用可能会崩溃:

-keepclassmembers class ai.deepar.ar.DeepAR { *; }
-keepclassmembers class ai.deepar.ar.core.videotexture.VideoTextureAndroidJava { *; }
-keep class ai.deepar.ar.core.videotexture.VideoTextureAndroidJava

iOS设置

  1. 确保你的应用程序的iOS部署版本是13.0+。
  2. 运行flutter clean 并安装Pods。
  3. 为了处理相机和麦克风权限,请在info.plist中添加以下字符串。
  4. 确保运行pub cleanflutter pub upgrade 来获取最新代码。
<key>NSCameraUsageDescription</key>
<string>---Reason----</string>
<key>NSMicrophoneUsageDescription</key>
<string>---Reason----</string>

还需在Podfile文件中添加以下内容:

post_install do |installer|
  installer.pods_project.targets.each do |target|
    ... # Here are some configurations automatically generated by flutter

    # Start of the deepar configuration
    target.build_configurations.each do |config|

	  config.build_settings['GCC_PREPROCESSOR_DEFINITIONS'] ||= [
        '$(inherited)',

        ## dart: PermissionGroup.camera
         'PERMISSION_CAMERA=1',

        ## dart: PermissionGroup.microphone
         'PERMISSION_MICROPHONE=1',    
      ]

    end 
    # End of the permission_handler configuration
  end
end

Flutter代码示例

初始化DeepArController

通过传递两个平台的许可证密钥来初始化DeepArController

final DeepArController _controller = DeepArController();
_controller.initialize(
	androidLicenseKey:"---android key---",
	iosLicenseKey:"---iOS key---",
	resolution: Resolution.high);

在Widget树中放置DeepArPreview以显示预览

[@override](/user/override)
Widget build(BuildContext context) {
  return _controller.isInitialized
      ? DeepArPreview(_controller)
      : const Center(
          child: Text("Loading Preview")
      );
}

要全屏显示预览,可以用Transform.scale()包裹DeepArPreview,并根据预览区域大小使用正确的缩放因子。更多信息可以参考相关文档。

加载效果

通过在switchPreview中传递资产文件来加载你选择的效果。

_controller.switchEffect(effect);

拍照

使用takeScreenshot()拍照,它返回图片文件。

final File file = await _controller.takeScreenshot();

录制视频

使用以下代码录制视频:

if (_controller.isRecording) {
  _controller.stopVideoRecording();
} else {
  final File videoFile = _controller.startVideoRecording();
}

完整的Flutter示例代码如下:

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

void main() => runApp(MyApp());

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

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

class _HomePageState extends State<HomePage> {
  final DeepArController _controller = DeepArController();

  [@override](/user/override)
  void initState() {
    super.initState();
    // 初始化控制器
    _controller.initialize(
        androidLicenseKey: "---android key---",
        iosLicenseKey: "---iOS key---",
        resolution: Resolution.high);
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('DeepAR Demo'),
      ),
      body: _controller.isInitialized
          ? DeepArPreview(_controller)
          : Center(child: Text("Loading Preview")),
      floatingActionButton: FloatingActionButton(
        onPressed: () async {
          if (_controller.isRecording) {
            await _controller.stopVideoRecording();
          } else {
            await _controller.startVideoRecording();
          }
        },
        child: Icon(Icons.videocam),
      ),
    );
  }
}

更多关于Flutter深度学习模型集成插件deepar_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter深度学习模型集成插件deepar_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,下面是一个关于如何在Flutter项目中集成和使用deepar_flutter插件的示例代码案例。deepar_flutter是一个用于在Flutter应用中集成深度学习模型的插件,尽管该插件的具体实现和API可能有所不同,以下是一个基于假设的示例,展示如何集成和使用该插件。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加deepar_flutter依赖:

dependencies:
  flutter:
    sdk: flutter
  deepar_flutter: ^latest_version  # 替换为实际可用的最新版本号

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

2. 配置Android和iOS项目

由于深度学习模型通常需要在原生层面进行推理,因此你可能需要在Android和iOS项目中进行一些配置,例如添加必要的权限或配置模型文件路径。这部分配置依赖于deepar_flutter的具体要求,你可能需要查阅该插件的官方文档。

3. 加载和推理模型

以下是一个Flutter应用的示例代码,展示如何使用deepar_flutter加载和推理一个深度学习模型:

import 'package:flutter/material.dart';
import 'package:deepar_flutter/deepar_flutter.dart'; // 假设这是插件的导入路径

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  late DeepARModel _model;
  late List<double> _inputData;
  late List<double>? _outputData;

  @override
  void initState() {
    super.initState();
    // 加载模型
    _loadModel();
    // 准备输入数据
    _inputData = List.filled(10, 0.0); // 假设模型需要10个输入特征
  }

  Future<void> _loadModel() async {
    try {
      // 假设loadModel方法接受模型文件的路径作为参数
      _model = await DeepARModel.loadModel('assets/model.tflite');
      print('Model loaded successfully');
    } catch (e) {
      print('Failed to load model: $e');
    }
  }

  Future<void> _runInference() async {
    if (_model != null) {
      try {
        // 运行推理
        _outputData = await _model.runInference(_inputData);
        print('Inference result: $_outputData');
      } catch (e) {
        print('Inference failed: $e');
      }
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('DeepAR Flutter Example'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              ElevatedButton(
                onPressed: () async {
                  // 假设这里填充输入数据
                  for (int i = 0; i < _inputData.length; i++) {
                    _inputData[i] = i.toDouble(); // 示例数据
                  }
                  // 运行推理
                  await _runInference();
                },
                child: Text('Run Inference'),
              ),
              if (_outputData != null)
                Text('Output Data: $_outputData'),
            ],
          ),
        ),
      ),
    );
  }
}

class DeepARModel {
  // 假设这是插件提供的模型类
  static Future<DeepARModel> loadModel(String modelPath) async {
    // 这里应该是插件的加载模型逻辑
    // 返回一个DeepARModel实例(示例代码,实际实现依赖于插件)
    return DeepARModel._();
  }

  DeepARModel._();

  Future<List<double>?> runInference(List<double> inputData) async {
    // 这里应该是插件的推理逻辑
    // 返回推理结果(示例代码,实际实现依赖于插件)
    return [0.1, 0.2, 0.3]; // 示例输出数据
  }
}

注意事项

  1. 插件API:上述代码中的DeepARModel类及其方法loadModelrunInference是假设的。你需要查阅deepar_flutter插件的官方文档,了解实际的API和用法。

  2. 模型文件:确保你的模型文件(如model.tflite)已经正确放置在项目的assets目录中,并且在pubspec.yaml文件中进行了声明。

  3. 错误处理:在实际应用中,你应该添加更完善的错误处理逻辑,以处理模型加载失败、推理失败等情况。

  4. 性能优化:深度学习推理可能会消耗较多的计算资源,因此在实际应用中你可能需要考虑性能优化,如使用GPU加速等。

由于deepar_flutter插件的具体实现和API可能有所不同,上述代码仅作为示例,展示了如何在Flutter项目中集成和使用深度学习模型插件的一般步骤。你需要根据插件的实际文档和API进行调整。

回到顶部