분류, 패키지 및 저장소 검색

camera_deep_ar 표지
패키지 상세v0.0.2+3

camera_deep_ar

카메라 비디오 및 사진 증강 현실 녹화를 위한 플러터 플러그인입니다.

AndroidiOS
30일 다운로드
13
좋아요
95
Pub 점수
120

패키지 설치

flutter pub add camera_deep_ar

패키지 개요

공개 정보를 바탕으로 생성한 선택 가이드입니다.

camera_deep_ar는 DeepAR SDK를 사용하여 증강현실(AR) 비디오 및 사진 녹화를 가능하게 하는 Flutter 플러그인입니다. Android와 iOS 플랫폼과 원활하게 통합되어 개발자가 카메라 스트림에 얼굴 필터, 애니메이션 및 가상 객체와 같은 실시간 AR 효과를 추가할 수 있도록 합니다. 이 플러그인은 AR 오버레이와 함께 미디어를 캡처하고 처리하기 위한 간단한 API를 제공함으로써 AR 구현을 간소화합니다. 소셜 앱, 게임 및 인터랙티브 경험에 적합하며 고품질 출력과 부드러운 성능을 지원합니다. DeepAR 엔진 기반으로 제작되어 다양한 기기에서 신뢰할 수 있는 얼굴 추적 및 효과 렌더링을 보장합니다.

사용 사례

  • 소셜 미디어 필터
  • 인터랙티브 게이밍
  • 가상 시착
  • 라이브 AR 스트리밍
  • 사진 편집 앱

주요 기능

  • 실시간 AR 효과
  • 얼굴 및 객체 추적
  • 고품질 비디오 녹화
  • 크로스 플랫폼 지원 (Android 및 iOS)
  • Flutter와의 간편한 통합

적합한 대상

  • AR 기능을 갖춘 앱을 개발하는 개발자
  • 소셜 미디어 플랫폼
  • 가상 시착을 갖춘 전자상거래
  • 게임화 기능

고려 사항

  • DeepAR SDK 라이센스가 필요합니다
  • 장치 리소스 사용량이 더 높을 수 있습니다
  • DeepAR 전문 지식 없이 제한된 사용자 정의
  • 외부 SDK 업데이트에 따라 달라짐

원본 README

연결된 소스 저장소의 README 원문 스냅샷입니다. 최신 내용은 저장소에서 확인하세요.

camera_deep_ar

A new Flutter plugin for Camera video and Photo Augmented reality recording. This plug-in requires Android SDK 19+ and iOS 10+

Getting Started

Please follow the example on the dev channel https://github.com/mtellect/CameraDeepAR/tree/dev as the dev channel has the recent code updates

Get your ApiKeys from DeepAr a link

DeepAr Camera Demo

  1. Simply follow the example main.dart. More documentations to come in as time permits

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),
                //height: 250,
                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),
                                )),
                          );
                        }),
                      ),
                    )
                  ],
                ),
              ),
            )
          ],
        ),
      ),
    );
  }
}

  1. To snap a photo

 cameraDeepArController.snapPhoto();

  1. To record a video

 cameraDeepArController.startVideoRecording();

  1. To stop video recording

cameraDeepArController.stopVideoRecording();

  1. To stop video recording

cameraDeepArController.stopVideoRecording();

  1. To change a mask

cameraDeepArController.changeMask(p);

More to come....

Android

You can use Permission_handler, a permissions plugin for Flutter. Require and add the following permissions in your manifest:

Add this to the proguard-rules.pro


-keepclassmembers class ai.deepar.ar.DeepAR { *; }

for release mode modify and add to your BuildType in your build.gradle

    buildTypes {
        release {
            // TODO: Add your own signing config for the release build.
            // Signing with the debug keys for now, so `flutter run --release` works.
            signingConfig signingConfigs.debug
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }


    <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" />

iOS

You only need add the permission message on the 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>

카테고리

의존성

소스 저장소

이 패키지를 사용하는 프로젝트

아직 데이터가 없습니다.