id-scanner-lib 1.3.3 → 1.6.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.
- package/README.md +324 -410
- package/dist/id-scanner-lib.esm.js +4826 -0
- package/dist/id-scanner-lib.esm.js.map +1 -0
- package/dist/id-scanner-lib.js +4858 -0
- package/dist/id-scanner-lib.js.map +1 -0
- package/dist/types/browser-image-compression.d.ts +19 -0
- package/dist/types/tesseract.d.ts +280 -0
- package/package.json +89 -78
- package/src/core/base-module.ts +78 -0
- package/src/core/camera-manager.ts +813 -0
- package/src/core/config.ts +305 -0
- package/src/core/errors.ts +174 -0
- package/src/core/event-emitter.test.ts +42 -0
- package/src/core/event-emitter.ts +110 -0
- package/src/core/loading-state.test.ts +67 -0
- package/src/core/loading-state.ts +156 -0
- package/src/core/logger.test.ts +49 -0
- package/src/core/logger.ts +549 -0
- package/src/core/module-manager.ts +163 -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 +236 -0
- package/src/index.ts +117 -939
- 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 +988 -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/{id-recognition → modules/id-card}/anti-fake-detector.ts +274 -240
- package/src/modules/id-card/id-card-detector.ts +474 -0
- package/src/modules/id-card/index.ts +425 -0
- package/src/{id-recognition → modules/id-card}/ocr-processor.ts +149 -92
- 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 +231 -0
- package/src/modules/qrcode/types.ts +169 -0
- package/src/types/common.test.ts +99 -0
- package/src/types/common.ts +166 -0
- package/src/types/tesseract.d.ts +265 -22
- package/src/utils/camera.test.ts +30 -0
- package/src/utils/camera.ts +4 -1
- package/src/utils/error-handler.test.ts +137 -0
- package/src/utils/error-handler.ts +110 -0
- package/src/utils/image-processing.ts +68 -49
- package/src/utils/index.test.ts +186 -0
- package/src/utils/index.ts +429 -0
- package/src/utils/performance.ts +168 -131
- package/src/utils/resource-manager.ts +65 -146
- package/src/utils/retry.test.ts +142 -0
- package/src/utils/retry.ts +282 -0
- package/src/utils/types.ts +90 -2
- package/src/utils/utils.test.ts +171 -0
- 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 -11349
- package/dist/id-scanner-core.js +0 -11361
- package/dist/id-scanner-core.min.js +0 -1
- package/dist/id-scanner-ocr.esm.js +0 -2319
- package/dist/id-scanner-ocr.js +0 -2328
- package/dist/id-scanner-ocr.min.js +0 -1
- package/dist/id-scanner-qr.esm.js +0 -1296
- package/dist/id-scanner-qr.js +0 -1305
- package/dist/id-scanner-qr.min.js +0 -1
- package/dist/id-scanner.js +0 -4561
- package/dist/id-scanner.min.js +0 -1
- package/src/core.ts +0 -138
- package/src/demo/demo.ts +0 -204
- package/src/id-recognition/data-extractor.ts +0 -262
- package/src/id-recognition/id-detector.ts +0 -510
- 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,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 加载状态管理
|
|
3
|
+
* @description 提供模块加载状态跟踪功能
|
|
4
|
+
* @module core/loading-state
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
import { EventEmitter } from './event-emitter';
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* 加载状态类型
|
|
11
|
+
*/
|
|
12
|
+
export enum LoadingState {
|
|
13
|
+
/** 空闲 */
|
|
14
|
+
IDLE = 'idle',
|
|
15
|
+
/** 加载中 */
|
|
16
|
+
LOADING = 'loading',
|
|
17
|
+
/** 就绪 */
|
|
18
|
+
READY = 'ready',
|
|
19
|
+
/** 错误 */
|
|
20
|
+
ERROR = 'error',
|
|
21
|
+
/** 已释放 */
|
|
22
|
+
DISPOSED = 'disposed'
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* 加载进度信息
|
|
27
|
+
*/
|
|
28
|
+
export interface LoadingProgress {
|
|
29
|
+
/** 当前状态 */
|
|
30
|
+
state: LoadingState;
|
|
31
|
+
/** 已加载的模型 */
|
|
32
|
+
loadedModels: string[];
|
|
33
|
+
/** 正在加载的模型 */
|
|
34
|
+
loadingModel?: string;
|
|
35
|
+
/** 进度百分比 (0-100) */
|
|
36
|
+
progress: number;
|
|
37
|
+
/** 错误信息 */
|
|
38
|
+
error?: string;
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* 加载状态管理器
|
|
43
|
+
* 用于跟踪和管理模块的加载状态
|
|
44
|
+
*/
|
|
45
|
+
export class LoadingStateManager extends EventEmitter {
|
|
46
|
+
private state: LoadingState = LoadingState.IDLE;
|
|
47
|
+
private loadedModels: Set<string> = new Set();
|
|
48
|
+
private loadingModel?: string;
|
|
49
|
+
private totalModels: number = 0;
|
|
50
|
+
private error?: string;
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* 开始加载
|
|
54
|
+
* @param totalModels 总模型数
|
|
55
|
+
*/
|
|
56
|
+
startLoading(totalModels: number): void {
|
|
57
|
+
this.totalModels = totalModels;
|
|
58
|
+
this.state = LoadingState.LOADING;
|
|
59
|
+
this.error = undefined;
|
|
60
|
+
this.emit('stateChange', this.getProgress());
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* 模型开始加载
|
|
65
|
+
* @param modelName 模型名称
|
|
66
|
+
*/
|
|
67
|
+
startModelLoading(modelName: string): void {
|
|
68
|
+
this.loadingModel = modelName;
|
|
69
|
+
this.emit('progress', this.getProgress());
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/**
|
|
73
|
+
* 模型加载完成
|
|
74
|
+
* @param modelName 模型名称
|
|
75
|
+
*/
|
|
76
|
+
completeModelLoading(modelName: string): void {
|
|
77
|
+
this.loadedModels.add(modelName);
|
|
78
|
+
this.loadingModel = undefined;
|
|
79
|
+
this.emit('progress', this.getProgress());
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/**
|
|
83
|
+
* 加载完成
|
|
84
|
+
*/
|
|
85
|
+
complete(): void {
|
|
86
|
+
this.state = LoadingState.READY;
|
|
87
|
+
this.totalModels = 0;
|
|
88
|
+
this.emit('stateChange', this.getProgress());
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
/**
|
|
92
|
+
* 加载失败
|
|
93
|
+
* @param error 错误信息
|
|
94
|
+
*/
|
|
95
|
+
fail(error: string): void {
|
|
96
|
+
this.state = LoadingState.ERROR;
|
|
97
|
+
this.error = error;
|
|
98
|
+
this.emit('error', { error, progress: this.getProgress() });
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* 释放
|
|
103
|
+
*/
|
|
104
|
+
dispose(): void {
|
|
105
|
+
this.state = LoadingState.DISPOSED;
|
|
106
|
+
this.loadedModels.clear();
|
|
107
|
+
this.totalModels = 0;
|
|
108
|
+
this.error = undefined;
|
|
109
|
+
this.emit('stateChange', this.getProgress());
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
/**
|
|
113
|
+
* 获取当前进度
|
|
114
|
+
*/
|
|
115
|
+
getProgress(): LoadingProgress {
|
|
116
|
+
const progress = this.totalModels > 0
|
|
117
|
+
? Math.round((this.loadedModels.size / this.totalModels) * 100)
|
|
118
|
+
: 0;
|
|
119
|
+
|
|
120
|
+
return {
|
|
121
|
+
state: this.state,
|
|
122
|
+
loadedModels: Array.from(this.loadedModels),
|
|
123
|
+
loadingModel: this.loadingModel,
|
|
124
|
+
progress,
|
|
125
|
+
error: this.error
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* 获取当前状态
|
|
131
|
+
*/
|
|
132
|
+
getState(): LoadingState {
|
|
133
|
+
return this.state;
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
/**
|
|
137
|
+
* 是否已就绪
|
|
138
|
+
*/
|
|
139
|
+
isReady(): boolean {
|
|
140
|
+
return this.state === LoadingState.READY;
|
|
141
|
+
}
|
|
142
|
+
|
|
143
|
+
/**
|
|
144
|
+
* 是否有错误
|
|
145
|
+
*/
|
|
146
|
+
hasError(): boolean {
|
|
147
|
+
return this.state === LoadingState.ERROR;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* 创建加载状态管理器
|
|
153
|
+
*/
|
|
154
|
+
export function createLoadingStateManager(): LoadingStateManager {
|
|
155
|
+
return new LoadingStateManager();
|
|
156
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file Logger 测试
|
|
3
|
+
* @description 测试日志系统
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
import { Logger, LogLevel } from './logger';
|
|
7
|
+
|
|
8
|
+
describe('Logger', () => {
|
|
9
|
+
let logger: Logger;
|
|
10
|
+
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
logger = Logger.getInstance();
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
it('should get singleton instance', () => {
|
|
16
|
+
const logger2 = Logger.getInstance();
|
|
17
|
+
expect(logger).toBe(logger2);
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
it('should log debug message', () => {
|
|
21
|
+
expect(() => {
|
|
22
|
+
logger.debug('Test', 'Debug message');
|
|
23
|
+
}).not.toThrow();
|
|
24
|
+
});
|
|
25
|
+
|
|
26
|
+
it('should log info message', () => {
|
|
27
|
+
expect(() => {
|
|
28
|
+
logger.info('Test', 'Info message');
|
|
29
|
+
}).not.toThrow();
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('should log warn message', () => {
|
|
33
|
+
expect(() => {
|
|
34
|
+
logger.warn('Test', 'Warning message');
|
|
35
|
+
}).not.toThrow();
|
|
36
|
+
});
|
|
37
|
+
|
|
38
|
+
it('should log error message', () => {
|
|
39
|
+
expect(() => {
|
|
40
|
+
logger.error('Test', 'Error message', new Error('test error'));
|
|
41
|
+
}).not.toThrow();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('should set log level', () => {
|
|
45
|
+
expect(() => {
|
|
46
|
+
logger.setLevel(LogLevel.WARN);
|
|
47
|
+
}).not.toThrow();
|
|
48
|
+
});
|
|
49
|
+
});
|