id-scanner-lib 1.3.2 → 1.5.0
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.
- package/README.md +55 -460
- package/dist/id-scanner-lib.esm.js +4641 -0
- package/dist/id-scanner-lib.esm.js.map +1 -0
- package/dist/id-scanner-lib.js +14755 -0
- package/dist/id-scanner-lib.js.map +1 -0
- package/dist/types/core/base-module.d.ts +44 -0
- package/dist/types/core/camera-manager.d.ts +258 -0
- package/dist/types/core/config.d.ts +88 -0
- package/dist/types/core/errors.d.ts +111 -0
- package/dist/types/core/event-emitter.d.ts +55 -0
- package/dist/types/core/logger.d.ts +277 -0
- package/dist/types/core/module-manager.d.ts +78 -0
- package/dist/types/core/plugin-manager.d.ts +158 -0
- package/dist/types/core/resource-manager.d.ts +246 -0
- package/dist/types/core/result.d.ts +83 -0
- package/dist/types/core/scanner-factory.d.ts +93 -0
- package/dist/types/index.bundle.d.ts +1303 -0
- package/dist/types/index.d.ts +86 -0
- package/dist/types/interfaces/external-types.d.ts +174 -0
- package/dist/types/interfaces/face-detection.d.ts +293 -0
- package/dist/types/interfaces/scanner-module.d.ts +280 -0
- package/dist/types/modules/face/face-detector.d.ts +170 -0
- package/dist/types/modules/face/index.d.ts +56 -0
- package/dist/types/modules/face/liveness-detector.d.ts +177 -0
- package/dist/types/modules/face/types.d.ts +136 -0
- package/dist/types/modules/id-card/anti-fake-detector.d.ts +170 -0
- package/dist/types/modules/id-card/id-card-detector.d.ts +131 -0
- package/dist/types/modules/id-card/index.d.ts +89 -0
- package/dist/types/modules/id-card/ocr-processor.d.ts +110 -0
- package/dist/types/modules/id-card/ocr-worker.d.ts +31 -0
- package/dist/types/modules/id-card/types.d.ts +181 -0
- package/dist/types/modules/qrcode/index.d.ts +51 -0
- package/dist/types/modules/qrcode/qr-code-scanner.d.ts +64 -0
- package/dist/types/modules/qrcode/types.d.ts +67 -0
- package/dist/types/utils/camera.d.ts +81 -0
- package/dist/types/utils/image-processing.d.ts +176 -0
- package/dist/types/utils/index.d.ts +175 -0
- package/dist/types/utils/performance.d.ts +81 -0
- package/dist/types/utils/resource-manager.d.ts +53 -0
- package/dist/types/utils/types.d.ts +166 -0
- package/dist/types/utils/worker.d.ts +52 -0
- package/dist/types/version.d.ts +7 -0
- package/package.json +76 -77
- package/src/core/base-module.ts +78 -0
- package/src/core/camera-manager.ts +798 -0
- package/src/core/config.ts +268 -0
- package/src/core/errors.ts +174 -0
- package/src/core/event-emitter.ts +110 -0
- package/src/core/logger.ts +549 -0
- package/src/core/module-manager.ts +165 -0
- package/src/core/plugin-manager.ts +429 -0
- package/src/core/resource-manager.ts +762 -0
- package/src/core/result.ts +163 -0
- package/src/core/scanner-factory.ts +237 -0
- package/src/index.ts +113 -936
- package/src/interfaces/external-types.ts +200 -0
- package/src/interfaces/face-detection.ts +309 -0
- package/src/interfaces/scanner-module.ts +384 -0
- package/src/modules/face/face-detector.ts +931 -0
- package/src/modules/face/index.ts +208 -0
- package/src/modules/face/liveness-detector.ts +908 -0
- package/src/modules/face/types.ts +133 -0
- package/src/modules/id-card/anti-fake-detector.ts +732 -0
- package/src/modules/id-card/id-card-detector.ts +474 -0
- package/src/modules/id-card/index.ts +425 -0
- package/src/modules/id-card/ocr-processor.ts +538 -0
- package/src/modules/id-card/ocr-worker.ts +259 -0
- package/src/modules/id-card/types.ts +178 -0
- package/src/modules/qrcode/index.ts +175 -0
- package/src/modules/qrcode/qr-code-scanner.ts +230 -0
- package/src/modules/qrcode/types.ts +65 -0
- package/src/types/browser-image-compression.d.ts +19 -0
- package/src/types/tesseract.d.ts +280 -0
- package/src/utils/image-processing.ts +432 -49
- package/src/utils/index.ts +426 -0
- package/src/utils/performance.ts +168 -131
- package/src/utils/resource-manager.ts +65 -146
- package/src/utils/types.ts +90 -2
- package/src/utils/worker.ts +123 -84
- package/src/version.ts +11 -0
- package/tools/scaffold.js +543 -0
- package/dist/id-scanner-core.esm.js +0 -11076
- package/dist/id-scanner-core.esm.js.map +0 -1
- package/dist/id-scanner-core.js +0 -11088
- package/dist/id-scanner-core.js.map +0 -1
- package/dist/id-scanner-core.min.js +0 -1
- package/dist/id-scanner-core.min.js.map +0 -1
- package/dist/id-scanner-ocr.esm.js +0 -1802
- package/dist/id-scanner-ocr.esm.js.map +0 -1
- package/dist/id-scanner-ocr.js +0 -1811
- package/dist/id-scanner-ocr.js.map +0 -1
- package/dist/id-scanner-ocr.min.js +0 -1
- package/dist/id-scanner-ocr.min.js.map +0 -1
- package/dist/id-scanner-qr.esm.js +0 -1023
- package/dist/id-scanner-qr.esm.js.map +0 -1
- package/dist/id-scanner-qr.js +0 -1032
- package/dist/id-scanner-qr.js.map +0 -1
- package/dist/id-scanner-qr.min.js +0 -1
- package/dist/id-scanner-qr.min.js.map +0 -1
- package/dist/id-scanner.js +0 -3740
- package/dist/id-scanner.js.map +0 -1
- package/dist/id-scanner.min.js +0 -1
- package/dist/id-scanner.min.js.map +0 -1
- package/src/core.ts +0 -138
- package/src/demo/demo.ts +0 -204
- package/src/id-recognition/anti-fake-detector.ts +0 -317
- package/src/id-recognition/data-extractor.ts +0 -262
- package/src/id-recognition/id-detector.ts +0 -363
- package/src/id-recognition/ocr-processor.ts +0 -334
- package/src/id-recognition/ocr-worker.ts +0 -156
- package/src/index-umd.ts +0 -477
- package/src/ocr-module.ts +0 -187
- package/src/qr-module.ts +0 -179
- package/src/scanner/barcode-scanner.ts +0 -251
- package/src/scanner/qr-scanner.ts +0 -167
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 主入口文件
|
|
3
|
+
* @description ID Scanner库的主入口点,提供统一的API和模块导出
|
|
4
|
+
* @module index
|
|
5
|
+
*/
|
|
6
|
+
import { IDCardModule } from './modules/id-card';
|
|
7
|
+
import { QRCodeModule } from './modules/qrcode';
|
|
8
|
+
import { FaceModule } from './modules/face';
|
|
9
|
+
import { LogLevel } from './core/logger';
|
|
10
|
+
import { IDCardModuleOptions } from './modules/id-card/types';
|
|
11
|
+
import { QRCodeModuleOptions } from './modules/qrcode/types';
|
|
12
|
+
import { FaceModuleOptions } from './modules/face/types';
|
|
13
|
+
/**
|
|
14
|
+
* IDScanner配置选项
|
|
15
|
+
*/
|
|
16
|
+
export interface IDScannerOptions {
|
|
17
|
+
/** 日志级别 */
|
|
18
|
+
logLevel?: LogLevel;
|
|
19
|
+
/** 是否启用身份证识别模块 */
|
|
20
|
+
enableIDCard?: boolean;
|
|
21
|
+
/** 是否启用二维码识别模块 */
|
|
22
|
+
enableQRCode?: boolean;
|
|
23
|
+
/** 是否启用人脸识别模块 */
|
|
24
|
+
enableFace?: boolean;
|
|
25
|
+
/** 身份证模块配置 */
|
|
26
|
+
idCard?: IDCardModuleOptions;
|
|
27
|
+
/** 二维码模块配置 */
|
|
28
|
+
qrCode?: QRCodeModuleOptions;
|
|
29
|
+
/** 人脸识别模块配置 */
|
|
30
|
+
face?: FaceModuleOptions;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* IDScanner类
|
|
34
|
+
* 提供整合的身份证、二维码和人脸识别功能
|
|
35
|
+
*/
|
|
36
|
+
export declare class IDScanner {
|
|
37
|
+
/** 版本号 */
|
|
38
|
+
static readonly VERSION = "1.5.0";
|
|
39
|
+
/** 构建日期 */
|
|
40
|
+
static readonly BUILD_DATE: string;
|
|
41
|
+
/** 模块管理器 */
|
|
42
|
+
private moduleManager;
|
|
43
|
+
/** 是否已经初始化 */
|
|
44
|
+
private initialized;
|
|
45
|
+
/** 日志工具 */
|
|
46
|
+
private logger;
|
|
47
|
+
/**
|
|
48
|
+
* 构造函数
|
|
49
|
+
* @param options 配置选项
|
|
50
|
+
*/
|
|
51
|
+
constructor(options?: IDScannerOptions);
|
|
52
|
+
/**
|
|
53
|
+
* 初始化库
|
|
54
|
+
*/
|
|
55
|
+
initialize(): Promise<void>;
|
|
56
|
+
/**
|
|
57
|
+
* 获取身份证模块实例
|
|
58
|
+
* @returns 身份证模块
|
|
59
|
+
*/
|
|
60
|
+
getIDCardModule(): IDCardModule | undefined;
|
|
61
|
+
/**
|
|
62
|
+
* 获取二维码模块实例
|
|
63
|
+
* @returns 二维码模块
|
|
64
|
+
*/
|
|
65
|
+
getQRCodeModule(): QRCodeModule | undefined;
|
|
66
|
+
/**
|
|
67
|
+
* 获取人脸识别模块实例
|
|
68
|
+
* @returns 人脸识别模块
|
|
69
|
+
*/
|
|
70
|
+
getFaceModule(): FaceModule | undefined;
|
|
71
|
+
/**
|
|
72
|
+
* 释放所有资源
|
|
73
|
+
*/
|
|
74
|
+
dispose(): Promise<void>;
|
|
75
|
+
}
|
|
76
|
+
export * from './core/module-manager';
|
|
77
|
+
export * from './core/logger';
|
|
78
|
+
export * from './core/errors';
|
|
79
|
+
export { IDCardModule } from './modules/id-card';
|
|
80
|
+
export { QRCodeModule } from './modules/qrcode';
|
|
81
|
+
export { FaceModule } from './modules/face';
|
|
82
|
+
export * from './utils/types';
|
|
83
|
+
export { IDCardModuleOptions, IDCardInfo, IDCardType, IDCardVerificationResult } from './modules/id-card/types';
|
|
84
|
+
export { QRCodeModuleOptions, QRCodeResult } from './modules/qrcode/types';
|
|
85
|
+
export { FaceModuleOptions, FaceDetectionResult, FaceComparisonResult } from './modules/face/types';
|
|
86
|
+
export default IDScanner;
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 外部库类型声明
|
|
3
|
+
* @description 为外部依赖库声明类型定义
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* TensorFlow.js 相关类型
|
|
7
|
+
*/
|
|
8
|
+
declare module '@tensorflow/tfjs' {
|
|
9
|
+
interface Tensor<R extends Rank = Rank> {
|
|
10
|
+
dataId: object;
|
|
11
|
+
id: number;
|
|
12
|
+
shape: number[];
|
|
13
|
+
dtype: string;
|
|
14
|
+
size: number;
|
|
15
|
+
rank: number;
|
|
16
|
+
dispose(): void;
|
|
17
|
+
}
|
|
18
|
+
type Rank = 'R0' | 'R1' | 'R2' | 'R3' | 'R4' | 'R5' | 'R6';
|
|
19
|
+
function ready(): Promise<void>;
|
|
20
|
+
function dispose(): void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* face-api.js 相关类型
|
|
24
|
+
*/
|
|
25
|
+
declare module '@vladmandic/face-api' {
|
|
26
|
+
namespace tf {
|
|
27
|
+
function dispose(): Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
namespace env {
|
|
30
|
+
function monkeyPatch(env: any): void;
|
|
31
|
+
}
|
|
32
|
+
type TNetInput = HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | ImageData | {
|
|
33
|
+
toString(): string;
|
|
34
|
+
} | string;
|
|
35
|
+
interface FaceDetectionWithLandmarks {
|
|
36
|
+
detection: FaceDetection;
|
|
37
|
+
landmarks: FaceLandmarks68 | FaceLandmarks68TinyNet;
|
|
38
|
+
getRefRect(): any;
|
|
39
|
+
forwardFaceDetection(): FaceDetection;
|
|
40
|
+
}
|
|
41
|
+
interface WithFaceDescriptor<T> {
|
|
42
|
+
descriptor: Float32Array;
|
|
43
|
+
}
|
|
44
|
+
interface WithAge {
|
|
45
|
+
age: number;
|
|
46
|
+
}
|
|
47
|
+
interface WithGender {
|
|
48
|
+
gender: string;
|
|
49
|
+
genderProbability: number;
|
|
50
|
+
}
|
|
51
|
+
interface FaceMatch {
|
|
52
|
+
label: string;
|
|
53
|
+
distance: number;
|
|
54
|
+
}
|
|
55
|
+
interface WithFaceExpressions {
|
|
56
|
+
expressions: {
|
|
57
|
+
neutral: number;
|
|
58
|
+
happy: number;
|
|
59
|
+
sad: number;
|
|
60
|
+
angry: number;
|
|
61
|
+
fearful: number;
|
|
62
|
+
disgusted: number;
|
|
63
|
+
surprised: number;
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
interface IFaceLandmarks {
|
|
67
|
+
positions: Point[];
|
|
68
|
+
shift(point: Point): IFaceLandmarks;
|
|
69
|
+
forSize<T extends IFaceLandmarks>(width: number, height: number): T;
|
|
70
|
+
}
|
|
71
|
+
interface IRect {
|
|
72
|
+
x: number;
|
|
73
|
+
y: number;
|
|
74
|
+
width: number;
|
|
75
|
+
height: number;
|
|
76
|
+
}
|
|
77
|
+
interface IBoundingBox extends IRect {
|
|
78
|
+
left: number;
|
|
79
|
+
top: number;
|
|
80
|
+
right: number;
|
|
81
|
+
bottom: number;
|
|
82
|
+
}
|
|
83
|
+
interface IFaceDetection {
|
|
84
|
+
score: number;
|
|
85
|
+
box: IBoundingBox;
|
|
86
|
+
}
|
|
87
|
+
class Point {
|
|
88
|
+
x: number;
|
|
89
|
+
y: number;
|
|
90
|
+
constructor(x: number, y: number);
|
|
91
|
+
}
|
|
92
|
+
class FaceDetection implements IFaceDetection {
|
|
93
|
+
score: number;
|
|
94
|
+
box: IBoundingBox;
|
|
95
|
+
constructor(score: number, box: IBoundingBox);
|
|
96
|
+
}
|
|
97
|
+
class FaceLandmarks68 implements IFaceLandmarks {
|
|
98
|
+
positions: Point[];
|
|
99
|
+
constructor(points: Point[]);
|
|
100
|
+
shift(point: Point): FaceLandmarks68;
|
|
101
|
+
forSize<T extends IFaceLandmarks>(width: number, height: number): T;
|
|
102
|
+
}
|
|
103
|
+
class FaceLandmarks68TinyNet extends FaceLandmarks68 {
|
|
104
|
+
constructor(points: Point[]);
|
|
105
|
+
}
|
|
106
|
+
class SsdMobilenetv1Options {
|
|
107
|
+
constructor(options?: {
|
|
108
|
+
minConfidence?: number;
|
|
109
|
+
maxResults?: number;
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
class TinyFaceDetectorOptions {
|
|
113
|
+
constructor(options?: {
|
|
114
|
+
inputSize?: number;
|
|
115
|
+
scoreThreshold?: number;
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
class MtcnnOptions {
|
|
119
|
+
constructor(options?: {
|
|
120
|
+
minFaceSize?: number;
|
|
121
|
+
scaleFactor?: number;
|
|
122
|
+
minConfidence?: number;
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
class FaceRecognitionNet {
|
|
126
|
+
constructor();
|
|
127
|
+
loadFromUri(uri: string): Promise<void>;
|
|
128
|
+
}
|
|
129
|
+
class FaceExpressionNet {
|
|
130
|
+
constructor();
|
|
131
|
+
loadFromUri(uri: string): Promise<void>;
|
|
132
|
+
}
|
|
133
|
+
class AgeGenderNet {
|
|
134
|
+
constructor();
|
|
135
|
+
loadFromUri(uri: string): Promise<void>;
|
|
136
|
+
}
|
|
137
|
+
interface NeuralNetwork {
|
|
138
|
+
loadFromUri(uri: string): Promise<void>;
|
|
139
|
+
isLoaded: boolean;
|
|
140
|
+
dispose(): void;
|
|
141
|
+
}
|
|
142
|
+
const nets: {
|
|
143
|
+
ssdMobilenetv1: NeuralNetwork;
|
|
144
|
+
tinyFaceDetector: NeuralNetwork;
|
|
145
|
+
faceLandmark68Net: NeuralNetwork;
|
|
146
|
+
faceLandmark68TinyNet: NeuralNetwork;
|
|
147
|
+
faceRecognitionNet: NeuralNetwork;
|
|
148
|
+
faceExpressionNet: NeuralNetwork;
|
|
149
|
+
ageGenderNet: NeuralNetwork;
|
|
150
|
+
mtcnn: NeuralNetwork;
|
|
151
|
+
};
|
|
152
|
+
function createCanvasFromMedia(media: TNetInput): HTMLCanvasElement;
|
|
153
|
+
function detectAllFaces(input: TNetInput, options?: SsdMobilenetv1Options | TinyFaceDetectorOptions | MtcnnOptions): DetectAllFacesTask;
|
|
154
|
+
interface DetectAllFacesTask {
|
|
155
|
+
withFaceLandmarks(useTinyModel?: boolean): DetectAllFacesWithLandmarksTask;
|
|
156
|
+
run(): Promise<FaceDetection[]>;
|
|
157
|
+
}
|
|
158
|
+
interface DetectAllFacesWithLandmarksTask {
|
|
159
|
+
withFaceExpressions(): DetectAllFacesWithFaceExpressionsTask;
|
|
160
|
+
withAgeAndGender(): DetectAllFacesWithAgeAndGenderTask;
|
|
161
|
+
run(): Promise<FaceDetectionWithLandmarks[]>;
|
|
162
|
+
}
|
|
163
|
+
interface DetectAllFacesWithFaceExpressionsTask {
|
|
164
|
+
withAgeAndGender(): DetectAllFacesWithAgeAndGenderTask;
|
|
165
|
+
run(): Promise<Array<FaceDetectionWithLandmarks & WithFaceExpressions>>;
|
|
166
|
+
}
|
|
167
|
+
interface DetectAllFacesWithAgeAndGenderTask {
|
|
168
|
+
withFaceDescriptors(): DetectAllFacesWithFaceDescriptorsTask;
|
|
169
|
+
run(): Promise<Array<FaceDetectionWithLandmarks & WithFaceExpressions & WithAge & WithGender>>;
|
|
170
|
+
}
|
|
171
|
+
interface DetectAllFacesWithFaceDescriptorsTask {
|
|
172
|
+
run(): Promise<Array<FaceDetectionWithLandmarks & WithFaceExpressions & WithAge & WithGender & WithFaceDescriptor<any>>>;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
@@ -0,0 +1,293 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 人脸检测接口
|
|
3
|
+
* @description 定义人脸检测相关的数据类型和接口
|
|
4
|
+
* @module interfaces/face-detection
|
|
5
|
+
*/
|
|
6
|
+
import { BaseScannerResult } from './scanner-module';
|
|
7
|
+
/**
|
|
8
|
+
* 坐标点接口,表示2D坐标
|
|
9
|
+
*/
|
|
10
|
+
export interface Point {
|
|
11
|
+
/** X坐标 */
|
|
12
|
+
x: number;
|
|
13
|
+
/** Y坐标 */
|
|
14
|
+
y: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* 矩形接口,表示检测框
|
|
18
|
+
*/
|
|
19
|
+
export interface Rect {
|
|
20
|
+
/** 左上角X坐标 */
|
|
21
|
+
x: number;
|
|
22
|
+
/** 左上角Y坐标 */
|
|
23
|
+
y: number;
|
|
24
|
+
/** 宽度 */
|
|
25
|
+
width: number;
|
|
26
|
+
/** 高度 */
|
|
27
|
+
height: number;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 人脸关键点
|
|
31
|
+
*/
|
|
32
|
+
export interface FaceLandmarks {
|
|
33
|
+
/** 左眼位置 */
|
|
34
|
+
leftEye: Point;
|
|
35
|
+
/** 右眼位置 */
|
|
36
|
+
rightEye: Point;
|
|
37
|
+
/** 鼻尖位置 */
|
|
38
|
+
nose: Point;
|
|
39
|
+
/** 嘴巴中心位置 */
|
|
40
|
+
mouth: Point;
|
|
41
|
+
/** 左眼角位置 */
|
|
42
|
+
leftEyeOuterCorner?: Point;
|
|
43
|
+
/** 右眼角位置 */
|
|
44
|
+
rightEyeOuterCorner?: Point;
|
|
45
|
+
/** 左耳位置 */
|
|
46
|
+
leftEar?: Point;
|
|
47
|
+
/** 右耳位置 */
|
|
48
|
+
rightEar?: Point;
|
|
49
|
+
/** 所有关键点(有些实现可能提供更多点) */
|
|
50
|
+
points?: Point[];
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 人脸角度
|
|
54
|
+
*/
|
|
55
|
+
export interface FaceAngle {
|
|
56
|
+
/** 俯仰角(上下) */
|
|
57
|
+
pitch: number;
|
|
58
|
+
/** 偏航角(左右) */
|
|
59
|
+
yaw: number;
|
|
60
|
+
/** 滚动角(倾斜) */
|
|
61
|
+
roll: number;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* 人脸质量评估指标
|
|
65
|
+
*/
|
|
66
|
+
export interface FaceQualityMetrics {
|
|
67
|
+
/** 亮度评分(0-1) */
|
|
68
|
+
brightness: number;
|
|
69
|
+
/** 清晰度评分(0-1) */
|
|
70
|
+
sharpness: number;
|
|
71
|
+
/** 姿态合规程度(0-1) */
|
|
72
|
+
pose: number;
|
|
73
|
+
/** 人脸完整度(0-1) */
|
|
74
|
+
integrity: number;
|
|
75
|
+
/** 整体质量分数(0-1) */
|
|
76
|
+
overall: number;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 人脸属性
|
|
80
|
+
*/
|
|
81
|
+
export interface FaceAttributes {
|
|
82
|
+
/** 年龄估计(岁) */
|
|
83
|
+
age?: number;
|
|
84
|
+
/** 性别置信度(0-1,越大越倾向于男性) */
|
|
85
|
+
gender?: number;
|
|
86
|
+
/** 是否戴眼镜置信度 */
|
|
87
|
+
glasses?: number;
|
|
88
|
+
/** 是否戴口罩置信度 */
|
|
89
|
+
mask?: number;
|
|
90
|
+
/** 微笑程度置信度 */
|
|
91
|
+
smile?: number;
|
|
92
|
+
/** 人脸表情分类 */
|
|
93
|
+
emotion?: {
|
|
94
|
+
/** 生气程度 */
|
|
95
|
+
angry?: number;
|
|
96
|
+
/** 恐惧程度 */
|
|
97
|
+
fear?: number;
|
|
98
|
+
/** 厌恶程度 */
|
|
99
|
+
disgust?: number;
|
|
100
|
+
/** 高兴程度 */
|
|
101
|
+
happy?: number;
|
|
102
|
+
/** 平静程度 */
|
|
103
|
+
neutral?: number;
|
|
104
|
+
/** 伤心程度 */
|
|
105
|
+
sad?: number;
|
|
106
|
+
/** 惊讶程度 */
|
|
107
|
+
surprise?: number;
|
|
108
|
+
};
|
|
109
|
+
/** 人种类别置信度 */
|
|
110
|
+
ethnicity?: {
|
|
111
|
+
/** 亚洲人程度 */
|
|
112
|
+
asian?: number;
|
|
113
|
+
/** 黑人程度 */
|
|
114
|
+
black?: number;
|
|
115
|
+
/** 白人程度 */
|
|
116
|
+
caucasian?: number;
|
|
117
|
+
/** 其他人种程度 */
|
|
118
|
+
other?: number;
|
|
119
|
+
};
|
|
120
|
+
/** 其他自定义属性 */
|
|
121
|
+
[key: string]: any;
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 人脸特征向量(人脸嵌入)
|
|
125
|
+
*/
|
|
126
|
+
export interface FaceEmbedding {
|
|
127
|
+
/** 特征向量数据 */
|
|
128
|
+
vector: number[];
|
|
129
|
+
/** 特征维度 */
|
|
130
|
+
dimension: number;
|
|
131
|
+
/** 模型版本 */
|
|
132
|
+
modelVersion?: string;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 人脸检测结果
|
|
136
|
+
*/
|
|
137
|
+
export interface FaceDetectionResult extends BaseScannerResult {
|
|
138
|
+
/** 人脸区域 */
|
|
139
|
+
boundingBox: Rect;
|
|
140
|
+
/** 人脸关键点 */
|
|
141
|
+
landmarks?: FaceLandmarks;
|
|
142
|
+
/** 人脸角度 */
|
|
143
|
+
angle?: FaceAngle;
|
|
144
|
+
/** 检测质量 */
|
|
145
|
+
quality?: FaceQualityMetrics;
|
|
146
|
+
/** 人脸属性 */
|
|
147
|
+
attributes?: FaceAttributes;
|
|
148
|
+
/** 人脸特征向量 */
|
|
149
|
+
embedding?: FaceEmbedding;
|
|
150
|
+
/** 相似度分数(用于比对场景) */
|
|
151
|
+
similarityScore?: number;
|
|
152
|
+
/** 是否有活体检测结果 */
|
|
153
|
+
isLive?: boolean;
|
|
154
|
+
/** 活体检测分数(0-1) */
|
|
155
|
+
livenessScore?: number;
|
|
156
|
+
/** 标识符(可用于跟踪) */
|
|
157
|
+
trackId?: string;
|
|
158
|
+
/** 人脸图像数据(裁剪后) */
|
|
159
|
+
faceImageData?: string;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* 人脸比对结果
|
|
163
|
+
*/
|
|
164
|
+
export interface FaceComparisonResult {
|
|
165
|
+
/** 相似度分数(0-1) */
|
|
166
|
+
similarity: number;
|
|
167
|
+
/** 是否匹配(基于阈值判断) */
|
|
168
|
+
isMatch: boolean;
|
|
169
|
+
/** 使用的阈值 */
|
|
170
|
+
threshold: number;
|
|
171
|
+
/** 源人脸 */
|
|
172
|
+
sourceFace?: FaceDetectionResult;
|
|
173
|
+
/** 目标人脸 */
|
|
174
|
+
targetFace?: FaceDetectionResult;
|
|
175
|
+
/** 处理时间(毫秒) */
|
|
176
|
+
processingTime: number;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* 活体检测类型
|
|
180
|
+
*/
|
|
181
|
+
export declare enum LivenessDetectionType {
|
|
182
|
+
/** 被动活体检测(单图分析) */
|
|
183
|
+
PASSIVE = "passive",
|
|
184
|
+
/** 主动活体检测(动作挑战) */
|
|
185
|
+
ACTIVE = "active",
|
|
186
|
+
/** 混合活体检测(结合多种方法) */
|
|
187
|
+
HYBRID = "hybrid"
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* 活体检测动作类型
|
|
191
|
+
*/
|
|
192
|
+
export declare enum LivenessAction {
|
|
193
|
+
/** 眨眼 */
|
|
194
|
+
BLINK = "blink",
|
|
195
|
+
/** 点头 */
|
|
196
|
+
NOD = "nod",
|
|
197
|
+
/** 摇头 */
|
|
198
|
+
SHAKE = "shake",
|
|
199
|
+
/** 微笑 */
|
|
200
|
+
SMILE = "smile",
|
|
201
|
+
/** 张嘴 */
|
|
202
|
+
MOUTH_OPEN = "mouth_open",
|
|
203
|
+
/** 注视点 */
|
|
204
|
+
GAZE = "gaze"
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* 活体检测结果
|
|
208
|
+
*/
|
|
209
|
+
export interface LivenessDetectionResult {
|
|
210
|
+
/** 是否为真人 */
|
|
211
|
+
isLive: boolean;
|
|
212
|
+
/** 活体分数(0-1) */
|
|
213
|
+
score: number;
|
|
214
|
+
/** 使用的活体检测类型 */
|
|
215
|
+
type: LivenessDetectionType;
|
|
216
|
+
/** 活体检测动作(如果使用了主动活体检测) */
|
|
217
|
+
actions?: LivenessAction[];
|
|
218
|
+
/** 检测时间(毫秒) */
|
|
219
|
+
processingTime: number;
|
|
220
|
+
/** 检测结果图片 */
|
|
221
|
+
imageData?: string;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* 活体检测会话
|
|
225
|
+
*/
|
|
226
|
+
export interface LivenessSession {
|
|
227
|
+
/** 会话ID */
|
|
228
|
+
id: string;
|
|
229
|
+
/** 活体检测类型 */
|
|
230
|
+
type: LivenessDetectionType;
|
|
231
|
+
/** 需要完成的动作 */
|
|
232
|
+
requiredActions?: LivenessAction[];
|
|
233
|
+
/** 当前动作索引 */
|
|
234
|
+
currentActionIndex?: number;
|
|
235
|
+
/** 会话开始时间 */
|
|
236
|
+
startTime: number;
|
|
237
|
+
/** 会话超时时间(毫秒) */
|
|
238
|
+
timeout: number;
|
|
239
|
+
/** 会话状态 */
|
|
240
|
+
status: 'active' | 'completed' | 'failed' | 'timeout';
|
|
241
|
+
/** 完成的动作 */
|
|
242
|
+
completedActions?: LivenessAction[];
|
|
243
|
+
/** 活体检测结果 */
|
|
244
|
+
result?: LivenessDetectionResult;
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* 人脸跟踪结果
|
|
248
|
+
*/
|
|
249
|
+
export interface FaceTrackingResult {
|
|
250
|
+
/** 跟踪ID */
|
|
251
|
+
trackId: string;
|
|
252
|
+
/** 当前检测结果 */
|
|
253
|
+
detection: FaceDetectionResult;
|
|
254
|
+
/** 首次检测时间 */
|
|
255
|
+
firstDetectedAt: number;
|
|
256
|
+
/** 上次检测时间 */
|
|
257
|
+
lastDetectedAt: number;
|
|
258
|
+
/** 跟踪状态 */
|
|
259
|
+
status: 'tracked' | 'lost' | 'removed';
|
|
260
|
+
/** 连续跟踪帧数 */
|
|
261
|
+
consecutiveFrames: number;
|
|
262
|
+
/** 历史位置(最近几帧) */
|
|
263
|
+
history?: Rect[];
|
|
264
|
+
}
|
|
265
|
+
/**
|
|
266
|
+
* 人脸检测选项
|
|
267
|
+
*/
|
|
268
|
+
export interface FaceDetectionOptions {
|
|
269
|
+
/** 最低人脸置信度 */
|
|
270
|
+
minConfidence?: number;
|
|
271
|
+
/** 最大检测人脸数 */
|
|
272
|
+
maxFaces?: number;
|
|
273
|
+
/** 是否检测关键点 */
|
|
274
|
+
withLandmarks?: boolean;
|
|
275
|
+
/** 是否检测属性 */
|
|
276
|
+
withAttributes?: boolean;
|
|
277
|
+
/** 是否进行人脸对齐 */
|
|
278
|
+
doAlignment?: boolean;
|
|
279
|
+
/** 是否提取人脸特征 */
|
|
280
|
+
withEmbedding?: boolean;
|
|
281
|
+
/** 是否启用跟踪 */
|
|
282
|
+
enableTracking?: boolean;
|
|
283
|
+
/** 是否执行活体检测 */
|
|
284
|
+
withLiveness?: boolean;
|
|
285
|
+
/** 活体检测类型 */
|
|
286
|
+
livenessType?: LivenessDetectionType;
|
|
287
|
+
/** 返回人脸图像 */
|
|
288
|
+
returnFaceImage?: boolean;
|
|
289
|
+
/** 活体检测选项 */
|
|
290
|
+
livenessOptions?: Record<string, any>;
|
|
291
|
+
/** 其他选项 */
|
|
292
|
+
[key: string]: any;
|
|
293
|
+
}
|