Создание AR-масок для лица в React Native

Создание AR-масок для лица в React Native

Содержание
  1. Необходимые условия
  2. Варианты AR-фреймворков для React Native
    1. DeepAR
    2. ViroReact
    3. Banuba
  3. Что такое DeepAR?
  4. Начало работы с DeepAR
  5. Создание пользовательской AR-маски для лица
  6. Использование маски лица AR в React Native
  7. Использование маски лица
  8. Заключение

Автор Айви Walobwa✏️

Дополненная реальность (AR) - это технология, объединяющая сгенерированные компьютером изображения с реальным миром. Создание AR-приложений с помощью React Native стало популярным благодаря его кроссплатформенным возможностям, широкой поддержке сообщества и множеству библиотек, позволяющих разработчикам создавать захватывающие AR-опыты.

В этой статье мы рассмотрим, как создать пользовательскую AR-маску для лица с помощью DeepAR и использовать ее в приложении React Native. Полный код этой статьи можно посмотреть на GitHub.

Необходимые условия

Это руководство предполагает базовое понимание React Native и необходимых инструментов разработки. Знание DeepAR не является обязательным.

Мы создадим простое приложение React Native, которое загружает AR-маску для лица из DeepAR.

Варианты AR-фреймворков для React Native

Существует несколько AR-фреймворков, которые вы можете выбрать для добавления AR-фильтров и эффектов в ваше React Native-приложение. Некоторые варианты включают:

DeepAR

Предоставляет инструменты и SDK для создания AR-фильтров и эффектов и добавления их на любую платформу, сопровождается хорошо написанной документацией DeepAR имеет свою цену, а бесплатный уровень ограничен только определенным количеством пользователей Проекты DeepAR могут быть добавлены в ваше приложение React Native с помощью пакета react-native-deepar.

ViroReact

Платформа сообщества с открытым исходным кодом, позволяющая бесплатно создавать AR/VR-приложения ViroReact поддерживает ARKit и ARCore Она хорошо документирована, проста в освоении и может использоваться на любой платформе

Banuba

Предлагает SDK для добавления AR-фильтров и эффектов в ваше приложение Face AR SDK поддерживается на различных платформах и хорошо документирован, но для получения SDK-токена вам нужно заказать бесплатную пробную версию Цены на AR SDK не раскрываются на их сайте

Это лишь некоторые из доступных вариантов. В этой статье мы будем использовать платформу DeepAR для создания, редактирования и добавления AR-маски для лица в наше приложение React Native.

Что такое DeepAR?

DeepAR - это фреймворк для создания приложений дополненной реальности. DeepAR предлагает различные продукты, которые позволяют разработчикам создавать захватывающий опыт с помощью AR, такие как:

DeepAR SDK: Позволяет интегрировать AR в любое приложение DeepAR Studio: Позволяет создавать AR-фильтры и эффекты Asset Store: Позволяет попробовать готовые фильтры и эффекты

Среди ключевых функций DeepAR - фильтры для лица, эффекты, маски, фильтры для AR-красоты и макияжа, распознавание эмоций в реальном времени и многое другое. Хотя DeepAR и не бесплатен, он позволяет создавать бесплатные приложения, которыми могут пользоваться до 10 человек.

Начало работы с DeepAR

deepar-license-key.png
deepar-license-key.png

Создание пользовательской AR-маски для лица

Мы будем использовать DeepAR Studio для создания и рендеринга пользовательской маски лица в нашем приложении React Native. Вы можете использовать ее для создания или тестирования пользовательских AR-фильтров.

editing-mesh-properties.png
editing-mesh-properties.png
export-effects.png
export-effects.png

Если вы используете Supabase, создайте общедоступное хранилище, а затем добавьте экспортированный файл. Затем вы можете использовать полученный URL-адрес для получения актива в своем приложении.

Таким образом, вы готовы использовать маску лица в своем приложении React Native.

Использование маски лица AR в React Native

Сначала создайте приложение React Native, используя команду ниже:

npx react-native@latest init reactdeepar.

Далее добавьте следующие зависимости в файл package.json, а затем запустите Yarn для их установки:

