@sssxyd/face-liveness-detector 0.3.5 → 0.4.0-alpha.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. package/README.md +61 -45
  2. package/README.zh-Hans.md +695 -0
  3. package/dist/index.esm.js +4096 -1368
  4. package/dist/index.esm.js.map +1 -1
  5. package/dist/index.js +4098 -1367
  6. package/dist/index.js.map +1 -1
  7. package/dist/types/__tests__/motion-liveness-detector.test.d.ts +6 -0
  8. package/dist/types/__tests__/motion-liveness-detector.test.d.ts.map +1 -0
  9. package/dist/types/browser_utils.d.ts +18 -0
  10. package/dist/types/browser_utils.d.ts.map +1 -0
  11. package/dist/types/config.d.ts +3 -6
  12. package/dist/types/config.d.ts.map +1 -1
  13. package/dist/types/enums.d.ts +7 -1
  14. package/dist/types/enums.d.ts.map +1 -1
  15. package/dist/types/face-detection-engine.d.ts +132 -0
  16. package/dist/types/face-detection-engine.d.ts.map +1 -0
  17. package/dist/types/face-detection-state.d.ts +35 -0
  18. package/dist/types/face-detection-state.d.ts.map +1 -0
  19. package/dist/types/face-frontal-calculator.d.ts +130 -0
  20. package/dist/types/face-frontal-calculator.d.ts.map +1 -0
  21. package/dist/types/image-quality-calculator.d.ts +66 -0
  22. package/dist/types/image-quality-calculator.d.ts.map +1 -0
  23. package/dist/types/index.d.ts +5 -191
  24. package/dist/types/index.d.ts.map +1 -1
  25. package/dist/types/library-loader.d.ts.map +1 -1
  26. package/dist/types/motion-liveness-detector.d.ts +198 -0
  27. package/dist/types/motion-liveness-detector.d.ts.map +1 -0
  28. package/dist/types/screen-capture-detector.d.ts +187 -0
  29. package/dist/types/screen-capture-detector.d.ts.map +1 -0
  30. package/dist/types/screen-color-profile-detect.d.ts +77 -0
  31. package/dist/types/screen-color-profile-detect.d.ts.map +1 -0
  32. package/dist/types/screen-moire-pattern-detect.d.ts +102 -0
  33. package/dist/types/screen-moire-pattern-detect.d.ts.map +1 -0
  34. package/dist/types/screen-rgb-emission-detect.d.ts +42 -0
  35. package/dist/types/screen-rgb-emission-detect.d.ts.map +1 -0
  36. package/dist/types/types.d.ts +67 -62
  37. package/dist/types/types.d.ts.map +1 -1
  38. package/dist/types/uniapp-resource-manager.d.ts +57 -0
  39. package/dist/types/uniapp-resource-manager.d.ts.map +1 -0
  40. package/dist/types/uniapp-sdk.d.ts +89 -0
  41. package/dist/types/uniapp-sdk.d.ts.map +1 -0
  42. package/package.json +14 -4
  43. package/dist/types/__tests__/config.test.d.ts +0 -5
  44. package/dist/types/__tests__/config.test.d.ts.map +0 -1
  45. package/dist/types/__tests__/enums.test.d.ts +0 -5
  46. package/dist/types/__tests__/enums.test.d.ts.map +0 -1
  47. package/dist/types/__tests__/event-emitter.test.d.ts +0 -5
  48. package/dist/types/__tests__/event-emitter.test.d.ts.map +0 -1
  49. package/dist/types/__tests__/face-detection-engine.test.d.ts +0 -7
  50. package/dist/types/__tests__/face-detection-engine.test.d.ts.map +0 -1
  51. package/dist/types/exports.d.ts +0 -11
  52. package/dist/types/exports.d.ts.map +0 -1
@@ -1,15 +1,12 @@
1
1
  /**
2
2
  * Face Detection Engine - Configuration
3
3
  */
4
- import type { ResolvedEngineConfig, FaceDetectionEngineConfig } from './types';
5
- /**
6
- * Default configuration for FaceDetectionEngine
7
- */
8
- export declare const DEFAULT_CONFIG: FaceDetectionEngineConfig;
4
+ import type { ResolvedEngineOptions, FaceDetectionEngineOptions } from './types';
9
5
  /**
10
6
  * Merge user configuration with defaults
7
+ * Nested objects (face_frontal_features, image_quality_features) are deeply merged
11
8
  * @param userConfig - User provided configuration (partial, optional)
12
9
  * @returns Complete resolved configuration with all required fields
13
10
  */
