Flutter增强现实功能插件rwa_deep_ar的使用
概述
camera_deep_ar是一个用于摄像头视频和照片增强现实录制的新插件。此插件要求 Android SDK 19+ 和 iOS 10+。在代码中必须请求权限,否则首次运行时可能无法正常工作。
开始使用
获取 API 密钥
首先,从 DeepAr 获取您的 API 密钥。
示例代码
以下是一个完整的示例代码,展示如何使用 camera_deep_ar
插件。
import 'package:flutter/material.dart';
import 'package:camera_deep_ar/camera_deep_ar.dart';
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String _platformVersion = 'Unknown';
CameraDeepArController cameraDeepArController;
int currentPage = 0;
final vp = PageController(viewportFraction: .24);
Effects currentEffect = Effects.none;
Filters currentFilter = Filters.none;
Masks currentMask = Masks.none;
bool isRecording = false;
@override
void initState() {
super.initState();
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
backgroundColor: Colors.black,
appBar: AppBar(
title: const Text('DeepAR Camera Example'),
),
body: Stack(
children: [
CameraDeepAr(
onCameraReady: (isReady) {
_platformVersion = "Camera status $isReady";
setState(() {});
},
onImageCaptured: (path) {
_platformVersion = "Image Taken @ $path";
setState(() {});
},
onVideoRecorded: (path) {
_platformVersion = "Video Recorded @ $path";
isRecording = false;
setState(() {});
},
androidLicenceKey:
"3b58c448bd650192e7c53d965cfe5dc1c341d2568b663a3962b7517c4ac6eeed0ba1fb2afe491a4b",
iosLicenceKey:
"53618212114fc16bbd7499c0c04c2ca11a4eed188dc20ed62a7f7eec02b41cb34d638e72945a6bf6",
cameraDeepArCallback: (c) async {
cameraDeepArController = c;
setState(() {});
},
),
Align(
alignment: Alignment.bottomCenter,
child: Container(
padding: EdgeInsets.all(20),
child: Column(
mainAxisSize: MainAxisSize.min,
mainAxisAlignment: MainAxisAlignment.end,
children: [
Text(
'Response >>> : $_platformVersion\n',
textAlign: TextAlign.center,
style: TextStyle(fontSize: 14, color: Colors.white),
),
SizedBox(height: 20),
Row(
children: [
Expanded(
child: FlatButton(
onPressed: () {
if (null == cameraDeepArController) return;
if (isRecording) return;
cameraDeepArController.snapPhoto();
},
child: Icon(Icons.camera_enhance_outlined),
color: Colors.white,
padding: EdgeInsets.all(15),
),
),
if (isRecording)
Expanded(
child: FlatButton(
onPressed: () {
if (null == cameraDeepArController) return;
cameraDeepArController.stopVideoRecording();
isRecording = false;
setState(() {});
},
child: Icon(Icons.videocam_off),
color: Colors.red,
padding: EdgeInsets.all(15),
),
)
else
Expanded(
child: FlatButton(
onPressed: () {
if (null == cameraDeepArController) return;
cameraDeepArController.startVideoRecording();
isRecording = true;
setState(() {});
},
child: Icon(Icons.videocam),
color: Colors.green,
padding: EdgeInsets.all(15),
),
),
],
),
SingleChildScrollView(
padding: EdgeInsets.all(15),
scrollDirection: Axis.horizontal,
child: Row(
children: List.generate(Masks.values.length, (p) {
bool active = currentPage == p;
return GestureDetector(
onTap: () {
currentPage = p;
cameraDeepArController.changeMask(p);
setState(() {});
},
child: Container(
margin: EdgeInsets.all(5),
padding: EdgeInsets.all(12),
width: active ? 100 : 80,
height: active ? 100 : 80,
alignment: Alignment.center,
decoration: BoxDecoration(
color: active ? Colors.orange : Colors.white,
shape: BoxShape.circle,
),
child: Text(
"$p",
textAlign: TextAlign.center,
style: TextStyle(
fontSize: active ? 16 : 14,
color: Colors.black,
),
),
),
);
}),
),
),
],
),
),
),
],
),
),
);
}
}
功能说明
-
拍照
cameraDeepArController.snapPhoto();
-
开始录像
cameraDeepArController.startVideoRecording();
-
停止录像
cameraDeepArController.stopVideoRecording();
-
切换面具
cameraDeepArController.changeMask(p);
更多功能将在后续版本中添加。
Android 配置
在 Android 中,可以使用 permission_handler
插件来管理权限。
权限配置
在 AndroidManifest.xml
中添加以下权限:
<uses-permission android:name="android.permission.FLASHLIGHT" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera.front" />
<uses-feature android:name="android.hardware.microphone" />
<uses-feature android:name="android.hardware.camera2" />
<uses-feature
android:name="android.hardware.camera.autofocus"
android:required="true" />
<uses-feature android:name="android.hardware.camera.flash" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
ProGuard 配置
在 proguard-rules.pro
文件中添加以下内容:
-keepclassmembers class ai.deepar.ar.DeepAR { *; }
对于发布模式,在 build.gradle
的 release
部分添加:
buildTypes {
release {
signingConfig signingConfigs.debug
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
iOS 配置
在 iOS 中,只需在 Info.plist
中添加权限描述。
<key>NSCameraUsageDescription</key>
<string>Allows you to capture your best moment</string>
<key>io.flutter.embedded_views_preview</key>
<true/>
<key>NSPhotoLibraryAddUsageDescription</key>
<string>Allows you to capture your best moment</string>
<key>NSMicrophoneUsageDescription</key>
<string>Needs access to your mic to help your record voice notes on chat/message conversations</string>
更多关于Flutter增强现实功能插件rwa_deep_ar的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter增强现实功能插件rwa_deep_ar的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
rwa_deep_ar
是一个 Flutter 插件,用于集成 DeepAR 增强现实(AR)功能到 Flutter 应用中。DeepAR 是一个强大的 AR SDK,支持面部滤镜、3D 效果、面部跟踪等功能。通过 rwa_deep_ar
插件,你可以在 Flutter 应用中轻松实现这些 AR 效果。
以下是如何使用 rwa_deep_ar
插件的步骤:
1. 添加依赖
首先,在 pubspec.yaml
文件中添加 rwa_deep_ar
插件的依赖:
dependencies:
flutter:
sdk: flutter
rwa_deep_ar: ^0.0.1 # 检查最新版本
然后运行 flutter pub get
来安装依赖。
2. 获取 DeepAR License Key
在使用 DeepAR 之前,你需要从 DeepAR 官网获取一个 License Key。这个 Key 用于初始化 DeepAR SDK。
3. 初始化 DeepAR
在你的 Dart 代码中,导入 rwa_deep_ar
插件并初始化 DeepAR:
import 'package:rwa_deep_ar/rwa_deep_ar.dart';
final deepAr = DeepAr();
void initDeepAr() async {
await deepAr.initialize(
'YOUR_DEEPAR_LICENSE_KEY',
// 其他可选参数
);
}
4. 显示 AR 视图
你可以使用 DeepArView
来显示 AR 效果。将 DeepArView
添加到你的 widget 树中:
class MyHomePage extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('DeepAR Example'),
),
body: DeepArView(
onViewCreated: (controller) {
// 你可以在这里访问控制器来加载效果、切换滤镜等
},
),
);
}
}
5. 加载 AR 效果
你可以通过 DeepArController
加载不同的 AR 效果。例如,加载一个面部滤镜:
void loadEffect(DeepArController controller) {
controller.loadEffect('assets/effects/effect1.deepar');
}
你可以在 onViewCreated
回调中访问 DeepArController
,并在需要的时候调用 loadEffect
。
6. 切换摄像头
你可以通过 DeepArController
切换前置和后置摄像头:
void switchCamera(DeepArController controller) {
controller.switchCamera();
}
7. 处理生命周期
在 Flutter 中,你需要正确处理插件的生命周期。例如,在 dispose
方法中释放资源:
[@override](/user/override)
void dispose() {
deepAr.dispose();
super.dispose();
}