react-native-deepar: ”^0.11.0”, “rn-fetch-blob”: ”^0.12.0”`

Пакет react-native-deepar предлагает обертку React Native для DeepAR, и мы будем использовать пакет rn-fetch-blob для получения нашей пользовательской маски лица через интернет.

Обновите свой файл App.tsx с помощью приведенного ниже фрагмента кода. Замените <YOUR-SUPABASE-FILE-URL> на URL файла, хранящегося на Supabase, а <YOUR-API-KEY> на лицензионный ключ DeepAR для конкретного приложения:

import { useEffect, useRef, useState } from 'react';
import { Dimensions, Linking, SafeAreaView, StyleSheet, Text, TouchableOpacity, View } from 'react-native';
import DeepARView, { IDeepARHandle, Camera, CameraPermissionRequestResult, ErrorTypes, CameraPositions } from 'react-native-deepar';
import RNFetchBlob from 'rn-fetch-blob';

const App = () => {
  const deepARRef = useRef<IDeepARHandle>(null);
  const [permissionsGranted, setPermissionsGranted] = useState(false);

  // Request camera permission and handle the result
  const getPermissions = async () => {
    const cameraPermission = await Camera.requestCameraPermission();
    const isCameraAllowed = cameraPermission === CameraPermissionRequestResult.AUTHORIZED;

    if (isCameraAllowed) {
      setPermissionsGranted(true);
    } else {
      Linking.openSettings();
    }
  };

  useEffect(() => {
    getPermissions();
  }, []);

  // Load effect from a file
  const loadEffect = () => {
    RNFetchBlob.config({ fileCache: true })
      .fetch('GET', '<YOUR-SUPABASE-FILE-URL>')
      .then(res => {
        deepARRef?.current?.switchEffectWithPath({ path: res.path(), slot: 'mask' });
      })
      .catch(error => {
        console.log('Error fetching file:', error);
      });
  };

  const renderPhotoButton = () => {
    return (
      <View style={styles.button}>
        <TouchableOpacity onPress={loadEffect} style={styles.effectButton}>
          <Text style={styles.effectText}>Load Effect</Text>
        </TouchableOpacity>
      </View>
    );
  };

  const renderDeepARView = () => {
    if (!permissionsGranted) {
      return null;
    }

    return (
      <View>
        <DeepARView
          ref={deepARRef}
          apiKey="<YOUR-API-KEY>"
          videoWarmup={false}
          position={CameraPositions.FRONT}
          style={styles.deepARView}
          onError={(text: string, type: ErrorTypes) => {
            console.log('onError =>', text, 'type =>', type);
          }}
        />
        {renderPhotoButton()}
      </View>
    );
  };

  return (
    <SafeAreaView>
      <View style={styles.container}>
        {renderDeepARView()}
      </View>
    </SafeAreaView>
  );
};

export default App;

Этот код выполняет следующие действия:

Добавляет необходимые импорты в наш проект Создает ссылку на ваш компонент DeepAR и добавляет состояние разрешения приложения Добавляет логику в запрос и устанавливает необходимые разрешения камеры Извлекает маску лица DeepAR из хранилища Supabase, а затем кэширует результат в доступной папке с помощью метода switchEffectWithPath из DeepAR. Этот метод ожидает путь, где будет храниться актив, и слот, который является уникальным именем для вашей маски лица Рендеринг DeepARView с вашим ключом API. Вы можете отобразить маску лица, нажав на кнопку в пользовательском интерфейсе

Использование маски лица

Чтобы запустить проект на Android или iOS, следуйте шагам в GitHub-репозитории этой статьи. Когда вы запустите приложение и загрузите эффект, ваша AR-маска лица отобразится.

Заключение

В этом руководстве мы обсудили различные варианты AR в вашем приложении React Native. Мы изучили DeepAR и некоторые из его продуктов и возможностей. Затем мы создали пользовательскую маску для лица DeepAR с помощью DeepAR studio и использовали ее в нашем приложении React Native. Полный код, использованный в этой статье, доступен на GitHub.

Маска лица, созданная в этой статье, является простой и стандартной, но DeepAR гибко настраивается и позволяет создавать более сложные маски. Надеюсь, эта статья была вам полезна, удачного кодинга!