kalidokit
Version:
Blendshape and kinematics calculator for Mediapipe/Tensorflow.js Face, Eyes, Pose, and Finger tracking models.
125 lines (124 loc) • 3.31 kB
TypeScript
import Vector from "./utils/vector";
import Euler from "./utils/euler";
import { RIGHT, LEFT } from "./constants";
export interface ISolveOptions {
/**
* Runtime for the solver.
* @default "mediapipe"
* @type {"tfjs" | "mediapipe"}
*/
runtime: "tfjs" | "mediapipe";
/**
* HTML Video element or selector for the video element.
* @type {HTMLElement | string}
*/
video: null | HTMLVideoElement | string;
/**
* Set Manual Size
* @type {{ width: number, height: number }}
* @default null
*/
imageSize: null | {
width: number;
height: number;
};
}
export interface IFaceSolveOptions extends ISolveOptions {
/**
* Smooth Blink Toggle
* @type {boolean}
* @default false
*/
smoothBlink: boolean;
/**
* Blink settings
*/
blinkSettings: Array<number>;
}
export interface IPoseSolveOptions extends ISolveOptions {
/**
* Toggle Calculation of legs
* @type {boolean}
* @default true
*/
enableLegs: boolean;
}
/**
* The left or the right side
*/
export declare type Side = typeof RIGHT | typeof LEFT;
export declare type XYZ = Record<"x" | "y" | "z", number>;
export declare type LR<T = Vector> = Record<"l" | "r", T>;
export declare type RotationOrder = "XYZ" | "YZX" | "ZXY" | "XZY" | "YXZ" | "ZYX";
export declare type EulerRotation = XYZ & {
rotationOrder?: RotationOrder;
};
export declare type AxisMap = Record<"x" | "y" | "z", "x" | "y" | "z">;
export interface IHips {
position: XYZ;
rotation?: Vector;
worldPosition?: XYZ;
}
export declare type TPose = {
RightUpperArm: Euler;
RightLowerArm: Euler;
LeftUpperArm: Euler;
LeftLowerArm: Euler;
RightHand: Vector;
LeftHand: Vector;
RightUpperLeg: Euler | XYZ;
RightLowerLeg: Euler | XYZ;
LeftUpperLeg: Euler | XYZ;
LeftLowerLeg: Euler | XYZ;
Hips: IHips;
Spine: Vector | XYZ;
};
export declare type HandKeys<S extends Side> = `${S}${"Wrist" | "RingProximal" | "RingIntermediate" | "RingDistal" | "IndexProximal" | "IndexIntermediate" | "IndexDistal" | "MiddleProximal" | "MiddleIntermediate" | "MiddleDistal" | "ThumbProximal" | "ThumbIntermediate" | "ThumbDistal" | "LittleProximal" | "LittleIntermediate" | "LittleDistal"}`;
export declare type THand<S extends Side> = Record<HandKeys<S>, XYZ>;
export declare type THandUnsafe<S extends Side> = Record<HandKeys<S> | string, XYZ>;
export declare type TFace = {
head: {
x: number;
y: number;
z: number;
width: number;
height: number;
position: Vector | XYZ;
normalized: Vector | XYZ;
degrees: Vector | XYZ;
};
eye: {
l: number;
r: number;
};
brow: number;
pupil: {
x: number;
y: number;
};
mouth: {
x: number;
y: number;
shape: {
A: number;
E: number;
I: number;
O: number;
U: number;
};
};
};
/**
* TFJS 3D Pose Vector Type
*/
export declare type TFVectorPose = Array<{
x: number;
y: number;
z: number;
score?: number;
visibility?: number;
}>;
/**
* Array of results from TFJS or MediaPipe
*/
export declare type Results = Array<XYZ>;