/** * Face landmark detection using MediaPipe FaceLandmarker. * * Runs entirely client-side. Uses iris diameter (~11.7 mm — biologically * stable across adults) as the pixel→mm scale anchor, then derives the * measurements that eyewear + headwear size guides ask for. * * Shares the same `@mediapipe/tasks-vision` bundle loaded by * `pose-detect.ts`, so the only extra cost is the ~3 MB `.task` file. */ import { type BodyLandmarks } from "./pose-detect"; export interface Pt { x: number; y: number; z?: number; } export interface FaceLandmarks { noseTip: Pt; noseBridge: Pt; leftInnerEye: Pt; rightInnerEye: Pt; leftOuterEye: Pt; rightOuterEye: Pt; leftIrisCenter: Pt; rightIrisCenter: Pt; leftIrisRing: Pt[]; rightIrisRing: Pt[]; leftTragus: Pt; rightTragus: Pt; forehead: Pt; chin: Pt; leftMouth: Pt; rightMouth: Pt; } export interface FaceMeasurementsMm { irisDiameter: number; pd: number; bridgeWidth: number; faceWidth: number; templeLengthLeft: number; templeLengthRight: number; templeLength: number; headWidth: number; headDepth: number; headCircumference: number; } export interface FaceDetectResult { landmarks: FaceLandmarks; measurementsMm: FaceMeasurementsMm; irisConfidence: number; imageWidth: number; imageHeight: number; } /** * Full-body photos can make the face/head too small for FaceLandmarker. * Use BlazePose's nose + shoulders to crop a local head/upper-chest image for * sizing only. The original full-body photo remains the try-on input. */ export declare function cropHeadForSizing(imageSrc: string | HTMLImageElement, providedBodyLandmarks?: BodyLandmarks | null): Promise; /** Detect face landmarks and compute eyewear/headwear measurements in mm. */ export declare function detectFaceMeasurements(imageSrc: string | HTMLImageElement): Promise;