14
- export declare function mergeConfig(userConfig?: Partial<FaceDetectionEngineConfig>): ResolvedEngineConfig;
11
+ export declare function mergeOptions(userConfig?: Partial<FaceDetectionEngineOptions>): ResolvedEngineOptions;
15
12
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,oBAAoB,EAAE,yBAAyB,EAAE,MAAM,SAAS,CAAA;AAG9E;;GAEG;AACH,eAAO,MAAM,cAAc,EAAE,yBA2C3B,CAAA;AAEF;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,UAAU,CAAC,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAC9C,oBAAoB,CA0FtB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAA;AA8EhF;;;;;GAKG;AACH,wBAAgB,YAAY,CAC1B,UAAU,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAC/C,qBAAqB,CAwBvB"}
@@ -40,6 +40,12 @@ export declare enum ErrorCode {
40
40
  DETECTOR_NOT_INITIALIZED = "DETECTOR_NOT_INITIALIZED",
41
41
  CAMERA_ACCESS_DENIED = "CAMERA_ACCESS_DENIED",
42
42
  STREAM_ACQUISITION_FAILED = "STREAM_ACQUISITION_FAILED",
43
- SUSPECTED_FRAUDS_DETECTED = "SUSPECTED_FRAUDS_DETECTED"
43
+ INTERNAL_ERROR = "INTERNAL_ERROR"
44
+ }
45
+ export declare enum EngineState {
46
+ IDLE = "idle",// 初始状态
47
+ INITIALIZING = "initializing",// 正在初始化
48
+ READY = "ready",// 初始化完成,就绪
49
+ DETECTING = "detecting"
44
50
  }
45
51
  //# sourceMappingURL=enums.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,cAAc;IAExB,KAAK,UAAU;IAEf,UAAU,eAAe;IAEzB,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IACrC,eAAe,oBAAoB;CACpC;AAED;;GAEG;AACH,oBAAY,SAAS;IAEnB,wBAAwB,6BAA6B;IAErD,oBAAoB,yBAAyB;IAE7C,yBAAyB,8BAA8B;IAEvD,yBAAyB,8BAA8B;CACxD"}
