import type { ViewProps } from 'react-native'; export interface FaceBox { left: number; top: number; right: number; bottom: number; } export interface FaceLandmark { x: number; y: number; } export interface DetectedFace { box: FaceBox; landmarks: (FaceLandmark | null)[]; confidence: number; croppedFace?: string | null; } export interface DetectionResult { faces: DetectedFace[]; faceCount: number; hasFaces: boolean; processingTimeMs: number; frameWidth: number; frameHeight: number; } export interface LivenessResult { faceDetected: boolean; isLive: boolean; livenessScore: number; sharpness: number; isSharp: boolean; faceBox: FaceBox | null; confidence: number; processingTimeMs: number; errorMessage: string | null; } export interface RegistrationResult { success: boolean; embedding: number[] | null; faceBox: FaceBox | null; processingTimeMs: number; errorMessage: string | null; } export interface MatchResult { faceDetected: boolean; isMatch: boolean; confidence: number; distance: number; faceBox: FaceBox | null; processingTimeMs: number; errorMessage: string | null; } export interface EnrollmentCaptureEvent { photoIndex: number; photoLabel: string; totalPhotos: number; success: boolean; faceDetected: boolean; isLive?: boolean; livenessScore?: number; faceBox?: FaceBox | null; errorMessage?: string; } export interface EnrollmentCompleteEvent { success: boolean; embedding?: number[]; photoCount: number; processingTimeMs: number; errorMessage?: string; } export interface EnrollmentStatusEvent { currentPhotoIndex: number; photoLabel: string; instruction: string; photosRemaining: number; readyToCapture: boolean; faceDetected: boolean; isLive?: boolean; livenessScore?: number; faceBox?: FaceBox | null; } export interface FaceDetectionViewProps extends ViewProps { /** * Mode of operation * - "matching": Live face matching against target embedding * - "enrollment": Capture photos for enrollment using native camera * @default "matching" */ mode?: 'matching' | 'enrollment'; /** * Enable face matching against target embedding (matching mode only) * @default false */ enableMatching?: boolean; /** * Enable liveness detection * @default false */ enableLiveness?: boolean; /** * Target embedding for face matching (192-dimensional array) */ targetEmbedding?: number[]; /** * Threshold for face matching (L2 distance) * Lower values are stricter * @default 1.1 */ matchThreshold?: number; /** * Camera facing direction * @default "front" */ cameraFacing?: 'front' | 'back'; /** * Trigger photo capture in enrollment mode * Set to true to capture current frame, auto-resets after capture */ capturePhoto?: boolean; /** * Reset enrollment and start over * Set to true to clear captured photos */ resetEnrollment?: boolean; /** * Callback when a match result is available (matching mode) */ onMatchResult?: (event: { nativeEvent: MatchResult; }) => void; /** * Callback when a face is detected (with liveness info if enabled) */ onFaceDetected?: (event: { nativeEvent: FaceDetectedEvent; }) => void; /** * Callback when a photo is captured in enrollment mode */ onEnrollmentCapture?: (event: { nativeEvent: EnrollmentCaptureEvent; }) => void; /** * Callback when enrollment is complete (3 photos captured and processed) */ onEnrollmentComplete?: (event: { nativeEvent: EnrollmentCompleteEvent; }) => void; /** * Callback for enrollment status updates (ready to capture, instructions, etc.) */ onEnrollmentStatus?: (event: { nativeEvent: EnrollmentStatusEvent; }) => void; /** * Callback when an error occurs */ onError?: (event: { nativeEvent: { error: string; }; }) => void; } export interface FaceDetectedEvent { faceDetected: boolean; isLive?: boolean; livenessScore?: number; sharpness?: number; faceBox?: FaceBox | null; confidence?: number; } export interface ExpoFaceDetectionModule { detectFaces(imageBase64: string, cropFaces?: boolean): Promise; detectLargestFace(imageBase64: string): Promise; checkLiveness(imageBase64: string): Promise; extractEmbedding(imageBase64: string): Promise; registerFace(frontBase64: string, leftBase64: string, rightBase64: string): Promise; setTargetEmbedding(embedding: number[]): void; hasTarget(): boolean; clearTarget(): void; processFrame(imageBase64: string): Promise; setMinFaceRatio(ratio: number): void; getMinFaceRatio(): number; setDetectionConfidenceThreshold(threshold: number): void; getDetectionConfidenceThreshold(): number; setLivenessThreshold(threshold: number): void; getLivenessThreshold(): number; setSharpnessThreshold(threshold: number): void; getSharpnessThreshold(): number; setMatchThreshold(threshold: number): void; getMatchThreshold(): number; } //# sourceMappingURL=ExpoFaceDetection.types.d.ts.map