id-scanner-lib
Version:
Browser-based ID card, QR code, and face recognition scanner with liveness detection
200 lines (166 loc) • 5.2 kB
text/typescript
/**
* @file 外部库类型声明
* @description 为外部依赖库声明类型定义
*/
/**
* TensorFlow.js 相关类型
*/
declare module '@tensorflow/tfjs' {
export interface Tensor<R extends Rank = Rank> {
dataId: object;
id: number;
shape: number[];
dtype: string;
size: number;
rank: number;
dispose(): void;
// 其他方法...
}
export type Rank = 'R0' | 'R1' | 'R2' | 'R3' | 'R4' | 'R5' | 'R6';
export function ready(): Promise<void>;
export function dispose(): void;
// 更多方法...
}
/**
* face-api.js 相关类型
*/
declare module '@vladmandic/face-api' {
export namespace tf {
export function dispose(): Promise<void>;
}
export namespace env {
export function monkeyPatch(env: any): void;
}
export type TNetInput = HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageData | { toString(): string } | string;
export interface FaceDetectionWithLandmarks {
detection: FaceDetection;
landmarks: FaceLandmarks68 | FaceLandmarks68TinyNet;
getRefRect(): any;
forwardFaceDetection(): FaceDetection;
}
export interface WithFaceDescriptor<T> {
descriptor: Float32Array;
}
export interface WithAge {
age: number;
}
export interface WithGender {
gender: string;
genderProbability: number;
}
export interface FaceMatch {
label: string;
distance: number;
}
export interface WithFaceExpressions {
expressions: {
neutral: number;
happy: number;
sad: number;
angry: number;
fearful: number;
disgusted: number;
surprised: number;
};
}
export interface IFaceLandmarks {
positions: Point[];
shift(point: Point): IFaceLandmarks;
forSize<T extends IFaceLandmarks>(width: number, height: number): T;
}
export interface IRect {
x: number;
y: number;
width: number;
height: number;
}
export interface IBoundingBox extends IRect {
left: number;
top: number;
right: number;
bottom: number;
}
export interface IFaceDetection {
score: number;
box: IBoundingBox;
}
export class Point {
x: number;
y: number;
constructor(x: number, y: number);
}
export class FaceDetection implements IFaceDetection {
score: number;
box: IBoundingBox;
constructor(score: number, box: IBoundingBox);
}
export class FaceLandmarks68 implements IFaceLandmarks {
positions: Point[];
constructor(points: Point[]);
shift(point: Point): FaceLandmarks68;
forSize<T extends IFaceLandmarks>(width: number, height: number): T;
}
export class FaceLandmarks68TinyNet extends FaceLandmarks68 {
constructor(points: Point[]);
}
export class SsdMobilenetv1Options {
constructor(options?: { minConfidence?: number; maxResults?: number });
}
export class TinyFaceDetectorOptions {
constructor(options?: { inputSize?: number; scoreThreshold?: number });
}
export class MtcnnOptions {
constructor(options?: { minFaceSize?: number; scaleFactor?: number; minConfidence?: number });
}
export class FaceRecognitionNet {
constructor();
loadFromUri(uri: string): Promise<void>;
}
export class FaceExpressionNet {
constructor();
loadFromUri(uri: string): Promise<void>;
}
export class AgeGenderNet {
constructor();
loadFromUri(uri: string): Promise<void>;
}
export interface NeuralNetwork {
loadFromUri(uri: string): Promise<void>;
isLoaded: boolean;
dispose(): void;
}
// 命名空间中的网络
export const nets: {
ssdMobilenetv1: NeuralNetwork;
tinyFaceDetector: NeuralNetwork;
faceLandmark68Net: NeuralNetwork;
faceLandmark68TinyNet: NeuralNetwork;
faceRecognitionNet: NeuralNetwork;
faceExpressionNet: NeuralNetwork;
ageGenderNet: NeuralNetwork;
mtcnn: NeuralNetwork;
};
// 工具函数
export function createCanvasFromMedia(media: TNetInput): HTMLCanvasElement;
export function detectAllFaces(input: TNetInput, options?: SsdMobilenetv1Options | TinyFaceDetectorOptions | MtcnnOptions): DetectAllFacesTask;
export interface DetectAllFacesTask {
withFaceLandmarks(useTinyModel?: boolean): DetectAllFacesWithLandmarksTask;
run(): Promise<FaceDetection[]>;
}
export interface DetectAllFacesWithLandmarksTask {
withFaceExpressions(): DetectAllFacesWithFaceExpressionsTask;
withAgeAndGender(): DetectAllFacesWithAgeAndGenderTask;
run(): Promise<FaceDetectionWithLandmarks[]>;
}
export interface DetectAllFacesWithFaceExpressionsTask {
withAgeAndGender(): DetectAllFacesWithAgeAndGenderTask;
run(): Promise<Array<FaceDetectionWithLandmarks & WithFaceExpressions>>;
}
export interface DetectAllFacesWithAgeAndGenderTask {
withFaceDescriptors(): DetectAllFacesWithFaceDescriptorsTask;
run(): Promise<Array<FaceDetectionWithLandmarks & WithFaceExpressions & WithAge & WithGender>>;
}
export interface DetectAllFacesWithFaceDescriptorsTask {
run(): Promise<Array<FaceDetectionWithLandmarks & WithFaceExpressions & WithAge & WithGender & WithFaceDescriptor<any>>>;
}
}