1
+ {"version":3,"file":"enums.d.ts","sourceRoot":"","sources":["../../src/enums.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,oBAAY,cAAc;IAExB,KAAK,UAAU;IAEf,UAAU,eAAe;IAEzB,GAAG,QAAQ;CACZ;AAED;;GAEG;AACH,oBAAY,oBAAoB;IAC9B,OAAO,YAAY;IACnB,SAAS,cAAc;IACvB,OAAO,YAAY;CACpB;AAED,oBAAY,eAAe;IACzB,MAAM,WAAW;IACjB,OAAO,YAAY;IACnB,MAAM,WAAW;CAClB;AAED;;GAEG;AACH,oBAAY,aAAa;IACvB,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,cAAc,mBAAmB;IACjC,cAAc,mBAAmB;IACjC,gBAAgB,qBAAqB;IACrC,aAAa,kBAAkB;IAC/B,aAAa,kBAAkB;IAC/B,gBAAgB,qBAAqB;IACrC,eAAe,oBAAoB;CACpC;AAED;;GAEG;AACH,oBAAY,SAAS;IAEnB,wBAAwB,6BAA6B;IAErD,oBAAoB,yBAAyB;IAE7C,yBAAyB,8BAA8B;IAEvD,cAAc,mBAAmB;CAClC;AAED,oBAAY,WAAW;IACrB,IAAI,SAAS,CAAqB,OAAO;IACzC,YAAY,iBAAiB,CAAK,QAAQ;IAC1C,KAAK,UAAU,CAAmB,WAAW;IAC7C,SAAS,cAAc;CACxB"}
@@ -0,0 +1,132 @@
1
+ /**
2
+ * Face Detection Engine - Core Detection Engine
3
+ * Framework-agnostic face liveness detection engine
4
+ */
5
+ import type { FaceDetectionEngineOptions } from './types';
6
+ import { EngineState } from './enums';
7
+ import { SimpleEventEmitter } from './event-emitter';
8
+ /**
9
+ * Framework-agnostic face liveness detection engine
10
+ * Provides core detection logic without UI dependencies
11
+ */
12
+ export declare class FaceDetectionEngine extends SimpleEventEmitter {
13
+ private options;
14
+ private cv;
15
+ private human;
16
+ private engineState;
17
+ private videoElement;
18
+ private stream;
19
+ private frameCanvasElement;
20
+ private frameCanvasContext;
21
+ private faceCanvasElement;
22
+ private faceCanvasContext;
23
+ private detectionFrameId;
24
+ private actualVideoWidth;
25
+ private actualVideoHeight;
26
+ private detectionState;
27
+ /**
28
+ * Constructor
29
+ * @param config - Configuration object
30
+ */
31
+ constructor(options?: Partial<FaceDetectionEngineOptions>);
32
+ updateOptions(options?: Partial<FaceDetectionEngineOptions>): void;
33
+ getEngineState(): EngineState;
34
+ /**
35
+ * Initialize the detection engine
36
+ * Loads Human.js and OpenCV.js libraries
37
+ *
38
+ * @returns Promise that resolves when initialization is complete
39
+ * @throws Error if initialization fails
40
+ */
41
+ initialize(): Promise<void>;
42
+ /**
43
+ * Start face detection
44
+ * Requires initialize() to be called first and a video element to be provided
45
+ *
46
+ * @param videoElement - HTMLVideoElement to capture from
47
+ * @returns Promise that resolves when detection starts
48
+ * @throws Error if not initialized or video setup fails
49
+ */
50
+ startDetection(videoElement: HTMLVideoElement): Promise<void>;
51
+ /**
52
+ * Stop face detection
53
+ * @param success - Whether to display the best collected image
54
+ */
55
+ stopDetection(success: boolean): void;
56
+ /**
57
+ * Get current configuration
58
+ * @returns Current configuration
59
+ */
60
+ getOptions(): FaceDetectionEngineOptions;
61
+ /**
62
+ * Reset detection state
63
+ */
64
+ private resetDetectionState;
65
+ /**
66
+ * Schedule next detection frame
67
+ */
68
+ private scheduleNextDetection;
69
+ /**
70
+ * Cancel pending detection frame
71
+ */
72
+ private cancelPendingDetection;
73
+ /**
74
+ * Main detection loop
75
+ */
76
+ private detect;
77
+ private getPerformActionCount;
78
+ /**
79
+ * Handle single face detection
80
+ */
81
+ private handleSingleFace;
82
+ /**
83
+ * Handle detect phase
84
+ */
85
+ private handleDetectPhase;
86
+ /**
87
+ * Handle collect phase
88
+ */
89
+ private handleCollectPhase;
90
+ /**
91
+ * Handle verify phase
92
+ */
93
+ private handleVerifyPhase;
94
+ /**
95
+ * Handle multiple or no faces
96
+ */
97
+ private handleMultipleFaces;
98
+ private collectHighQualityImage;
99
+ private emitDetectorInfo;
100
+ /**
101
+ * Select next action
102
+ */
103
+ private selectNextAction;
104
+ /**
105
+ * Detect specific action
106
+ */
107
+ private detectAction;
108
+ /**
109
+ * Emit debug event
110
+ */
111
+ private emitDebug;
112
+ /**
113
+ * Draw video frame to canvas (internal use, not converted to Base64)
114
+ * @returns {HTMLCanvasElement | null} Canvas after drawing, returns null if failed
115
+ */
116
+ private drawVideoToCanvas;
117
+ private clearFrameCanvas;
118
+ private clearFaceCanvas;
119
+ /**
120
+ * 将 canvas 转换为 Base64 JPEG 图片数据
121
+ * @param {HTMLCanvasElement} canvas - 输入的 canvas
122
+ * @returns {string | null} Base64 格式的 JPEG 图片数据
123
+ */
124
+ private canvasToBase64;
125
+ /**
126
+ * Capture current video frame (returns Base64)
127
+ * @param {Box} box - Face box
128
+ * @returns {string | null} Base64 encoded JPEG image data
129
+ */
130
+ private captureFrame;
131
+ }
132
+ //# sourceMappingURL=face-detection-engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"face-detection-engine.d.ts","sourceRoot":"","sources":["../../src/face-detection-engine.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,0BAA0B,EAQ3B,MAAM,SAAS,CAAA;AAChB,OAAO,EAAmF,WAAW,EAAE,MAAM,SAAS,CAAA;AAEtH,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAwBpD;;;GAGG;AACH,qBAAa,mBAAoB,SAAQ,kBAAkB;IACzD,OAAO,CAAC,OAAO,CAAuB;IAEtC,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,KAAK,CAAqB;IAElC,OAAO,CAAC,WAAW,CAAgC;IAGnD,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,MAAM,CAA2B;IACzC,OAAO,CAAC,kBAAkB,CAAiC;IAC3D,OAAO,CAAC,kBAAkB,CAAwC;IAClE,OAAO,CAAC,iBAAiB,CAAiC;IAC1D,OAAO,CAAC,iBAAiB,CAAwC;IAEjE,OAAO,CAAC,gBAAgB,CAAsB;IAE9C,OAAO,CAAC,gBAAgB,CAAY;IACpC,OAAO,CAAC,iBAAiB,CAAY;IAErC,OAAO,CAAC,cAAc,CAAgB;IAEtC;;;OAGG;gBACS,OAAO,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC;IAMzD,aAAa,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAAG,IAAI;IAQlE,cAAc,IAAI,WAAW;IAI7B;;;;;;OAMG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IA+KjC;;;;;;;OAOG;IACG,cAAc,CAAC,YAAY,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC;IA0InE;;;OAGG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI;IA8BrC;;;OAGG;IACH,UAAU,IAAI,0BAA0B;IAMxC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAQ3B;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAc7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAO9B;;OAEG;YACW,MAAM;IAwDpB,OAAO,CAAC,qBAAqB;IAY7B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAiNxB;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAKzB;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAI1B;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAkDzB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAc3B,OAAO,CAAC,uBAAuB;IA6B/B,OAAO,CAAC,gBAAgB;IAgBxB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAuCxB;;OAEG;IACH,OAAO,CAAC,YAAY;IAuCpB;;OAEG;IACH,OAAO,CAAC,SAAS;IAgBjB;;;OAGG;IACH,OAAO,CAAC,iBAAiB;IAwDzB,OAAO,CAAC,gBAAgB;IAWxB,OAAO,CAAC,eAAe;IAWvB;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAWtB;;;;OAIG;IACH,OAAO,CAAC,YAAY;CA+BrB"}
@@ -0,0 +1,35 @@
1
+ import { DetectionPeriod, LivenessAction } from "./enums";
2
+ import { MotionLivenessDetector } from "./motion-liveness-detector";
3
+ import { ScreenCaptureDetector } from './screen-capture-detector';
4
+ import { ResolvedEngineOptions } from "./types";
5
+ /**
6
+ * Internal detection state interface
7
+ */
8
+ export declare class DetectionState {
9
+ period: DetectionPeriod;
10
+ startTime: number;
11
+ collectCount: number;
12
+ suspectedFraudsCount: number;
13
+ bestQualityScore: number;
14
+ bestFrameImage: string | null;
15
+ bestFaceImage: string | null;
16
+ completedActions: Set<LivenessAction>;
17
+ currentAction: LivenessAction | null;
18
+ actionVerifyTimeout: ReturnType<typeof setTimeout> | null;
19
+ lastFrontalScore: number;
20
+ motionDetector: MotionLivenessDetector | null;
21
+ liveness: boolean;
22
+ screenDetector: ScreenCaptureDetector | null;
23
+ constructor(options: Partial<DetectionState>);
24
+ reset(): void;
25
+ needFrontalFace(): boolean;
26
+ isReadyToVerify(minCollectCount: number): boolean;
27
+ onActionStarted(nextAction: LivenessAction, timeoutMills: number, timeoutCallback: () => void): void;
28
+ onActionCompleted(): void;
29
+ /**
30
+ * Clear action verify timeout
31
+ */
32
+ private clearActionVerifyTimeout;
33
+ }
34
+ export declare function createDetectionState(options: ResolvedEngineOptions): DetectionState;
35
+ //# sourceMappingURL=face-detection-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"face-detection-state.d.ts","sourceRoot":"","sources":["../../src/face-detection-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAwB,MAAM,SAAS,CAAA;AAC/E,OAAO,EAAE,sBAAsB,EAAE,MAAM,4BAA4B,CAAA;AACnE,OAAO,EAAE,qBAAqB,EAA6B,MAAM,2BAA2B,CAAA;AAC5F,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAE/C;;GAEG;AACH,qBAAa,cAAc;IACvB,MAAM,EAAE,eAAe,CAAyB;IAChD,SAAS,EAAE,MAAM,CAAoB;IACrC,YAAY,EAAE,MAAM,CAAI;IACxB,oBAAoB,EAAE,MAAM,CAAI;IAChC,gBAAgB,EAAE,MAAM,CAAI;IAC5B,cAAc,EAAE,MAAM,GAAG,IAAI,CAAO;IACpC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAO;IACnC,gBAAgB,EAAE,GAAG,CAAC,cAAc,CAAC,CAAY;IACjD,aAAa,EAAE,cAAc,GAAG,IAAI,CAAO;IAC3C,mBAAmB,EAAE,UAAU,CAAC,OAAO,UAAU,CAAC,GAAG,IAAI,CAAO;IAChE,gBAAgB,EAAE,MAAM,CAAI;IAC5B,cAAc,EAAE,sBAAsB,GAAG,IAAI,CAAO;IACpD,QAAQ,EAAE,OAAO,CAAQ;IACzB,cAAc,EAAE,qBAAqB,GAAG,IAAI,CAAO;gBAEvC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC;IAI5C,KAAK,IAAI,IAAI;IAeb,eAAe,IAAI,OAAO;IAK1B,eAAe,CAAC,eAAe,EAAE,MAAM,GAAG,OAAO;IAUjD,eAAe,CAAC,UAAU,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,IAAI,GAAG,IAAI;IASpG,iBAAiB,IAAI,IAAI;IASzB;;OAEG;IACH,OAAO,CAAC,wBAAwB;CAMnC;AAID,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,qBAAqB,GAAG,cAAc,CA4BnF"}
@@ -0,0 +1,130 @@
1
+ /**
2
+ * 人脸正对度检测模块 - 混合多尺度算法版本
3
+ *
4
+ * 使用四层混合检测策略:
5
+ * 1. 特征点对称性检测 (40%) - 眼睛水平线、鼻子中心、嘴角对称性
6
+ * 2. 轮廓对称性检测 (35%) - Sobel 边缘检测的轮廓对称性
7
+ * 3. 角度融合分析 (25%) - Yaw/Pitch/Roll 角度综合评分
8
+ * 4. 手势识别验证 - 作为额外验证
9
+ *
10
+ * 相比单一方法,混合算法提升准确度 30-40%
11
+ */
12
+ import { FaceResult, GestureResult } from '@vladmandic/human';
13
+ import { FaceFrontalFeatures } from './types';
14
+ /**
15
+ * 角度分析结果接口
16
+ */
17
+ export interface AngleAnalysisResult {
18
+ yaw: number;
19
+ pitch: number;
20
+ roll: number;
21
+ score: number;
22
+ }
23
+ /**
24
+ * 检查人脸是否正对摄像头 - 主函数(混合多尺度版本)
25
+ *
26
+ * 使用四层混合检测策略:
27
+ * 1. 特征点对称性检测 (40%) - 最准确
28
+ * 2. 轮廓对称性检测 (35%) - 快速且鲁棒
29
+ * 3. 角度融合分析 (25%) - 补充验证
30
+ * 4. 手势识别验证 - 额外验证(如果提供手势数据)
31
+ *
32
+ * @param {any} cv - OpenCV 实例(用于轮廓对称性检测)
33
+ * @param {FaceResult} face - 人脸检测结果(包含 rotation 和 annotations 信息)
34
+ * @param {Array<GestureResult>} gestures - 检测到的手势/表情数组(可选)
35
+ * @param {any} matImage - OpenCV Mat 对象(图像数据,用于轮廓检测)
36
+ * @param {FaceFrontalFeatures} config - 正对度配置参数(包含角度阈值)
37
+ * @returns {number} 正对度评分 (0-1),1 表示完全正对
38
+ *
39
+ * @example
40
+ * const mat = drawVideoToMat()
41
+ * const score = calcFaceFrontal(cv, face, gestures, mat, config)
42
+ * if (score > 0.9) {
43
+ * console.log('人脸足够正对')
44
+ * }
45
+ * mat.delete()
46
+ */
47
+ export declare function calcFaceFrontal(cv: any, face: FaceResult, gestures: Array<GestureResult>, matImage: any, config: FaceFrontalFeatures): number;
48
+ /**
49
+ * 使用手势识别方法检查人脸正对度
50
+ *
51
+ * 从 Human.js 返回的手势中查找 "facing center" 标志
52
+ *
53
+ * @param {Array<GestureResult>} gestures - Human.js 检测到的手势数组
54
+ * @returns {number} 评分 (0-1),0 表示未检测到相关手势
55
+ *
56
+ * @example
57
+ * const score = checkFaceFrontalWithGestures(result.gesture)
58
+ */
59
+ export declare function checkFaceFrontalWithGestures(gestures: Array<GestureResult>): boolean;
60
+ /**
61
+ * 使用角度分析方法检查人脸正对度
62
+ *
63
+ * 分析人脸的 yaw、pitch、roll 三个角度
64
+ * 使用加权评分:yaw (60%) + pitch (25%) + roll (15%)
65
+ * 直接使用 CONFIG.FACE_FRONTAL 中的参数
66
+ *
67
+ * @param {FaceResult} face - 人脸检测结果
68
+ * @param {FaceFrontalFeatures} config - 正对度配置参数
69
+ * @returns {number} 正对度评分 (0-1)
70
+ *
71
+ * @example
72
+ * const score = checkFaceFrontalWithAngles(face, config)
73
+ */
74
+ export declare function checkFaceFrontalWithAngles(face: FaceResult, config: FaceFrontalFeatures): number;
75
+ /**
76
+ * 从人脸检测结果中提取三维旋转角度
77
+ *
78
+ * 返回标准化的 yaw、pitch、roll 角度值(单位:度)
79
+ *
80
+ * @param {FaceResult} face - Human.js 人脸检测结果
81
+ * @returns {AngleAnalysisResult} 包含角度和评分的结果对象
82
+ */
83
+ export declare function extractFaceAngles(face: FaceResult): AngleAnalysisResult;
84
+ /**
85
+ * 获取角度分析的详细信息
86
+ *
87
+ * 返回每个角度维度的详细评分和状态
88
+ * 直接使用 CONFIG.FACE_FRONTAL 中的参数
89
+ *
90
+ * @param {FaceResult} face - 人脸检测结果
91
+ * @param {FaceFrontalFeatures} config - 正对度配置参数
92
+ * @returns {object} 包含各维度评分的详细对象
93
+ *
94
+ * @example
95
+ * const details = getAngleAnalysisDetails(face, config)
96
+ * console.log(details.yawScore) // 0.85
97
+ * console.log(details.issues) // ['Yaw 角度超过阈值']
98
+ */
99
+ export declare function getAngleAnalysisDetails(face: FaceResult, config: FaceFrontalFeatures): Record<string, any>;
100
+ /**
101
+ * 获取人脸正对度的描述文本
102
+ *
103
+ * 将评分转换为用户友好的描述
104
+ *
105
+ * @param {number} score - 正对度评分 (0-1)
106
+ * @returns {string} 描述文本
107
+ *
108
+ * @example
109
+ * console.log(getFrontalDescription(0.95)) // "非常正对"
110
+ * console.log(getFrontalDescription(0.6)) // "请调整角度"
111
+ */
112
+ export declare function getFrontalDescription(score: number): string;
113
+ /**
114
+ * 根据人脸角度给出具体的调整建议
115
+ *
116
+ * 直接使用 CONFIG.FACE_FRONTAL 中的参数
117
+ *
118
+ * @param {FaceResult} face - 人脸检测结果
119
+ * @param {FaceFrontalFeatures} config - 正对度配置参数
120
+ * @returns {string[]} 调整建议列表
121
+ *
122
+ * @example
123
+ * const suggestions = getAdjustmentSuggestions(face, config)
124
+ * suggestions.forEach(s => console.log(s))
125
+ * // 输出:
126
+ * // "请向左转动头部"
127
+ * // "请抬起头部"
128
+ */
129
+ export declare function getAdjustmentSuggestions(face: FaceResult, config: FaceFrontalFeatures): string[];
130
+ //# sourceMappingURL=face-frontal-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"face-frontal-calculator.d.ts","sourceRoot":"","sources":["../../src/face-frontal-calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAC7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAG7C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,eAAe,CAC7B,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,UAAU,EAChB,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,EAC9B,QAAQ,EAAE,GAAG,EACb,MAAM,EAAE,mBAAmB,GAC1B,MAAM,CAgCR;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,KAAK,CAAC,aAAa,CAAC,GAAG,OAAO,CAUpF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,CA8BhG;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,UAAU,GAAG,mBAAmB,CAUvE;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAiD1G;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAO3D;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,mBAAmB,GAAG,MAAM,EAAE,CAwChG"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * 人脸图像质量检测模块 (统一版)
3
+ *
4
+ * 综合检测人脸图像的:
5
+ * 1. 完整度检测 - 人脸是否完整在框内
6
+ * 2. 模糊度检测 - 图像是否清晰
7
+ * 3. 轮廓清晰度 - 轮廓的连通性和完整度
8
+ *
9
+ * 使用混合检测策略,结合 Human.js 和 OpenCV.js 优势
10
+ */
11
+ import { FaceResult } from '@vladmandic/human';
12
+ import { ImageQualityFeatures } from './types';
13
+ /**
14
+ * 单个检测指标的结果
15
+ */
16
+ export interface QualityMetricResult {
17
+ name: string;
18
+ value: number;
19
+ threshold: number;
20
+ passed: boolean;
21
+ description: string;
22
+ }
23
+ /**
24
+ * 图像质量检测的综合结果
25
+ */
26
+ export interface ImageQualityResult {
27
+ passed: boolean;
28
+ score: number;
29
+ completenessReasons: string[];
30
+ blurReasons: string[];
31
+ metrics: {
32
+ completeness: QualityMetricResult;
33
+ laplacianVariance: QualityMetricResult;
34
+ gradientSharpness: QualityMetricResult;
35
+ overallQuality: QualityMetricResult;
36
+ };
37
+ suggestions?: string[];
38
+ }
39
+ /**
40
+ * 计算图像质量(完整度 + 清晰度)
41
+ *
42
+ * 综合检测:
43
+ * - 人脸完整度(Human.js边界 + OpenCV轮廓)
44
+ * - 图像清晰度(拉普拉斯方差 + Sobel梯度)
45
+ *
46
+ * @param cv - OpenCV.js 对象,用于执行图像处理操作
47
+ * @param matImage - OpenCV Mat 对象,包含灰度图像数据
48
+ * @param face - 人脸检测结果,包含人脸框位置和其他检测信息
49
+ * @param imageWidth - 图片宽度(像素),用于边界检查和完整度计算
50
+ * @param imageHeight - 图片高度(像素),用于边界检查和完整度计算
51
+ * @param config - 检测配置对象,包含:
52
+ * - require_full_face_in_bounds: 是否要求人脸完全在边界内
53
+ * - use_opencv_enhancement: 是否使用 OpenCV 增强检测
54
+ * - min_laplacian_variance: 拉普拉斯方差最小阈值
55
+ * - min_gradient_sharpness: 梯度清晰度最小阈值
56
+ * @param threshold - 综合质量评分阈值 (0-1),大于等于此值判定为通过
57
+ * @returns 综合质量检测结果,包含:
58
+ * - passed: 是否通过质量检测
59
+ * - score: 综合质量评分 (0-1)
60
+ * - completenessReasons: 完整度不通过原因列表
61
+ * - blurReasons: 清晰度不通过原因列表
62
+ * - metrics: 各维度详细指标(完整度、拉普拉斯方差、梯度清晰度、综合质量)
63
+ * - suggestions: 改进建议列表
64
+ */
65
+ export declare function calcImageQuality(cv: any, matImage: any, face: FaceResult, imageWidth: number, imageHeight: number, config: ImageQualityFeatures, threshold: number): ImageQualityResult;
66
+ //# sourceMappingURL=image-quality-calculator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"image-quality-calculator.d.ts","sourceRoot":"","sources":["../../src/image-quality-calculator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAI9C;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW,EAAE,MAAM,CAAA;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAEjC,MAAM,EAAE,OAAO,CAAA;IAEf,KAAK,EAAE,MAAM,CAAA;IAEb,mBAAmB,EAAE,MAAM,EAAE,CAAA;IAC7B,WAAW,EAAE,MAAM,EAAE,CAAA;IAErB,OAAO,EAAE;QACP,YAAY,EAAE,mBAAmB,CAAA;QACjC,iBAAiB,EAAE,mBAAmB,CAAA;QACtC,iBAAiB,EAAE,mBAAmB,CAAA;QACtC,cAAc,EAAE,mBAAmB,CAAA;KACpC,CAAA;IAED,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAID;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,GAAG,EACP,QAAQ,EAAE,GAAG,EACb,IAAI,EAAE,UAAU,EAChB,UAAU,EAAE,MAAM,EAClB,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,oBAAoB,EAC5B,SAAS,EAAE,MAAM,GAChB,kBAAkB,CAoEpB"}
@@ -2,198 +2,12 @@
2
2
  * Face Detection Engine - Core Detection Engine
3
3
  * Framework-agnostic face liveness detection engine
4
4
  */
5
- import type { FaceDetectionEngineConfig } from './types';
6
- import { SimpleEventEmitter } from './event-emitter';
7
- /**
8
- * Framework-agnostic face liveness detection engine
9
- * Provides core detection logic without UI dependencies
10
- *
11
- * @example
12
- * ```typescript
13
- * const engine = new FaceDetectionEngine({
14
- * min_face_ratio: 0.5,
15
- * max_face_ratio: 0.9,
16
- * liveness_action_count: 1
17
- * })
18
- *
19
- * engine.on('detector-loaded', () => {
20
- * console.log('Engine ready')
21
- * engine.startDetection(videoElement, canvasElement)
22
- * })
23
- *
24
- * engine.on('detector-finish', (data) => {
25
- * console.log('Liveness detection completed:', data)
26
- * })
27
- *
28
- * engine.on('detector-error', (error) => {
29
- * console.error('Detection error:', error)
30
- * })
31
- *
32
- * await engine.initialize()
33
- * ```
34
- */
35
- export declare class FaceDetectionEngine extends SimpleEventEmitter {
36
- private config;
37
- private human;
38
- private stream;
39
- private isDetecting;
40
- private isReady;
41
- private isInitializing;
42
- private videoElement;
43
- private frameCanvasElement;
44
- private frameCanvasContext;
45
- private faceCanvasElement;
46
- private faceCanvasContext;
47
- private detectionFrameId;
48
- private actualVideoWidth;
49
- private actualVideoHeight;
50
- private detectionState;
51
- /**
52
- * Constructor
53
- * @param config - Configuration object
54
- */
55
- constructor(config?: Partial<FaceDetectionEngineConfig>);
56
- /**
57
- * Initialize the detection engine
58
- * Loads Human.js and OpenCV.js libraries
59
- *
60
- * @returns Promise that resolves when initialization is complete
61
- * @throws Error if initialization fails
62
- */
63
- initialize(): Promise<void>;
64
- /**
65
- * Start face detection
66
- * Requires initialize() to be called first and a video element to be provided
67
- *
68
- * @param videoElement - HTMLVideoElement to capture from
69
- * @returns Promise that resolves when detection starts
70
- * @throws Error if not initialized or video setup fails
71
- */
72
- startDetection(videoElement: HTMLVideoElement): Promise<void>;
73
- /**
74
- * Stop face detection
75
- * @param success - Whether to display the best collected image
76
- */
77
- stopDetection(success: boolean): void;
78
- /**
79
- * Update configuration
80
- * Note: Some settings may not take effect if called during detection
81
- *
82
- * @param config - Configuration overrides
83
- */
84
- updateConfig(config: Partial<FaceDetectionEngineConfig>): void;
85
- /**
86
- * Get current configuration
87
- * @returns Current configuration
88
- */
89
- getConfig(): FaceDetectionEngineConfig;
90
- /**
91
- * Get detection status
92
- * @returns Object with status information
93
- */
94
- getStatus(): {
95
- isReady: boolean;
96
- isDetecting: boolean;
97
- isInitializing: boolean;
98
- };
99
- /**
100
- * Reset detection state
101
- */
102
- private resetDetectionState;
103
- /**
104
- * Schedule next detection frame
105
- */
106
- private scheduleNextDetection;
107
- /**
108
- * Cancel pending detection frame
109
- */
110
- private cancelPendingDetection;
111
- /**
112
- * Main detection loop
113
- */
114
- private detect;
115
- private getPerformActionCount;
116
- /**
117
- * Handle single face detection
118
- */
119
- private handleSingleFace;
120
- /**
121
- * Validate face box existence
122
- */
123
- private validateFaceBox;
124
- /**
125
- * Validate face size ratio
126
- */
127
- private validateFaceSize;
128
- /**
129
- * Validate face frontal angle
130
- */
131
- private validateFaceFrontal;
132
- /**
133
- * Validate image quality
134
- */
135
- private validateImageQuality;
136
- /**
137
- * Validate silent liveness scores
138
- */
139
- private validateSilentLiveness;
140
- /**
141
- * Handle detect phase
142
- */
143
- private handleDetectPhase;
144
- /**
145
- * Handle collect phase
146
- */
147
- private handleCollectPhase;
148
- /**
149
- * Handle verify phase
150
- */
151
- private handleVerifyPhase;
152
- /**
153
- * Handle multiple or no faces
154
- */
155
- private handleMultipleFaces;
156
- private collectHighQualityImage;
157
- private emitDetectorInfo;
158
- /**
159
- * Select next action
160
- */
161
- private selectNextAction;
162
- /**
163
- * Clear action verify timeout
164
- */
165
- private clearActionVerifyTimeout;
166
- /**
167
- * Detect specific action
168
- */
169
- private detectAction;
170
- /**
171
- * Emit debug event
172
- */
173
- private emitDebug;
174
- /**
175
- * Draw video frame to canvas (internal use, not converted to Base64)
176
- * @returns {HTMLCanvasElement | null} Canvas after drawing, returns null if failed
177
- */
178
- private drawVideoToCanvas;
179
- private clearFrameCanvas;
180
- private clearFaceCanvas;
181
- /**
182
- * 将 canvas 转换为 Base64 JPEG 图片数据
183
- * @param {HTMLCanvasElement} canvas - 输入的 canvas
184
- * @returns {string | null} Base64 格式的 JPEG 图片数据
185
- */
186
- private canvasToBase64;
187
- /**
188
- * Capture current video frame (returns Base64)
189
- * @param {Box} box - Face box
190
- * @returns {string | null} Base64 encoded JPEG image data
191
- */
192
- private captureFrame;
193
- }
194
- export type { FaceDetectionEngineConfig, FaceFrontalFeatures, ImageQualityFeatures, DetectorInfoEventData, DetectorFinishEventData, DetectorErrorEventData, DetectorDebugEventData, DetectorActionEventData, DetectorLoadedEventData, EventMap, EventEmitter, EventListener, ResolvedEngineConfig } from './types';
195
- export { LivenessAction, ErrorCode, DetectionCode, LivenessActionStatus, DetectionPeriod } from './enums';
5
+ import { FaceDetectionEngine } from './face-detection-engine';
6
+ export type { FaceDetectionEngineOptions, FaceFrontalFeatures, ImageQualityFeatures, DetectorInfoEventData, DetectorFinishEventData, DetectorErrorEventData, DetectorDebugEventData, DetectorActionEventData, DetectorLoadedEventData, EventMap, EventEmitter, EventListener, } from './types';
7
+ export { LivenessAction, ErrorCode, DetectionCode, LivenessActionStatus, DetectionPeriod, EngineState } from './enums';
196
8
  export { preloadOpenCV, getCvSync, getOpenCVVersion, detectBrowserEngine } from './library-loader';
197
9
  export { SimpleEventEmitter } from './event-emitter';
10
+ export { UniAppFaceDetectionEngine, createSDK, checkEnvironmentSupport } from './uniapp-sdk';
11
+ export { FaceDetectionEngine };
198
12
  export default FaceDetectionEngine;
199
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAG7D,YAAY,EACV,0BAA0B,EAC1B,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACrB,uBAAuB,EACvB,sBAAsB,EACtB,sBAAsB,EACtB,uBAAuB,EACvB,uBAAuB,EACvB,QAAQ,EACR,YAAY,EACZ,aAAa,GACd,MAAM,SAAS,CAAA;AAEhB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,SAAS,CAAA;AAEtH,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAA;AAElG,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAA;AAEpD,OAAO,EAAE,yBAAyB,EAAE,SAAS,EAAE,uBAAuB,EAAE,MAAM,cAAc,CAAA;AAE5F,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAE9B,eAAe,mBAAmB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"library-loader.d.ts","sourceRoot":"","sources":["../../src/library-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,mBAAmB,CAAA;AA6BrC,KAAK,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AAE9D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CA2BpE;AAiGD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB1E;AA2GD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,GAAG,CAAA;CAAE,CAAC,CAmD9E;AAED;;;GAGG;AACH,wBAAgB,SAAS,QAYxB;AA+KD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAiEnI;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,QAwB/B"}
1
+ {"version":3,"file":"library-loader.d.ts","sourceRoot":"","sources":["../../src/library-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,MAAM,mBAAmB,CAAA;AA6BrC,KAAK,aAAa,GAAG,UAAU,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,CAAA;AAE9D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,aAAa,CA2BpE;AAiGD;;;;GAIG;AACH,wBAAsB,aAAa,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAoB1E;AA2GD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC;IAAE,EAAE,EAAE,GAAG,CAAA;CAAE,CAAC,CAmD9E;AAED;;;GAGG;AACH,wBAAgB,SAAS,QAYxB;AAsLD;;;;;;GAMG;AACH,wBAAsB,SAAS,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAiEnI;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,QAwB/B"}