@sssxyd/face-liveness-detector 0.4.0-alpha.9 → 0.4.1-beta.1
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.en.md +115 -146
- package/README.md +21 -52
- package/dist/index.esm.js +2218 -3077
- package/dist/index.esm.js.map +1 -1
- package/dist/index.js +2218 -3077
- package/dist/index.js.map +1 -1
- package/dist/types/browser_utils.d.ts +3 -3
- package/dist/types/browser_utils.d.ts.map +1 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/types/dlp-color-wheel-detector.d.ts +76 -0
- package/dist/types/dlp-color-wheel-detector.d.ts.map +1 -0
- package/dist/types/face-detection-engine.d.ts +59 -20
- package/dist/types/face-detection-engine.d.ts.map +1 -1
- package/dist/types/face-detection-state.d.ts +1 -5
- package/dist/types/face-detection-state.d.ts.map +1 -1
- package/dist/types/face-frontal-calculator.d.ts +3 -3
- package/dist/types/face-frontal-calculator.d.ts.map +1 -1
- package/dist/types/image-quality-calculator.d.ts +10 -23
- package/dist/types/image-quality-calculator.d.ts.map +1 -1
- package/dist/types/motion-liveness-detector.d.ts +258 -124
- package/dist/types/motion-liveness-detector.d.ts.map +1 -1
- package/dist/types/optical-distortion-detector.d.ts +116 -0
- package/dist/types/optical-distortion-detector.d.ts.map +1 -0
- package/dist/types/screen-capture-detector.d.ts +74 -115
- package/dist/types/screen-capture-detector.d.ts.map +1 -1
- package/dist/types/screen-corners-contour-detector.d.ts +78 -0
- package/dist/types/screen-corners-contour-detector.d.ts.map +1 -0
- package/dist/types/screen-flicker-detector.d.ts +103 -0
- package/dist/types/screen-flicker-detector.d.ts.map +1 -0
- package/dist/types/screen-moire-pattern-detect.d.ts.map +1 -1
- package/dist/types/screen-response-time-detector.d.ts +70 -0
- package/dist/types/screen-response-time-detector.d.ts.map +1 -0
- package/dist/types/screen-rgb-emission-detect.d.ts.map +1 -1
- package/dist/types/types.d.ts +8 -54
- package/dist/types/types.d.ts.map +1 -1
- package/dist/types/video-frame-collector.d.ts +111 -0
- package/dist/types/video-frame-collector.d.ts.map +1 -0
- package/package.json +2 -1
|
@@ -1,49 +1,11 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* 第三版屏幕采集检测器
|
|
3
3
|
*
|
|
4
|
-
* 核心思想:级联检测 (Cascade Detection)
|
|
5
|
-
* - 按检测速度从快到慢排序:RGB发光 → 色彩特征 → 莫尔纹
|
|
6
|
-
* - 尽早排除,减少不必要的计算
|
|
7
|
-
* - 平衡精准度和速度
|
|
8
4
|
*/
|
|
9
|
-
/**
|
|
10
|
-
* 检测策略枚举
|
|
11
|
-
*/
|
|
12
|
-
export declare enum DetectionStrategy {
|
|
13
|
-
/** 最快模式:仅使用RGB发光检测 (~10ms) */
|
|
14
|
-
FASTEST = "fastest",
|
|
15
|
-
/** 快速模式:RGB发光 + 色彩特征 (~30-40ms) */
|
|
16
|
-
FAST = "fast",
|
|
17
|
-
/** 精准模式:全部三种方法 (~100-150ms) */
|
|
18
|
-
ACCURATE = "accurate",
|
|
19
|
-
/** 自适应模式:根据第一轮结果动态调整 */
|
|
20
|
-
ADAPTIVE = "adaptive"
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* 将字符串转换为 DetectionStrategy 枚举值
|
|
24
|
-
*
|
|
25
|
-
* @param value - 字符串值
|
|
26
|
-
* @param defaultValue - 默认值(可选)
|
|
27
|
-
* @returns DetectionStrategy 枚举值
|
|
28
|
-
* @throws Error 如果字符串不是有效的检测策略
|
|
29
|
-
*
|
|
30
|
-
* @example
|
|
31
|
-
* const strategy = stringToDetectionStrategy('fastest') // DetectionStrategy.FASTEST
|
|
32
|
-
* const strategy2 = stringToDetectionStrategy('invalid', DetectionStrategy.ADAPTIVE) // DetectionStrategy.ADAPTIVE
|
|
33
|
-
*/
|
|
34
|
-
export declare function stringToDetectionStrategy(value: string, defaultValue?: DetectionStrategy): DetectionStrategy;
|
|
35
|
-
/**
|
|
36
|
-
* 判断字符串是否是有效的检测策略
|
|
37
|
-
*
|
|
38
|
-
* @param value - 字符串值
|
|
39
|
-
* @returns true 如果是有效的检测策略
|
|
40
|
-
*/
|
|
41
|
-
export declare function isValidDetectionStrategy(value: string): boolean;
|
|
42
5
|
/**
|
|
43
6
|
* 详细的级联检测过程日志
|
|
44
7
|
*/
|
|
45
8
|
export interface CascadeDetectionDebugInfo {
|
|
46
|
-
strategy: DetectionStrategy;
|
|
47
9
|
startTime: number;
|
|
48
10
|
endTime: number;
|
|
49
11
|
totalTimeMs: number;
|
|
@@ -75,37 +37,52 @@ export declare class ScreenCaptureDetectionResult {
|
|
|
75
37
|
confidence: number;
|
|
76
38
|
details?: any;
|
|
77
39
|
}>;
|
|
78
|
-
skippedMethods?: string[];
|
|
79
40
|
riskLevel: 'low' | 'medium' | 'high';
|
|
80
41
|
processingTimeMs: number;
|
|
81
|
-
strategy: DetectionStrategy;
|
|
82
42
|
debug?: CascadeDetectionDebugInfo;
|
|
83
43
|
constructor(isScreenCapture: boolean, confidenceScore: number, executedMethods: Array<{
|
|
84
44
|
method: string;
|
|
85
45
|
isScreenCapture: boolean;
|
|
86
46
|
confidence: number;
|
|
87
47
|
details?: any;
|
|
88
|
-
}>, riskLevel: 'low' | 'medium' | 'high', processingTimeMs: number,
|
|
48
|
+
}>, riskLevel: 'low' | 'medium' | 'high', processingTimeMs: number, debug?: CascadeDetectionDebugInfo);
|
|
89
49
|
getMessage(): string;
|
|
90
50
|
}
|
|
91
51
|
export interface ScreenCaptureDetectorOptions {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
52
|
+
flickerBufferSize?: number;
|
|
53
|
+
flickerMinPeriod?: number;
|
|
54
|
+
flickerMaxPeriod?: number;
|
|
55
|
+
flickerCorrelationThreshold?: number;
|
|
56
|
+
flickerPassingPixelRatio?: number;
|
|
57
|
+
flickerSamplingStride?: number;
|
|
58
|
+
responseTimeBufferSize?: number;
|
|
59
|
+
responseTimeMinPixelDelta?: number;
|
|
60
|
+
responseTimeThreshold?: number;
|
|
61
|
+
responseTimePassingPixelRatio?: number;
|
|
62
|
+
responseTimeSamplingStride?: number;
|
|
63
|
+
dlpColorWheelBufferSize?: number;
|
|
64
|
+
dlpEdgeThreshold?: number;
|
|
65
|
+
dlpChannelSeparationThreshold?: number;
|
|
66
|
+
dlpConfidenceThreshold?: number;
|
|
67
|
+
dlpSamplingStride?: number;
|
|
68
|
+
opticalDistortionBufferSize?: number;
|
|
69
|
+
opticalKeystoneThreshold?: number;
|
|
70
|
+
opticalBarrelThreshold?: number;
|
|
71
|
+
opticalChromaticThreshold?: number;
|
|
72
|
+
opticalVignetteThreshold?: number;
|
|
73
|
+
opticalSamplingStride?: number;
|
|
74
|
+
opticalFeatureKeystone?: number;
|
|
75
|
+
opticalFeatureBarrel?: number;
|
|
76
|
+
opticalFeatureChromatic?: number;
|
|
77
|
+
opticalFeatureVignette?: number;
|
|
78
|
+
frameDropRate?: number;
|
|
79
|
+
flickerConfidenceThreshold?: number;
|
|
80
|
+
responseTimeConfidenceThreshold?: number;
|
|
81
|
+
dlpConfidenceThresholdResult?: number;
|
|
82
|
+
opticalConfidenceThresholdResult?: number;
|
|
83
|
+
compositeConfidenceThresholdScreenCapture?: number;
|
|
84
|
+
compositeConfidenceThresholdHighRisk?: number;
|
|
85
|
+
compositeConfidenceThresholdMediumRisk?: number;
|
|
109
86
|
}
|
|
110
87
|
/**
|
|
111
88
|
* 优化版屏幕采集检测引擎
|
|
@@ -114,74 +91,56 @@ export interface ScreenCaptureDetectorOptions {
|
|
|
114
91
|
*/
|
|
115
92
|
export declare class ScreenCaptureDetector {
|
|
116
93
|
private cv;
|
|
117
|
-
private
|
|
118
|
-
private
|
|
119
|
-
private
|
|
120
|
-
private
|
|
121
|
-
private
|
|
122
|
-
|
|
94
|
+
private fps;
|
|
95
|
+
private config;
|
|
96
|
+
private frameCollector;
|
|
97
|
+
private flickerDetector;
|
|
98
|
+
private responseTimeDetector;
|
|
99
|
+
private dlpColorWheelDetector;
|
|
100
|
+
private opticalDistortionDetector;
|
|
101
|
+
private droppedFramesCount;
|
|
102
|
+
constructor(fps?: number);
|
|
123
103
|
setCVInstance(cvInstance: any): void;
|
|
104
|
+
getFPS(): number;
|
|
124
105
|
/**
|
|
125
|
-
*
|
|
126
|
-
*
|
|
127
|
-
* 精准度: 70-80%
|
|
128
|
-
*
|
|
129
|
-
* @param bgrMat - BGR格式图像
|
|
130
|
-
* @returns 检测结果
|
|
131
|
-
*/
|
|
132
|
-
detectFastest(bgrMat: any): ScreenCaptureDetectionResult;
|
|
133
|
-
/**
|
|
134
|
-
* 快速检测:平衡速度和精准度
|
|
135
|
-
* RGB发光检测 + 色彩特征检测 (~30-40ms)
|
|
136
|
-
* 精准度: 85-90%
|
|
106
|
+
* 向视频检测器添加一帧(用于实时视频处理)
|
|
107
|
+
* 建议每收到一帧就调用此方法
|
|
137
108
|
*
|
|
138
|
-
* @param
|
|
139
|
-
* @
|
|
109
|
+
* @param grayMat 灰度图像矩阵
|
|
110
|
+
* @param bgrMat 彩色图像矩阵
|
|
111
|
+
* @returns 帧是否被接受(true表示被处理,false表示被随机丢弃)
|
|
140
112
|
*/
|
|
141
|
-
|
|
113
|
+
addVideoFrame(grayMat: any, bgrMat: any): boolean;
|
|
114
|
+
isReady(): boolean;
|
|
142
115
|
/**
|
|
143
|
-
*
|
|
144
|
-
* RGB发光 + 色彩特征 + 莫尔纹检测 (~100-150ms)
|
|
145
|
-
* 精准度: 95%+
|
|
146
|
-
*
|
|
147
|
-
* @param bgrMat - BGR格式图像
|
|
148
|
-
* @param grayMat - 灰度图像(莫尔纹检测需要)
|
|
149
|
-
* @returns 检测结果
|
|
116
|
+
* 获取丢帧统计信息
|
|
150
117
|
*/
|
|
151
|
-
|
|
118
|
+
getFrameDropStats(): {
|
|
119
|
+
droppedFramesCount: number;
|
|
120
|
+
dropRate: number;
|
|
121
|
+
};
|
|
122
|
+
reset(): void;
|
|
152
123
|
/**
|
|
153
|
-
*
|
|
124
|
+
* 检测屏幕捕捉
|
|
125
|
+
* 使用三层判定逻辑:
|
|
126
|
+
* 1. 任意方法能明确判定为屏幕捕捉时,直接返回
|
|
127
|
+
* 2. 都不能明确判定时,计算加权置信度
|
|
128
|
+
* 3. 用加权置信度判定最终结果
|
|
154
129
|
*
|
|
155
|
-
*
|
|
156
|
-
* -
|
|
157
|
-
* - 结果明确时直接返回
|
|
158
|
-
* - 结果模糊时继续执行色彩检测 (~20ms)
|
|
159
|
-
* - 仍模糊则执行莫尔纹检测以获得最终确定 (~80ms)
|
|
160
|
-
*
|
|
161
|
-
* 处理时间: 10-130ms (取决于结果确定性)
|
|
162
|
-
* 精准度: 95%+ (自动选择最优方法组合)
|
|
163
|
-
*
|
|
164
|
-
* @param bgrMat - BGR格式图像
|
|
165
|
-
* @param grayMat - 灰度图像
|
|
130
|
+
* @param debugMode - 是否启用调试模式,返回详细日志
|
|
131
|
+
* @param useVideoAnalysis - 是否使用已积累的视频帧进行闪烁检测
|
|
166
132
|
* @returns 检测结果
|
|
167
133
|
*/
|
|
168
|
-
|
|
169
|
-
detectAuto(bgrMat: any, grayMat: any): ScreenCaptureDetectionResult;
|
|
170
|
-
/**
|
|
171
|
-
* 核心检测方法:支持多种策略的级联检测
|
|
172
|
-
*/
|
|
173
|
-
private detectScreenCaptureWithStrategy;
|
|
134
|
+
detect(debugMode?: boolean, useVideoAnalysis?: boolean): ScreenCaptureDetectionResult;
|
|
174
135
|
/**
|
|
175
|
-
*
|
|
136
|
+
* 核心检测方法:多屏幕类型级联检测
|
|
176
137
|
*
|
|
177
|
-
*
|
|
178
|
-
*
|
|
179
|
-
*
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
/**
|
|
183
|
-
* 构建检测结果对象
|
|
138
|
+
* 检测顺序(按可靠性排序):
|
|
139
|
+
* 1. 视频闪烁(LCD/OLED)- 最可靠的物理特性
|
|
140
|
+
* 2. 响应时间(墨水屏)- 像素变化速度特征
|
|
141
|
+
* 3. DLP色轮(DLP投影)- 色轮干涉的独特特征
|
|
142
|
+
* 4. 光学畸变(其他投影)- 投影光学系统的失真
|
|
184
143
|
*/
|
|
185
|
-
private
|
|
144
|
+
private detectWithLogic;
|
|
186
145
|
}
|
|
187
146
|
//# sourceMappingURL=screen-capture-detector.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-capture-detector.d.ts","sourceRoot":"","sources":["../../src/screen-capture-detector.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"screen-capture-detector.d.ts","sourceRoot":"","sources":["../../src/screen-capture-detector.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 屏幕边角、轮廓检测器
|
|
3
|
+
* 用于快速判定当前图片是否从屏幕拍摄
|
|
4
|
+
* 通过检测图片中的屏幕边界轮廓(矩形框)
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 屏幕边角、轮廓检测器配置选项
|
|
8
|
+
*/
|
|
9
|
+
export interface ScreenCornersContourDetectorOptions {
|
|
10
|
+
/** Canny 边缘检测下阈值(默认 35) */
|
|
11
|
+
edgeThreshold1?: number;
|
|
12
|
+
/** Canny 边缘检测上阈值(默认 110) */
|
|
13
|
+
edgeThreshold2?: number;
|
|
14
|
+
/** 最小轮廓面积(默认 800) */
|
|
15
|
+
minContourArea?: number;
|
|
16
|
+
/** 屏幕检测置信度阈值(默认 0.5) */
|
|
17
|
+
screenConfidenceThreshold?: number;
|
|
18
|
+
/** 屏幕边界占比阈值(默认 0.15) */
|
|
19
|
+
screenBoundaryRatioThreshold?: number;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* 默认的屏幕边角、轮廓检测器配置
|
|
23
|
+
* 优化用于快速检测摄像头拍摄的手机/平板屏幕
|
|
24
|
+
* 严格模式:仅当非常确定时才判定为屏幕
|
|
25
|
+
*/
|
|
26
|
+
export declare const DEFAULT_SCREEN_CORNERS_CONTOUR_DETECTOR_OPTIONS: Required<ScreenCornersContourDetectorOptions>;
|
|
27
|
+
export interface ScreenCornersContourDetectionResult {
|
|
28
|
+
/** 是否检测到屏幕 */
|
|
29
|
+
isScreenCapture: boolean;
|
|
30
|
+
/** 置信度(0-1) */
|
|
31
|
+
confidence: number;
|
|
32
|
+
/** 检测到的屏幕矩形轮廓数量 */
|
|
33
|
+
contourCount: number;
|
|
34
|
+
/** 屏幕边界占图片面积的比例 */
|
|
35
|
+
screenBoundaryRatio: number;
|
|
36
|
+
/** 处理耗时(毫秒) */
|
|
37
|
+
processingTimeMs: number;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* 屏幕边角、轮廓检测器
|
|
41
|
+
* 用快速边缘和轮廓检测来识别屏幕采集
|
|
42
|
+
*/
|
|
43
|
+
export declare class ScreenCornersContourDetector {
|
|
44
|
+
private cv;
|
|
45
|
+
private config;
|
|
46
|
+
/**
|
|
47
|
+
* 构造函数
|
|
48
|
+
* @param options - 检测器配置选项
|
|
49
|
+
*/
|
|
50
|
+
constructor(options?: Partial<ScreenCornersContourDetectorOptions>);
|
|
51
|
+
/**
|
|
52
|
+
* 设置 OpenCV 实例
|
|
53
|
+
*/
|
|
54
|
+
setCVInstance(cv: any): void;
|
|
55
|
+
/**
|
|
56
|
+
* 检测图片是否为屏幕采集
|
|
57
|
+
* @param grayFrame - 灰度图像 Mat
|
|
58
|
+
* @returns 检测结果
|
|
59
|
+
*/
|
|
60
|
+
detect(grayFrame: any): ScreenCornersContourDetectionResult;
|
|
61
|
+
/**
|
|
62
|
+
* 轮廓检测 - 检测屏幕矩形边界
|
|
63
|
+
*/
|
|
64
|
+
private detectContours;
|
|
65
|
+
/**
|
|
66
|
+
* 检查四边形是否接近矩形
|
|
67
|
+
*/
|
|
68
|
+
private isRectangleShape;
|
|
69
|
+
/**
|
|
70
|
+
* 简化的屏幕检测置信度计算
|
|
71
|
+
*/
|
|
72
|
+
private calculateScreenConfidence;
|
|
73
|
+
/**
|
|
74
|
+
* 获取检测器状态消息
|
|
75
|
+
*/
|
|
76
|
+
getMessage(confidence: number): string;
|
|
77
|
+
}
|
|
78
|
+
//# sourceMappingURL=screen-corners-contour-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-corners-contour-detector.d.ts","sourceRoot":"","sources":["../../src/screen-corners-contour-detector.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,MAAM,WAAW,mCAAmC;IAElD,2BAA2B;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,4BAA4B;IAC5B,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,qBAAqB;IACrB,cAAc,CAAC,EAAE,MAAM,CAAA;IAGvB,wBAAwB;IACxB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,wBAAwB;IACxB,4BAA4B,CAAC,EAAE,MAAM,CAAA;CACtC;AAED;;;;GAIG;AACH,eAAO,MAAM,+CAA+C,EAAE,QAAQ,CAAC,mCAAmC,CAazG,CAAA;AAED,MAAM,WAAW,mCAAmC;IAClD,cAAc;IACd,eAAe,EAAE,OAAO,CAAA;IACxB,eAAe;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,YAAY,EAAE,MAAM,CAAA;IACpB,mBAAmB;IACnB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,eAAe;IACf,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED;;;GAGG;AACH,qBAAa,4BAA4B;IACvC,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,MAAM,CAA+C;IAE7D;;;OAGG;gBACS,OAAO,CAAC,EAAE,OAAO,CAAC,mCAAmC,CAAC;IAOlE;;OAEG;IACH,aAAa,CAAC,EAAE,EAAE,GAAG,GAAG,IAAI;IAI5B;;;;OAIG;IACH,MAAM,CAAC,SAAS,EAAE,GAAG,GAAG,mCAAmC;IAmC3D;;OAEG;IACH,OAAO,CAAC,cAAc;IA2DtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA+BxB;;OAEG;IACH,OAAO,CAAC,yBAAyB;IAiBjC;;OAEG;IACH,UAAU,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM;CASvC"}
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 屏幕闪烁检测器
|
|
3
|
+
*
|
|
4
|
+
* 核心思路:利用视频帧序列的时间特性
|
|
5
|
+
* - 屏幕显示内容时有屏幕刷新频率(60/120/144Hz),导致亮度周期性变化
|
|
6
|
+
* - 真实人脸没有这种周期性闪烁,变化是随机的
|
|
7
|
+
*
|
|
8
|
+
* 算法:
|
|
9
|
+
* 1. 收集N帧视频(15-30帧)
|
|
10
|
+
* 2. 对每个像素的时间序列计算自相关(autocorrelation)
|
|
11
|
+
* 3. 如果在某个周期lag发现强自相关 → 存在周期性 → 屏幕闪烁
|
|
12
|
+
* 4. 统计多少像素检测到周期性,若超过阈值则判定为屏幕
|
|
13
|
+
*/
|
|
14
|
+
import { VideoFrameCollector } from "./video-frame-collector";
|
|
15
|
+
export interface ScreenFlickerDetectorConfig {
|
|
16
|
+
bufferSize: number;
|
|
17
|
+
minFlickerPeriodFrames: number;
|
|
18
|
+
maxFlickerPeriodFrames: number;
|
|
19
|
+
correlationThreshold: number;
|
|
20
|
+
passingPixelRatio: number;
|
|
21
|
+
samplingStride: number;
|
|
22
|
+
}
|
|
23
|
+
export interface ScreenFlickerDetectionResult {
|
|
24
|
+
isScreenCapture: boolean;
|
|
25
|
+
confidence: number;
|
|
26
|
+
dominantFlickerPeriod?: number;
|
|
27
|
+
estimatedScreenRefreshRate?: number;
|
|
28
|
+
passingPixelRatio: number;
|
|
29
|
+
averageFps?: number;
|
|
30
|
+
sampledPixelCount: number;
|
|
31
|
+
details?: {
|
|
32
|
+
correlationValues: number[];
|
|
33
|
+
pixelFlickerCounts: Map<number, number>;
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
export declare class ScreenFlickerDetector {
|
|
37
|
+
private config;
|
|
38
|
+
private frameCollector;
|
|
39
|
+
constructor(frameCollector: VideoFrameCollector, config: ScreenFlickerDetectorConfig);
|
|
40
|
+
/**
|
|
41
|
+
* 获取当前缓冲区中的帧数
|
|
42
|
+
*/
|
|
43
|
+
getBufferedFrameCount(): number;
|
|
44
|
+
/**
|
|
45
|
+
* 执行闪烁检测分析
|
|
46
|
+
* 需要至少 maxFlickerPeriodFrames + 1 帧的数据
|
|
47
|
+
*
|
|
48
|
+
* 根据实际fps自动调整检测周期范围,以支持不同刷新率的屏幕
|
|
49
|
+
* 根据分辨率自动调整采样密度和通过率阈值
|
|
50
|
+
*/
|
|
51
|
+
analyze(): ScreenFlickerDetectionResult;
|
|
52
|
+
/**
|
|
53
|
+
* 重置检测器
|
|
54
|
+
* 注意:帧缓冲由 FrameCollector 管理
|
|
55
|
+
*/
|
|
56
|
+
reset(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 获取当前平均fps
|
|
59
|
+
*/
|
|
60
|
+
getAverageFps(): number;
|
|
61
|
+
/**
|
|
62
|
+
* 根据实测fps动态调整最大检测周期
|
|
63
|
+
*
|
|
64
|
+
* 高fps摄像头 + 高刷屏的周期较短
|
|
65
|
+
* 低fps摄像头 + 高刷屏的周期较长
|
|
66
|
+
*
|
|
67
|
+
* 例如:
|
|
68
|
+
* - 60fps摄像头:120Hz屏 → 2帧周期 → max=2
|
|
69
|
+
* - 30fps摄像头:120Hz屏 → 4帧周期 → max=4
|
|
70
|
+
* - 15fps摄像头:120Hz屏 → 8帧周期 → max=8
|
|
71
|
+
*/
|
|
72
|
+
private getEffectiveMaxPeriod;
|
|
73
|
+
/**
|
|
74
|
+
* 根据分辨率动态调整采样参数
|
|
75
|
+
*
|
|
76
|
+
* 低分辨率时:
|
|
77
|
+
* - 增加采样密度(减小stride)以获得足够的样本
|
|
78
|
+
* - 降低通过率阈值以适应噪声影响
|
|
79
|
+
*
|
|
80
|
+
* 高分辨率时:
|
|
81
|
+
* - 可以使用较大的stride来加快处理
|
|
82
|
+
* - 提高通过率阈值以提高准确性
|
|
83
|
+
*/
|
|
84
|
+
private getResolutionAdaptation;
|
|
85
|
+
/**
|
|
86
|
+
* 生成采样像素的索引
|
|
87
|
+
* @param stride 采样步长(默认使用配置中的值)
|
|
88
|
+
*/
|
|
89
|
+
private generateSampledPixels;
|
|
90
|
+
/**
|
|
91
|
+
* 提取单个像素在所有帧中的亮度时间序列
|
|
92
|
+
*/
|
|
93
|
+
private extractPixelTimeSeries;
|
|
94
|
+
/**
|
|
95
|
+
* 计算时间序列的自相关系数
|
|
96
|
+
* 返回在不同lag值下的相关系数(归一化到0-1)
|
|
97
|
+
*
|
|
98
|
+
* @param timeSeries 像素亮度时间序列
|
|
99
|
+
* @param maxLag 最大检查的lag值
|
|
100
|
+
*/
|
|
101
|
+
private computeAutoCorrelation;
|
|
102
|
+
}
|
|
103
|
+
//# sourceMappingURL=screen-flicker-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-flicker-detector.d.ts","sourceRoot":"","sources":["../../src/screen-flicker-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE7D,MAAM,WAAW,2BAA2B;IAE1C,UAAU,EAAE,MAAM,CAAA;IASlB,sBAAsB,EAAE,MAAM,CAAA;IAC9B,sBAAsB,EAAE,MAAM,CAAA;IAI9B,oBAAoB,EAAE,MAAM,CAAA;IAI5B,iBAAiB,EAAE,MAAM,CAAA;IAGzB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,4BAA4B;IAC3C,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAGlB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAG9B,0BAA0B,CAAC,EAAE,MAAM,CAAA;IAGnC,iBAAiB,EAAE,MAAM,CAAA;IAGzB,UAAU,CAAC,EAAE,MAAM,CAAA;IAGnB,iBAAiB,EAAE,MAAM,CAAA;IAEzB,OAAO,CAAC,EAAE;QACR,iBAAiB,EAAE,MAAM,EAAE,CAAA;QAC3B,kBAAkB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACxC,CAAA;CACF;AAED,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAA6B;IAC3C,OAAO,CAAC,cAAc,CAAqB;gBAE/B,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAE,2BAA2B;IAOpF;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAI/B;;;;;;OAMG;IACH,OAAO,IAAI,4BAA4B;IAoHvC;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;;;;;;;;;OAUG;IACH,OAAO,CAAC,qBAAqB;IA2B7B;;;;;;;;;;OAUG;IACH,OAAO,CAAC,uBAAuB;IA6C/B;;;OAGG;IACH,OAAO,CAAC,qBAAqB;IAiB7B;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAa9B;;;;;;OAMG;IACH,OAAO,CAAC,sBAAsB;CA+C/B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-moire-pattern-detect.d.ts","sourceRoot":"","sources":["../../src/screen-moire-pattern-detect.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,EAAE,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAE1C,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC;
|
|
1
|
+
{"version":3,"file":"screen-moire-pattern-detect.d.ts","sourceRoot":"","sources":["../../src/screen-moire-pattern-detect.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,EAAE,CAAA;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAE1C,eAAe,CAAC,EAAE,MAAM,CAAA;IAExB,UAAU,CAAC,EAAE,OAAO,CAAA;IAEpB,qBAAqB,CAAC,EAAE,OAAO,CAAA;CAChC;AAeD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkFG;AACH,wBAAgB,kBAAkB,CAChC,EAAE,EAAE,GAAG,EACP,IAAI,EAAE,GAAG,EACT,MAAM,CAAC,EAAE,OAAO,CAAC,2BAA2B,CAAC,GAC5C,2BAA2B,CA+D7B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 屏幕响应时间检测器 - 区分墨水屏和LCD/OLED
|
|
3
|
+
*
|
|
4
|
+
* 核心原理:
|
|
5
|
+
* - LCD/OLED: 像素状态变化极快 (<5ms),直接从0跳到255
|
|
6
|
+
* - 墨水屏: 像素状态变化缓慢 (200-500ms),需要多帧逐渐过渡
|
|
7
|
+
*
|
|
8
|
+
* 检测方法:
|
|
9
|
+
* 1. 收集视频帧,跟踪像素值变化
|
|
10
|
+
* 2. 测量从初始值到最终值需要多少帧
|
|
11
|
+
* 3. 根据fps计算实际响应时间
|
|
12
|
+
* 4. 响应时间 > 100ms → 墨水屏
|
|
13
|
+
*/
|
|
14
|
+
import { VideoFrameCollector } from "./video-frame-collector";
|
|
15
|
+
export interface ScreenResponseTimeDetectorConfig {
|
|
16
|
+
bufferSize: number;
|
|
17
|
+
minPixelDelta: number;
|
|
18
|
+
einkResponseTimeThreshold: number;
|
|
19
|
+
samplingStride: number;
|
|
20
|
+
passingPixelRatio: number;
|
|
21
|
+
}
|
|
22
|
+
export interface ScreenResponseTimeDetectionResult {
|
|
23
|
+
isScreenCapture: boolean;
|
|
24
|
+
confidence: number;
|
|
25
|
+
averageResponseTimeMs?: number;
|
|
26
|
+
maxResponseTimeMs?: number;
|
|
27
|
+
minResponseTimeMs?: number;
|
|
28
|
+
passingPixelRatio: number;
|
|
29
|
+
sampledPixelCount: number;
|
|
30
|
+
estimatedScreenType?: 'lcd' | 'oled' | 'eink' | 'unknown';
|
|
31
|
+
averageFps?: number;
|
|
32
|
+
details?: {
|
|
33
|
+
responseTimes: number[];
|
|
34
|
+
pixelResponsiveness: Map<number, number>;
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
export declare class ScreenResponseTimeDetector {
|
|
38
|
+
private config;
|
|
39
|
+
private frameCollector;
|
|
40
|
+
constructor(frameCollector: VideoFrameCollector, config: ScreenResponseTimeDetectorConfig);
|
|
41
|
+
/**
|
|
42
|
+
* 获取当前缓冲区中的帧数
|
|
43
|
+
*/
|
|
44
|
+
getBufferedFrameCount(): number;
|
|
45
|
+
/**
|
|
46
|
+
* 执行响应时间检测分析
|
|
47
|
+
*
|
|
48
|
+
* 寻找像素值快速变化的情况,测量变化速度
|
|
49
|
+
* 缓慢变化 → 墨水屏
|
|
50
|
+
* 快速变化 → LCD/OLED
|
|
51
|
+
*/
|
|
52
|
+
analyze(): ScreenResponseTimeDetectionResult;
|
|
53
|
+
/**
|
|
54
|
+
* 重置检测器
|
|
55
|
+
* 注意:帧缓冲由 FrameCollector 管理
|
|
56
|
+
*/
|
|
57
|
+
reset(): void;
|
|
58
|
+
/**
|
|
59
|
+
* 测量单个像素的响应时间
|
|
60
|
+
*
|
|
61
|
+
* 跟踪该像素的值变化,找出最大的变化
|
|
62
|
+
* 计算这个变化需要多少帧(时间)完成
|
|
63
|
+
*/
|
|
64
|
+
private measurePixelResponseTime;
|
|
65
|
+
/**
|
|
66
|
+
* 生成采样像素列表
|
|
67
|
+
*/
|
|
68
|
+
private generateSampledPixels;
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=screen-response-time-detector.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"screen-response-time-detector.d.ts","sourceRoot":"","sources":["../../src/screen-response-time-detector.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAA;AAE7D,MAAM,WAAW,gCAAgC;IAE/C,UAAU,EAAE,MAAM,CAAA;IAGlB,aAAa,EAAE,MAAM,CAAA;IAGrB,yBAAyB,EAAE,MAAM,CAAA;IAGjC,cAAc,EAAE,MAAM,CAAA;IAGtB,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,iCAAiC;IAChD,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAGlB,qBAAqB,CAAC,EAAE,MAAM,CAAA;IAC9B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAG1B,iBAAiB,EAAE,MAAM,CAAA;IAGzB,iBAAiB,EAAE,MAAM,CAAA;IAGzB,mBAAmB,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG,MAAM,GAAG,SAAS,CAAA;IAGzD,UAAU,CAAC,EAAE,MAAM,CAAA;IAEnB,OAAO,CAAC,EAAE;QACR,aAAa,EAAE,MAAM,EAAE,CAAA;QACvB,mBAAmB,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;KACzC,CAAA;CACF;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAAqB;gBAE/B,cAAc,EAAE,mBAAmB,EAAE,MAAM,EAAE,gCAAgC;IAKzF;;OAEG;IACH,qBAAqB,IAAI,MAAM;IAI/B;;;;;;OAMG;IACH,OAAO,IAAI,iCAAiC;IAgH5C;;;OAGG;IACH,KAAK,IAAI,IAAI;IAKb;;;;;OAKG;IACH,OAAO,CAAC,wBAAwB;IAgEhC;;OAEG;IACH,OAAO,CAAC,qBAAqB;CAgB9B"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-rgb-emission-detect.d.ts","sourceRoot":"","sources":["../../src/screen-rgb-emission-detect.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,0BAA0B;IAEzC,2BAA2B;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,2BAA2B;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,eAAe;IACf,iCAAiC,CAAC,EAAE,MAAM,CAAA;IAG1C,mBAAmB;IACnB,uCAAuC,CAAC,EAAE,MAAM,CAAA;IAGhD,kBAAkB;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,oBAAoB;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,eAAe;IACf,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAGjC,iBAAiB;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;QACtB,YAAY,EAAE,MAAM,CAAA;QACpB,oBAAoB,EAAE,MAAM,CAAA;KAC7B,CAAA;CACF;
|
|
1
|
+
{"version":3,"file":"screen-rgb-emission-detect.d.ts","sourceRoot":"","sources":["../../src/screen-rgb-emission-detect.ts"],"names":[],"mappings":"AACA,MAAM,WAAW,0BAA0B;IAEzC,2BAA2B;IAC3B,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,2BAA2B;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,eAAe;IACf,iCAAiC,CAAC,EAAE,MAAM,CAAA;IAG1C,mBAAmB;IACnB,uCAAuC,CAAC,EAAE,MAAM,CAAA;IAGhD,kBAAkB;IAClB,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,oBAAoB;IACpB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,eAAe;IACf,wBAAwB,CAAC,EAAE,MAAM,CAAA;IAGjC,iBAAiB;IACjB,oBAAoB,CAAC,EAAE,MAAM,CAAA;CAC9B;AAED,MAAM,WAAW,0BAA0B;IACzC,eAAe,EAAE,OAAO,CAAA;IACxB,UAAU,EAAE,MAAM,CAAA;IAClB,OAAO,EAAE;QACP,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;QACtB,cAAc,EAAE,MAAM,CAAA;QACtB,YAAY,EAAE,MAAM,CAAA;QACpB,oBAAoB,EAAE,MAAM,CAAA;KAC7B,CAAA;CACF;AA2BD;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CACtC,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,GAAG,EACX,MAAM,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,GAC3C,0BAA0B,CA+D5B"}
|
package/dist/types/types.d.ts
CHANGED
|
@@ -32,6 +32,14 @@ export interface FaceDetectionEngineOptions {
|
|
|
32
32
|
tensorflow_wasm_path?: string;
|
|
33
33
|
/** TensorFlow 后端选择 */
|
|
34
34
|
tensorflow_backend?: 'auto' | 'webgl' | 'wasm';
|
|
35
|
+
/** 调试模式 */
|
|
36
|
+
debug_mode?: boolean;
|
|
37
|
+
/** 调试日志最低级别(默认 'info') */
|
|
38
|
+
debug_log_level?: 'info' | 'warn' | 'error';
|
|
39
|
+
/** 调试日志阶段过滤(默认全部)- 可选择特定阶段 */
|
|
40
|
+
debug_log_stages?: string[];
|
|
41
|
+
/** 调试日志节流间隔(毫秒,默认 0 表示不节流) */
|
|
42
|
+
debug_log_throttle?: number;
|
|
35
43
|
/** 视频流建议分辨率宽度(默认 1920) */
|
|
36
44
|
detect_video_ideal_width?: number;
|
|
37
45
|
/** 视频流建议分辨率高度(默认 1080) */
|
|
@@ -40,10 +48,6 @@ export interface FaceDetectionEngineOptions {
|
|
|
40
48
|
detect_video_mirror?: boolean;
|
|
41
49
|
/** 加载视频流的超时时间(毫秒,默认 5000) */
|
|
42
50
|
detect_video_load_timeout?: number;
|
|
43
|
-
/** 检测帧之间的延迟(毫秒,默认 100) */
|
|
44
|
-
detect_frame_delay?: number;
|
|
45
|
-
/** 错误后重试前的延迟(毫秒,默认 200) */
|
|
46
|
-
detect_error_retry_delay?: number;
|
|
47
51
|
/** 要采集的静默检测次数(默认 3) */
|
|
48
52
|
collect_min_collect_count?: number;
|
|
49
53
|
/** 最小人脸尺寸比例(默认 0.5) */
|
|
@@ -68,56 +72,6 @@ export interface FaceDetectionEngineOptions {
|
|
|
68
72
|
action_liveness_verify_timeout?: number;
|
|
69
73
|
/** 最小嘴部张开百分比(默认 0.2) */
|
|
70
74
|
action_liveness_min_mouth_open_percent?: number;
|
|
71
|
-
/** 通过活体检查的最小运动分数(0-1,默认 0.15) */
|
|
72
|
-
motion_liveness_min_motion_score?: number;
|
|
73
|
-
/** 自然运动的最小关键点方差(0-1,默认 0.02) */
|
|
74
|
-
motion_liveness_min_keypoint_variance?: number;
|
|
75
|
-
/** 用于运动分析的帧缓冲区数量(默认 5) */
|
|
76
|
-
motion_liveness_frame_buffer_size?: number;
|
|
77
|
-
/** 眨眼检测的眼睛长宽比阈值(默认 0.15) */
|
|
78
|
-
motion_liveness_eye_aspect_ratio_threshold?: number;
|
|
79
|
-
/** 光流和关键点方差一致性阈值 (0-1,默认 0.3) - 防止照片微动 */
|
|
80
|
-
motion_liveness_motion_consistency_threshold?: number;
|
|
81
|
-
/** 最小光流幅度阈值 - 照片几乎无光流 (0-1,默认 0.02) */
|
|
82
|
-
motion_liveness_min_optical_flow_threshold?: number;
|
|
83
|
-
/** 是否启用严格照片检测模式(默认 false) */
|
|
84
|
-
motion_liveness_strict_photo_detection?: boolean;
|
|
85
|
-
/** 屏幕采集的置信度阈值(0-1,默认 0.7) */
|
|
86
|
-
screen_capture_confidence_threshold?: number;
|
|
87
|
-
/** 屏幕采集检测策略(默认 'adaptive') */
|
|
88
|
-
screen_capture_detection_strategy?: 'fastest' | 'fast' | 'accurate' | 'adaptive';
|
|
89
|
-
/** 综合莫尔纹置信度阈值(0-1,默认 0.65) */
|
|
90
|
-
screen_moire_pattern_threshold?: number;
|
|
91
|
-
/** 是否启用 DCT 分析(默认 true) */
|
|
92
|
-
screen_moire_pattern_enable_dct?: boolean;
|
|
93
|
-
/** 是否启用边缘检测(默认 true) */
|
|
94
|
-
screen_moire_pattern_enable_edge_detection?: boolean;
|
|
95
|
-
/** 色彩饱和度阈值(0-100%,屏幕图像通常 < 40%,默认 40) */
|
|
96
|
-
screen_color_saturation_threshold?: number;
|
|
97
|
-
/** RGB通道相关性阈值(0-1,屏幕通常 > 0.85,默认 0.75) */
|
|
98
|
-
screen_color_rgb_correlation_threshold?: number;
|
|
99
|
-
/** 像素值熵阈值(0-8,屏幕通常 < 6.5,默认 6.5) */
|
|
100
|
-
screen_color_pixel_entropy_threshold?: number;
|
|
101
|
-
/** 梯度平滑性阈值(0-1,屏幕通常 > 0.7,默认 0.7) */
|
|
102
|
-
screen_color_gradient_smoothness_threshold?: number;
|
|
103
|
-
/** 综合置信度阈值(0-1,用于判定是否为屏幕拍摄,默认 0.65) */
|
|
104
|
-
screen_color_confidence_threshold?: number;
|
|
105
|
-
/** 低频段开始位置(相对于频谱长度的百分比,默认 0.15) */
|
|
106
|
-
screen_rgb_low_freq_start_percent?: number;
|
|
107
|
-
/** 低频段结束位置(相对于频谱长度的百分比,默认 0.35) */
|
|
108
|
-
screen_rgb_low_freq_end_percent?: number;
|
|
109
|
-
/** 能量比归一化因子(默认 10) */
|
|
110
|
-
screen_rgb_energy_ratio_normalization_factor?: number;
|
|
111
|
-
/** 通道均值差异的归一化因子(默认 50) */
|
|
112
|
-
screen_rgb_channel_difference_normalization_factor?: number;
|
|
113
|
-
/** RGB 周期性能量权重(默认 0.40) */
|
|
114
|
-
screen_rgb_energy_score_weight?: number;
|
|
115
|
-
/** RGB 通道不同步程度权重(默认 0.40) */
|
|
116
|
-
screen_rgb_asymmetry_score_weight?: number;
|
|
117
|
-
/** 通道均值差异权重(默认 0.20) */
|
|
118
|
-
screen_rgb_difference_factor_weight?: number;
|
|
119
|
-
/** RGB 屏幕拍摄的置信度阈值(默认 0.65) */
|
|
120
|
-
screen_rgb_confidence_threshold?: number;
|
|
121
75
|
}
|
|
122
76
|
/**
|
|
123
77
|
* 与默认值合并后的已解析配置
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAI7F,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAA;IACvB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,2BAA2B,EAAE,OAAO,CAAA;IACpC,6BAA6B;IAC7B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,6BAA6B;IAC7B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,eAAe;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,2BAA2B;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,sBAAsB;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/types.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,oBAAoB,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AAI7F,MAAM,WAAW,mBAAmB;IAClC,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAA;IACrB,6BAA6B;IAC7B,eAAe,EAAE,MAAM,CAAA;IACvB,2BAA2B;IAC3B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,2BAA2B;IAC3B,2BAA2B,EAAE,OAAO,CAAA;IACpC,6BAA6B;IAC7B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,6BAA6B;IAC7B,sBAAsB,EAAE,MAAM,CAAA;IAC9B,4BAA4B;IAC5B,cAAc,EAAE,MAAM,CAAA;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,0BAA0B;IACzC,eAAe;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,2BAA2B;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,sBAAsB;IACtB,kBAAkB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,MAAM,CAAA;IAC9C,WAAW;IACX,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,0BAA0B;IAC1B,eAAe,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAC3C,8BAA8B;IAC9B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,8BAA8B;IAC9B,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAE3B,0BAA0B;IAC1B,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,0BAA0B;IAC1B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,sBAAsB;IACtB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,6BAA6B;IAC7B,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAElC,uBAAuB;IACvB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,uBAAuB;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,uBAAuB;IACvB,sBAAsB,CAAC,EAAE,MAAM,CAAA;IAC/B,sBAAsB;IACtB,wBAAwB,CAAC,EAAE,MAAM,CAAA;IACjC,qBAAqB;IACrB,yBAAyB,CAAC,EAAE,MAAM,CAAA;IAClC,cAAc;IACd,6BAA6B,CAAC,EAAE,mBAAmB,CAAA;IACnD,aAAa;IACb,8BAA8B,CAAC,EAAE,oBAAoB,CAAA;IAErD,4CAA4C;IAC5C,2BAA2B,CAAC,EAAE,cAAc,EAAE,CAAA;IAC9C,yBAAyB;IACzB,4BAA4B,CAAC,EAAE,MAAM,CAAA;IACrC,2BAA2B;IAC3B,gCAAgC,CAAC,EAAE,OAAO,CAAA;IAC1C,4BAA4B;IAC5B,8BAA8B,CAAC,EAAE,MAAM,CAAA;IACvC,wBAAwB;IACxB,sCAAsC,CAAC,EAAE,MAAM,CAAA;CAEhD;AAED;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,CAAC,0BAA0B,CAAC,CAAA;AAIxE,MAAM,WAAW,uBAAuB;IACtC,gBAAgB;IAChB,OAAO,EAAE,OAAO,CAAA;IAChB,gBAAgB;IAChB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,mBAAmB;IACnB,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,kBAAkB;IAClB,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,MAAM,EAAE,cAAc,CAAA;IACtB,MAAM,EAAE,oBAAoB,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,iBAAiB;IACjB,MAAM,EAAE,OAAO,CAAA;IACf,WAAW;IACX,IAAI,EAAE,aAAa,CAAA;IACnB,WAAW;IACX,OAAO,EAAE,MAAM,CAAA;IACf,eAAe;IACf,SAAS,EAAE,MAAM,CAAA;IACjB,mBAAmB;IACnB,SAAS,EAAE,MAAM,CAAA;IACjB,oBAAoB;IACpB,WAAW,EAAE,MAAM,CAAA;IACnB,kBAAkB;IAClB,YAAY,EAAE,MAAM,CAAA;IACpB,gBAAgB;IAChB,WAAW,EAAE,MAAM,CAAA;IACnB,mBAAmB;IACnB,gBAAgB,EAAE,MAAM,CAAA;IACxB,eAAe;IACf,UAAU,EAAE,MAAM,CAAA;IAClB,mBAAmB;IACnB,gBAAgB,EAAE,MAAM,CAAA;CACzB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,eAAe;IACf,OAAO,EAAE,OAAO,CAAA;IAChB,iBAAiB;IACjB,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc;IACd,iBAAiB,EAAE,MAAM,CAAA;IACzB,cAAc;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,kBAAkB;IAClB,gBAAgB,EAAE,MAAM,CAAA;IACxB,oBAAoB;IACpB,cAAc,EAAE,MAAM,GAAG,IAAI,CAAA;IAC7B,qBAAqB;IACrB,aAAa,EAAE,MAAM,GAAG,IAAI,CAAA;CAC7B;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW;IACX,IAAI,EAAE,SAAS,CAAA;IACf,WAAW;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,WAAW;IACX,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAA;IAChC,WAAW;IACX,KAAK,EAAE,MAAM,CAAA;IACb,WAAW;IACX,OAAO,EAAE,MAAM,CAAA;IACf,WAAW;IACX,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAA;IAC7B,UAAU;IACV,SAAS,EAAE,MAAM,CAAA;CAClB;AAID,MAAM,MAAM,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,KAAK,IAAI,CAAA;AAEhD,MAAM,WAAW,YAAY;IAC3B,EAAE,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IAClF,GAAG,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACnF,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;IACpF,IAAI,CAAC,CAAC,SAAS,MAAM,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,GAAG,IAAI,CAAA;CAClE;AAED,MAAM,WAAW,QAAQ;IACvB,iBAAiB,EAAE,uBAAuB,CAAA;IAC1C,eAAe,EAAE,qBAAqB,CAAA;IACtC,iBAAiB,EAAE,uBAAuB,CAAA;IAC1C,iBAAiB,EAAE,uBAAuB,CAAA;IAC1C,gBAAgB,EAAE,sBAAsB,CAAA;IACxC,gBAAgB,EAAE,sBAAsB,CAAA;CACzC"}
|