Как реализовать библиотеку позирования MediaPipe в React Native Expo

#react-native #expo #mediapipe #pose-detection

Вопрос:

Я работаю над модулем, в котором я должен интегрировать обнаружение позы в наше мобильное приложение. Мобильное приложение разработано с использованием платформы react native, а проект управляется expo. Мы работаем с библиотекой @mediapipe / pose (MediaPipe pose). Библиотека была установлена через npm. Вот код App.js файл

 import React, { useState, useEffect, useRef } from 'react'
import { StyleSheet, Text, View, useWindowDimensions, StatusBar } from 'react-native'
import { Camera } from 'expo-camera'
import Canvas from 'react-native-canvas'
import { drawConnectors, drawLandmarks } from '@mediapipe/drawing_utils'
import { Pose } from '@mediapipe/pose'

export default function App() {

  const [ permission, setPermission ] = useState(null)

  const cameraRef = useRef(null)

  const canvasRef = useRef(null)

  var camera = null

  const { width, height } = useWindowDimensions()

  useEffect(() => {

    (async () => {
      
      const { status } = await Camera.requestCameraPermissionsAsync()
      setPermission(status === 'granted')

    })()

  }, [])

  useEffect(() => {

    const pose = new Pose({
        locateFile: (file) => {
          return `https://cdn.jsdelivr.net/npm/@mediapipe/pose/${file}`;
        }
    })
    
    // pose.setOptions({
    //   modelComplexity: 1,
    //   smoothLandmarks: true,
    //   enableSegmentation: true,
    //   smoothSegmentation: true,
    //   minDetectionConfidence: 0.5,
    //   minTrackingConfidence: 0.5
    // })

    // const canvas = canvasRef.current
    // const context = canvas.getContext('2d')
    // context.fillStyle = 'red'
    // context.fillRect(100, 100, canvasRef.current.width, canvasRef.current.height)

  }, [])

  if(permission === null)
  {
    return <View/>
  }

  if(permission === false)
  {
    return <View style = {{ justifyContent: 'center' }}>

      <Text style = {{ alignSelf: 'center' }}>Permission not granted</Text>

    </View>
  }

  return (
    <View style={styles.container}>
      
      <Camera style = {{ width, height, marginRight: 'auto', marginLeft: 'auto', left: 0, right: 0, zIndex: 9 }} ref = { cameraRef } ratio = '16:9' type = { Camera.Constants.Type.front }/>

      <Canvas style = {{ position: 'absolute', width, height, elevation: 1 }} ref = { canvasRef }>



      </Canvas>

    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
  },
});
 

Импорт библиотек не выдает никаких ошибок, но вызов конструктора Pose выдает ошибку.
Ошибка

 TypeError: undefined is not a constructor (evaluating 'new _pose.Pose')

This error is located at:
    in App (created by ExpoRoot)
    in ExpoRoot
    in RCTView (created by View)
    in View (created by AppContainer)
    in RCTView (created by View)
    in View (created by AppContainer)
    in AppContainer
at node_modules/react-native/Libraries/Core/ExceptionsManager.js:104:6 in reportException
at node_modules/react-native/Libraries/Core/ExceptionsManager.js:172:19 in handleException
at node_modules/react-native/Libraries/Core/ReactFiberErrorDialog.js:43:2 in showErrorDialog
at node_modules/react-native/Libraries/ReactNative/renderApplication.js:58:4 in renderApplication
at node_modules/react-native/Libraries/ReactNative/AppRegistry.js:117:25 in runnables.appKey.run
at node_modules/react-native/Libraries/ReactNative/AppRegistry.js:202:4 in runApplication
 

Вот ссылка на проект github [1]: https://github.com/HimanshuChahal/MediaPipe-Pose/tree/master

Любая помощь будет оценена. Спасибо.

Комментарии:

1. Вы когда-нибудь находили решение для этого?

2. Пока не удалось найти какое-либо решение, реализовал его на родном Android и в Интернете.

3. То же самое здесь. Хочу посмотреть, смогли ли вы это понять.

4. Я нашел это github.com/google/mediapipe/issues/2924#issuecomment-1000978143 кажется, это еще не поддерживается

5. Да, я также обнаружил эту проблему. Я реализовал обнаружение позы в Android, используя API-интерфейс Google ML kit, и я считаю, что это так же хорошо