UNPKG

@gymbrosinc/react-native-mediapipe-pose

Version:

React Native MediaPipe Pose Detection with GPU acceleration, jump detection, and high-performance analysis

157 lines (136 loc) 4.24 kB
import type { StyleProp, ViewStyle } from 'react-native'; export type CameraType = 'front' | 'back'; /** Pose landmark with 3D coordinates and visibility */ export type PoseLandmark = { x: number; y: number; z: number; visibility: number; }; /** Pose detection result with performance metrics */ export type PoseDetectionResult = { landmarks: PoseLandmark[]; processingTime: number; timestamp: number; deviceTier?: string; confidence?: number; gpuAccelerated?: boolean; processingUnit?: string; delegate?: string; }; /** Frame processing performance info */ export type FrameProcessingInfo = { fps: number; frameCount: number; autoAdjusted?: boolean; newTargetFPS?: number; reason?: string; }; /** Device hardware capability assessment */ export type DeviceCapability = { deviceTier: 'high' | 'medium' | 'low' | 'unknown'; recommendedFPS: number; processorCount: number; physicalMemoryGB: number; systemVersion: string; }; export type OnCameraReadyEventPayload = { ready: boolean; }; export type OnErrorEventPayload = { error: string; }; export type PoseServiceLogEvent = { message: string; level: 'info' | 'debug' | 'warning' | 'error'; timestamp: number; }; export type PoseServiceErrorEvent = { error: string; timestamp: number; }; /** Jump detection result with comprehensive metrics */ export type JumpResult = { jumpHeight: number; jumpHeightInches: number; flightTime: number; takeoffVelocity: number; peakVelocity: number; takeoffForce: number; landingForce: number; hangTime: number; accuracy: number; timestamp: number; }; export type OnBaselineSetEventPayload = { baselineY: number; confidence: number; timestamp: number; }; export type OnCountdownStartEventPayload = { countdown: number; timestamp: number; }; export type OnJumpStartEventPayload = { velocity: number; force: number; timestamp: number; }; export type OnPeakHeightEventPayload = { height: number; heightInches: number; flightTime: number; timestamp: number; }; export type OnJumpEndEventPayload = { impactForce: number; timestamp: number; }; export type OnJumpResultEventPayload = JumpResult; /** GPU acceleration status */ export type GPUStatusEvent = { isUsingGPU: boolean; delegate: 'GPU' | 'CPU'; deviceTier: string; maxAccuracy: boolean; processingUnit: string; }; export type ReactNativeMediapipePoseModuleEvents = { onChange: (params: ChangeEventPayload) => void; }; export type ChangeEventPayload = { value: string; }; /** Camera view component props */ export type ReactNativeMediapipePoseViewProps = { style?: StyleProp<ViewStyle>; cameraType?: CameraType; enablePoseDetection?: boolean; isJumpDetectionEnabled?: boolean; /** Enable streaming pose data (default: false for max performance) */ enablePoseDataStreaming?: boolean; /** Throttle pose data events in ms (default: 100) */ poseDataThrottleMs?: number; /** Enable detailed logging (default: false for max performance) */ enableDetailedLogs?: boolean; fpsChangeThreshold?: number; fpsReportThrottleMs?: number; targetFPS?: number; autoAdjustFPS?: boolean; onCameraReady?: (event: { nativeEvent: OnCameraReadyEventPayload }) => void; onError?: (event: { nativeEvent: OnErrorEventPayload }) => void; onFrameProcessed?: (event: { nativeEvent: FrameProcessingInfo }) => void; onPoseDetected?: (event: { nativeEvent: PoseDetectionResult }) => void; onDeviceCapability?: (event: { nativeEvent: DeviceCapability }) => void; onPoseServiceLog?: (event: { nativeEvent: PoseServiceLogEvent }) => void; onPoseServiceError?: (event: { nativeEvent: PoseServiceErrorEvent }) => void; onGPUStatus?: (event: { nativeEvent: GPUStatusEvent }) => void; onBaselineSet?: (event: { nativeEvent: OnBaselineSetEventPayload }) => void; onCountdownStart?: (event: { nativeEvent: OnCountdownStartEventPayload; }) => void; onJumpStart?: (event: { nativeEvent: OnJumpStartEventPayload }) => void; onPeakHeight?: (event: { nativeEvent: OnPeakHeightEventPayload }) => void; onJumpEnd?: (event: { nativeEvent: OnJumpEndEventPayload }) => void; onJumpResult?: (event: { nativeEvent: OnJumpResultEventPayload }) => void; };