id-scanner-lib 1.3.3 → 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 -75
- 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/{id-recognition → modules/id-card}/anti-fake-detector.ts +273 -239
- 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 +230 -0
- package/src/modules/qrcode/types.ts +65 -0
- package/src/types/tesseract.d.ts +265 -22
- package/src/utils/image-processing.ts +68 -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 -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,1303 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 事件发射器
|
|
3
|
+
* @description 提供基础的事件发射和订阅功能
|
|
4
|
+
* @module core/event-emitter
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 事件处理器类型
|
|
8
|
+
*/
|
|
9
|
+
type EventHandler = (data?: any) => void;
|
|
10
|
+
/**
|
|
11
|
+
* 事件发射器基类
|
|
12
|
+
* 提供基础的事件发射和订阅功能
|
|
13
|
+
*/
|
|
14
|
+
declare class EventEmitter {
|
|
15
|
+
/** 事件处理器映射 */
|
|
16
|
+
private eventHandlers;
|
|
17
|
+
/**
|
|
18
|
+
* 订阅事件
|
|
19
|
+
* @param eventName 事件名称
|
|
20
|
+
* @param handler 事件处理器
|
|
21
|
+
*/
|
|
22
|
+
on(eventName: string, handler: EventHandler): void;
|
|
23
|
+
/**
|
|
24
|
+
* 取消订阅事件
|
|
25
|
+
* @param eventName 事件名称
|
|
26
|
+
* @param handler 事件处理器,如果不提供则移除该事件的所有处理器
|
|
27
|
+
*/
|
|
28
|
+
off(eventName: string, handler?: EventHandler): void;
|
|
29
|
+
/**
|
|
30
|
+
* 订阅事件,但只触发一次
|
|
31
|
+
* @param eventName 事件名称
|
|
32
|
+
* @param handler 事件处理器
|
|
33
|
+
*/
|
|
34
|
+
once(eventName: string, handler: EventHandler): void;
|
|
35
|
+
/**
|
|
36
|
+
* 发射事件
|
|
37
|
+
* @param eventName 事件名称
|
|
38
|
+
* @param data 事件数据
|
|
39
|
+
*/
|
|
40
|
+
emit(eventName: string, data?: any): void;
|
|
41
|
+
/**
|
|
42
|
+
* 获取某个事件的处理器数量
|
|
43
|
+
* @param eventName 事件名称
|
|
44
|
+
*/
|
|
45
|
+
listenerCount(eventName: string): number;
|
|
46
|
+
/**
|
|
47
|
+
* 移除所有事件处理器
|
|
48
|
+
*/
|
|
49
|
+
removeAllListeners(): void;
|
|
50
|
+
/**
|
|
51
|
+
* 获取所有事件名称
|
|
52
|
+
*/
|
|
53
|
+
eventNames(): string[];
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
/**
|
|
57
|
+
* @file 日志系统
|
|
58
|
+
* @description 提供统一的日志记录与管理功能
|
|
59
|
+
* @module core/logger
|
|
60
|
+
*/
|
|
61
|
+
/**
|
|
62
|
+
* 日志级别枚举
|
|
63
|
+
*/
|
|
64
|
+
declare enum LogLevel {
|
|
65
|
+
DEBUG = "debug",
|
|
66
|
+
INFO = "info",
|
|
67
|
+
WARN = "warn",
|
|
68
|
+
ERROR = "error"
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 日志条目接口
|
|
72
|
+
*/
|
|
73
|
+
interface LogEntry {
|
|
74
|
+
/** 日志级别 */
|
|
75
|
+
level: LogLevel;
|
|
76
|
+
/** 日志标签 */
|
|
77
|
+
tag: string;
|
|
78
|
+
/** 日志消息 */
|
|
79
|
+
message: string;
|
|
80
|
+
/** 时间戳 */
|
|
81
|
+
timestamp: number;
|
|
82
|
+
/** 额外数据 */
|
|
83
|
+
data?: any;
|
|
84
|
+
/** 错误 */
|
|
85
|
+
error?: Error;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* 日志处理器接口
|
|
89
|
+
*/
|
|
90
|
+
interface LogHandler {
|
|
91
|
+
/**
|
|
92
|
+
* 处理日志条目
|
|
93
|
+
* @param entry 日志条目
|
|
94
|
+
*/
|
|
95
|
+
handle(entry: LogEntry): void;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* 控制台日志处理器
|
|
99
|
+
* 将日志输出到浏览器控制台
|
|
100
|
+
*/
|
|
101
|
+
declare class ConsoleLogHandler implements LogHandler {
|
|
102
|
+
/**
|
|
103
|
+
* 处理日志条目
|
|
104
|
+
* @param entry 日志条目
|
|
105
|
+
*/
|
|
106
|
+
handle(entry: LogEntry): void;
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* 内存日志处理器
|
|
110
|
+
* 将日志保存在内存中,用于后续分析或显示
|
|
111
|
+
*/
|
|
112
|
+
declare class MemoryLogHandler implements LogHandler {
|
|
113
|
+
/** 日志条目数组 */
|
|
114
|
+
private entries;
|
|
115
|
+
/** 最大日志条目数 */
|
|
116
|
+
private maxEntries;
|
|
117
|
+
/**
|
|
118
|
+
* 构造函数
|
|
119
|
+
* @param maxEntries 最大日志条目数,默认为1000
|
|
120
|
+
*/
|
|
121
|
+
constructor(maxEntries?: number);
|
|
122
|
+
/**
|
|
123
|
+
* 处理日志条目
|
|
124
|
+
* @param entry 日志条目
|
|
125
|
+
*/
|
|
126
|
+
handle(entry: LogEntry): void;
|
|
127
|
+
/**
|
|
128
|
+
* 获取所有日志条目
|
|
129
|
+
*/
|
|
130
|
+
getEntries(): LogEntry[];
|
|
131
|
+
/**
|
|
132
|
+
* 根据级别过滤日志条目
|
|
133
|
+
* @param level 日志级别
|
|
134
|
+
*/
|
|
135
|
+
getEntriesByLevel(level: LogLevel): LogEntry[];
|
|
136
|
+
/**
|
|
137
|
+
* 根据标签过滤日志条目
|
|
138
|
+
* @param tag 日志标签
|
|
139
|
+
*/
|
|
140
|
+
getEntriesByTag(tag: string): LogEntry[];
|
|
141
|
+
/**
|
|
142
|
+
* 清空日志
|
|
143
|
+
*/
|
|
144
|
+
clear(): void;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* 远程日志处理器
|
|
148
|
+
* 将日志发送到远程服务器
|
|
149
|
+
*/
|
|
150
|
+
declare class RemoteLogHandler implements LogHandler {
|
|
151
|
+
/** 远程服务器URL */
|
|
152
|
+
private endpoint;
|
|
153
|
+
/** 批量发送的队列 */
|
|
154
|
+
private queue;
|
|
155
|
+
/** 最大队列长度 */
|
|
156
|
+
private maxQueueSize;
|
|
157
|
+
/** 发送间隔(毫秒) */
|
|
158
|
+
private flushInterval;
|
|
159
|
+
/** 定时发送的计时器ID */
|
|
160
|
+
private timerId;
|
|
161
|
+
/**
|
|
162
|
+
* 构造函数
|
|
163
|
+
* @param endpoint 远程服务器URL
|
|
164
|
+
* @param maxQueueSize 最大队列长度,默认为100
|
|
165
|
+
* @param flushInterval 发送间隔(毫秒),默认为5000
|
|
166
|
+
*/
|
|
167
|
+
constructor(endpoint: string, maxQueueSize?: number, flushInterval?: number);
|
|
168
|
+
/**
|
|
169
|
+
* 处理日志条目
|
|
170
|
+
* @param entry 日志条目
|
|
171
|
+
*/
|
|
172
|
+
handle(entry: LogEntry): void;
|
|
173
|
+
/**
|
|
174
|
+
* 发送队列中的日志
|
|
175
|
+
*/
|
|
176
|
+
flush(): void;
|
|
177
|
+
/**
|
|
178
|
+
* 开始定时发送
|
|
179
|
+
*/
|
|
180
|
+
startTimer(): void;
|
|
181
|
+
/**
|
|
182
|
+
* 停止定时发送
|
|
183
|
+
*/
|
|
184
|
+
stopTimer(): void;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* 日志管理类
|
|
188
|
+
* 中央日志管理器,提供统一的日志记录接口
|
|
189
|
+
*/
|
|
190
|
+
declare class Logger {
|
|
191
|
+
/** 单例实例 */
|
|
192
|
+
private static instance;
|
|
193
|
+
/** 配置管理器 */
|
|
194
|
+
private config;
|
|
195
|
+
/** 日志处理器 */
|
|
196
|
+
private handlers;
|
|
197
|
+
/** 默认标签 */
|
|
198
|
+
private defaultTag;
|
|
199
|
+
/** 日志级别 */
|
|
200
|
+
private logLevel;
|
|
201
|
+
/**
|
|
202
|
+
* 私有构造函数,防止直接实例化
|
|
203
|
+
*/
|
|
204
|
+
private constructor();
|
|
205
|
+
/**
|
|
206
|
+
* 获取单例实例
|
|
207
|
+
*/
|
|
208
|
+
static getInstance(): Logger;
|
|
209
|
+
/**
|
|
210
|
+
* 添加日志处理器
|
|
211
|
+
* @param handler 日志处理器
|
|
212
|
+
*/
|
|
213
|
+
addHandler(handler: LogHandler): void;
|
|
214
|
+
/**
|
|
215
|
+
* 移除日志处理器
|
|
216
|
+
* @param handler 要移除的处理器
|
|
217
|
+
*/
|
|
218
|
+
removeHandler(handler: LogHandler): void;
|
|
219
|
+
/**
|
|
220
|
+
* 移除所有处理器
|
|
221
|
+
*/
|
|
222
|
+
clearHandlers(): void;
|
|
223
|
+
/**
|
|
224
|
+
* 设置默认标签
|
|
225
|
+
* @param tag 默认标签
|
|
226
|
+
*/
|
|
227
|
+
setDefaultTag(tag: string): void;
|
|
228
|
+
/**
|
|
229
|
+
* 记录调试级别日志
|
|
230
|
+
* @param tag 标签
|
|
231
|
+
* @param message 消息
|
|
232
|
+
* @param error 错误
|
|
233
|
+
*/
|
|
234
|
+
debug(tag: string, message: string, error?: Error): void;
|
|
235
|
+
/**
|
|
236
|
+
* 记录信息级别日志
|
|
237
|
+
* @param tag 标签
|
|
238
|
+
* @param message 消息
|
|
239
|
+
* @param error 错误
|
|
240
|
+
*/
|
|
241
|
+
info(tag: string, message: string, error?: Error): void;
|
|
242
|
+
/**
|
|
243
|
+
* 记录警告级别日志
|
|
244
|
+
* @param tag 标签
|
|
245
|
+
* @param message 消息
|
|
246
|
+
* @param error 错误
|
|
247
|
+
*/
|
|
248
|
+
warn(tag: string, message: string, error?: Error): void;
|
|
249
|
+
/**
|
|
250
|
+
* 记录错误级别日志
|
|
251
|
+
* @param tag 标签
|
|
252
|
+
* @param message 消息
|
|
253
|
+
* @param error 错误
|
|
254
|
+
*/
|
|
255
|
+
error(tag: string, message: string, error?: Error): void;
|
|
256
|
+
/**
|
|
257
|
+
* 创建标记了特定标签的日志记录器
|
|
258
|
+
* @param tag 标签
|
|
259
|
+
*/
|
|
260
|
+
getTaggedLogger(tag: string): TaggedLogger;
|
|
261
|
+
/**
|
|
262
|
+
* 记录日志
|
|
263
|
+
* @param level 日志级别
|
|
264
|
+
* @param tag 标签
|
|
265
|
+
* @param message 消息
|
|
266
|
+
* @param error 错误
|
|
267
|
+
*/
|
|
268
|
+
private log;
|
|
269
|
+
/**
|
|
270
|
+
* 控制台输出
|
|
271
|
+
* @param entry 日志条目
|
|
272
|
+
*/
|
|
273
|
+
private consoleOutput;
|
|
274
|
+
/**
|
|
275
|
+
* 获取日志级别值
|
|
276
|
+
* @param level 日志级别
|
|
277
|
+
*/
|
|
278
|
+
private getLevelValue;
|
|
279
|
+
/**
|
|
280
|
+
* 设置日志级别
|
|
281
|
+
* @param level 日志级别
|
|
282
|
+
*/
|
|
283
|
+
setLevel(level: LogLevel | string): void;
|
|
284
|
+
/**
|
|
285
|
+
* 获取当前日志级别
|
|
286
|
+
* @returns 当前日志级别
|
|
287
|
+
*/
|
|
288
|
+
getLevel(): LogLevel;
|
|
289
|
+
}
|
|
290
|
+
/**
|
|
291
|
+
* 带标签的日志记录器
|
|
292
|
+
* 提供特定标签的简易日志接口
|
|
293
|
+
*/
|
|
294
|
+
declare class TaggedLogger {
|
|
295
|
+
/** 所属的主日志记录器 */
|
|
296
|
+
private logger;
|
|
297
|
+
/** 标签 */
|
|
298
|
+
private tag;
|
|
299
|
+
/**
|
|
300
|
+
* 构造函数
|
|
301
|
+
* @param logger 所属的主日志记录器
|
|
302
|
+
* @param tag 标签
|
|
303
|
+
*/
|
|
304
|
+
constructor(logger: Logger, tag: string);
|
|
305
|
+
/**
|
|
306
|
+
* 记录调试级别日志
|
|
307
|
+
* @param message 消息
|
|
308
|
+
* @param error 错误
|
|
309
|
+
*/
|
|
310
|
+
debug(message: string, error?: Error): void;
|
|
311
|
+
/**
|
|
312
|
+
* 记录信息级别日志
|
|
313
|
+
* @param message 消息
|
|
314
|
+
* @param error 错误
|
|
315
|
+
*/
|
|
316
|
+
info(message: string, error?: Error): void;
|
|
317
|
+
/**
|
|
318
|
+
* 记录警告级别日志
|
|
319
|
+
* @param message 消息
|
|
320
|
+
* @param error 错误
|
|
321
|
+
*/
|
|
322
|
+
warn(message: string, error?: Error): void;
|
|
323
|
+
/**
|
|
324
|
+
* 记录错误级别日志
|
|
325
|
+
* @param message 消息
|
|
326
|
+
* @param error 错误
|
|
327
|
+
*/
|
|
328
|
+
error(message: string, error?: Error): void;
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
/**
|
|
332
|
+
* @file 模块管理器
|
|
333
|
+
* @description 统一管理库的各功能模块,提供模块的注册、初始化和卸载功能
|
|
334
|
+
* @module core/module-manager
|
|
335
|
+
*/
|
|
336
|
+
|
|
337
|
+
/**
|
|
338
|
+
* 模块接口
|
|
339
|
+
* 所有功能模块必须实现此接口
|
|
340
|
+
*/
|
|
341
|
+
interface Module {
|
|
342
|
+
/** 模块名称 */
|
|
343
|
+
name: string;
|
|
344
|
+
/** 模块版本 */
|
|
345
|
+
version: string;
|
|
346
|
+
/** 模块是否已初始化 */
|
|
347
|
+
isInitialized: boolean;
|
|
348
|
+
/** 初始化模块 */
|
|
349
|
+
initialize(): Promise<void>;
|
|
350
|
+
/** 释放模块资源 */
|
|
351
|
+
dispose(): Promise<void>;
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* 模块配置接口
|
|
355
|
+
*/
|
|
356
|
+
interface ModuleOptions {
|
|
357
|
+
/** 是否启用该模块 */
|
|
358
|
+
enabled?: boolean;
|
|
359
|
+
/** 模块特定配置 */
|
|
360
|
+
[key: string]: any;
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* 模块管理器类
|
|
364
|
+
* 负责管理所有功能模块的生命周期
|
|
365
|
+
*/
|
|
366
|
+
declare class ModuleManager extends EventEmitter {
|
|
367
|
+
private static instance;
|
|
368
|
+
private modules;
|
|
369
|
+
private logger;
|
|
370
|
+
private initialized;
|
|
371
|
+
/**
|
|
372
|
+
* 获取模块管理器单例
|
|
373
|
+
*/
|
|
374
|
+
static getInstance(): ModuleManager;
|
|
375
|
+
/**
|
|
376
|
+
* 私有构造函数,确保单例模式
|
|
377
|
+
*/
|
|
378
|
+
private constructor();
|
|
379
|
+
/**
|
|
380
|
+
* 注册模块
|
|
381
|
+
* @param module 要注册的模块
|
|
382
|
+
* @returns 模块管理器实例,支持链式调用
|
|
383
|
+
*/
|
|
384
|
+
register(module: Module): ModuleManager;
|
|
385
|
+
/**
|
|
386
|
+
* 获取模块
|
|
387
|
+
* @param name 模块名称
|
|
388
|
+
* @returns 模块实例
|
|
389
|
+
*/
|
|
390
|
+
getModule<T extends Module>(name: string): T | undefined;
|
|
391
|
+
/**
|
|
392
|
+
* 初始化所有注册的模块
|
|
393
|
+
*/
|
|
394
|
+
initialize(): Promise<void>;
|
|
395
|
+
/**
|
|
396
|
+
* 卸载所有模块并释放资源
|
|
397
|
+
*/
|
|
398
|
+
dispose(): Promise<void>;
|
|
399
|
+
/**
|
|
400
|
+
* 获取所有已注册的模块名称
|
|
401
|
+
*/
|
|
402
|
+
getRegisteredModules(): string[];
|
|
403
|
+
/**
|
|
404
|
+
* 检查模块是否已注册
|
|
405
|
+
* @param name 模块名称
|
|
406
|
+
*/
|
|
407
|
+
hasModule(name: string): boolean;
|
|
408
|
+
}
|
|
409
|
+
|
|
410
|
+
/**
|
|
411
|
+
* @file 基础模块
|
|
412
|
+
* @description 提供基础模块实现,作为所有功能模块的基类
|
|
413
|
+
* @module core/base-module
|
|
414
|
+
*/
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* 基础模块类
|
|
418
|
+
* 提供模块的基本功能和生命周期管理
|
|
419
|
+
*/
|
|
420
|
+
declare abstract class BaseModule extends EventEmitter implements Module {
|
|
421
|
+
/** 模块名称 */
|
|
422
|
+
abstract readonly name: string;
|
|
423
|
+
/** 模块版本 */
|
|
424
|
+
readonly version: string;
|
|
425
|
+
/** 模块是否已初始化 */
|
|
426
|
+
protected _isInitialized: boolean;
|
|
427
|
+
/** 日志工具 */
|
|
428
|
+
protected logger: Logger;
|
|
429
|
+
/**
|
|
430
|
+
* 构造函数
|
|
431
|
+
*/
|
|
432
|
+
constructor();
|
|
433
|
+
/**
|
|
434
|
+
* 获取模块是否已初始化
|
|
435
|
+
*/
|
|
436
|
+
get isInitialized(): boolean;
|
|
437
|
+
/**
|
|
438
|
+
* 初始化模块
|
|
439
|
+
* 子类必须实现此方法
|
|
440
|
+
*/
|
|
441
|
+
abstract initialize(): Promise<void>;
|
|
442
|
+
/**
|
|
443
|
+
* 释放模块资源
|
|
444
|
+
* 子类可以覆盖此方法以添加额外的资源释放逻辑
|
|
445
|
+
*/
|
|
446
|
+
dispose(): Promise<void>;
|
|
447
|
+
/**
|
|
448
|
+
* 检查模块是否已初始化,如果未初始化则抛出错误
|
|
449
|
+
*/
|
|
450
|
+
protected ensureInitialized(): void;
|
|
451
|
+
}
|
|
452
|
+
|
|
453
|
+
/**
|
|
454
|
+
* @file 身份证模块类型定义
|
|
455
|
+
* @description 身份证模块相关的类型和接口定义
|
|
456
|
+
* @module modules/id-card/types
|
|
457
|
+
*/
|
|
458
|
+
/**
|
|
459
|
+
* 身份证类型枚举
|
|
460
|
+
*/
|
|
461
|
+
declare enum IDCardType {
|
|
462
|
+
/** 第二代居民身份证正面 */
|
|
463
|
+
FRONT = "front",
|
|
464
|
+
/** 第二代居民身份证背面 */
|
|
465
|
+
BACK = "back",
|
|
466
|
+
/** 第一代居民身份证 */
|
|
467
|
+
FIRST_GENERATION = "first_generation",
|
|
468
|
+
/** 临时身份证 */
|
|
469
|
+
TEMPORARY = "temporary",
|
|
470
|
+
/** 外国人永久居留证 */
|
|
471
|
+
FOREIGN_PERMANENT = "foreign_permanent",
|
|
472
|
+
/** 港澳台居民居住证 */
|
|
473
|
+
HMT_RESIDENT = "hmt_resident",
|
|
474
|
+
/** 未知类型 */
|
|
475
|
+
UNKNOWN = "unknown"
|
|
476
|
+
}
|
|
477
|
+
/**
|
|
478
|
+
* 证件边缘信息
|
|
479
|
+
*/
|
|
480
|
+
interface IDCardEdge {
|
|
481
|
+
/** 左上角坐标 */
|
|
482
|
+
topLeft: {
|
|
483
|
+
x: number;
|
|
484
|
+
y: number;
|
|
485
|
+
};
|
|
486
|
+
/** 右上角坐标 */
|
|
487
|
+
topRight: {
|
|
488
|
+
x: number;
|
|
489
|
+
y: number;
|
|
490
|
+
};
|
|
491
|
+
/** 右下角坐标 */
|
|
492
|
+
bottomRight: {
|
|
493
|
+
x: number;
|
|
494
|
+
y: number;
|
|
495
|
+
};
|
|
496
|
+
/** 左下角坐标 */
|
|
497
|
+
bottomLeft: {
|
|
498
|
+
x: number;
|
|
499
|
+
y: number;
|
|
500
|
+
};
|
|
501
|
+
}
|
|
502
|
+
/**
|
|
503
|
+
* 身份证信息
|
|
504
|
+
*/
|
|
505
|
+
interface IDCardInfo {
|
|
506
|
+
nationality?: string;
|
|
507
|
+
issuingAuthority?: string;
|
|
508
|
+
validPeriod?: string;
|
|
509
|
+
/** 身份证类型 */
|
|
510
|
+
type?: IDCardType;
|
|
511
|
+
/** 身份证边缘信息 */
|
|
512
|
+
edge?: IDCardEdge;
|
|
513
|
+
/** 姓名 */
|
|
514
|
+
name?: string;
|
|
515
|
+
/** 性别 */
|
|
516
|
+
gender?: string;
|
|
517
|
+
/** 民族 */
|
|
518
|
+
ethnicity?: string;
|
|
519
|
+
/** 出生日期,格式: YYYY-MM-DD */
|
|
520
|
+
birthDate?: string;
|
|
521
|
+
/** 地址 */
|
|
522
|
+
address?: string;
|
|
523
|
+
/** 身份证号码 */
|
|
524
|
+
idNumber?: string;
|
|
525
|
+
/** 签发机关 */
|
|
526
|
+
issueAuthority?: string;
|
|
527
|
+
/** 有效期起始日期,格式: YYYY-MM-DD */
|
|
528
|
+
validFrom?: string;
|
|
529
|
+
/** 有效期截止日期,格式: YYYY-MM-DD */
|
|
530
|
+
validTo?: string;
|
|
531
|
+
/** 相片区域坐标 */
|
|
532
|
+
photoRegion?: {
|
|
533
|
+
x: number;
|
|
534
|
+
y: number;
|
|
535
|
+
width: number;
|
|
536
|
+
height: number;
|
|
537
|
+
};
|
|
538
|
+
/** 原始身份证图像 */
|
|
539
|
+
image?: ImageData;
|
|
540
|
+
/** 置信度 */
|
|
541
|
+
confidence?: number;
|
|
542
|
+
/** 防伪检测结果 */
|
|
543
|
+
antiFake?: {
|
|
544
|
+
/** 是否通过防伪检测 */
|
|
545
|
+
passed: boolean;
|
|
546
|
+
/** 防伪检测分数 */
|
|
547
|
+
score: number;
|
|
548
|
+
/** 防伪特征检测结果 */
|
|
549
|
+
features?: {
|
|
550
|
+
/** 荧光油墨 */
|
|
551
|
+
fluorescent?: boolean;
|
|
552
|
+
/** 微缩文字 */
|
|
553
|
+
microtext?: boolean;
|
|
554
|
+
/** 光变图案 */
|
|
555
|
+
opticalVariable?: boolean;
|
|
556
|
+
/** 纹理 */
|
|
557
|
+
texture?: boolean;
|
|
558
|
+
/** 暗记 */
|
|
559
|
+
watermark?: boolean;
|
|
560
|
+
};
|
|
561
|
+
};
|
|
562
|
+
}
|
|
563
|
+
/**
|
|
564
|
+
* 身份证模块配置选项
|
|
565
|
+
*/
|
|
566
|
+
interface IDCardModuleOptions {
|
|
567
|
+
/** 是否启用模块 */
|
|
568
|
+
enabled?: boolean;
|
|
569
|
+
/** 检测器配置 */
|
|
570
|
+
detector?: {
|
|
571
|
+
/** 最小置信度 */
|
|
572
|
+
minConfidence?: number;
|
|
573
|
+
/** 是否启用OCR识别 */
|
|
574
|
+
enableOCR?: boolean;
|
|
575
|
+
/** 是否启用防伪检测 */
|
|
576
|
+
enableAntiFake?: boolean;
|
|
577
|
+
};
|
|
578
|
+
/** OCR处理器配置 */
|
|
579
|
+
ocr?: {
|
|
580
|
+
/** 是否使用Web Worker处理OCR */
|
|
581
|
+
useWorker?: boolean;
|
|
582
|
+
/** 最大图像尺寸 */
|
|
583
|
+
maxImageDimension?: number;
|
|
584
|
+
/** 亮度调整 */
|
|
585
|
+
brightness?: number;
|
|
586
|
+
/** 对比度调整 */
|
|
587
|
+
contrast?: number;
|
|
588
|
+
};
|
|
589
|
+
/** 防伪检测配置 */
|
|
590
|
+
antiFake?: {
|
|
591
|
+
/** 防伪检测灵敏度 */
|
|
592
|
+
sensitivity?: number;
|
|
593
|
+
/** 最小置信度 */
|
|
594
|
+
minConfidence?: number;
|
|
595
|
+
};
|
|
596
|
+
}
|
|
597
|
+
/**
|
|
598
|
+
* 身份证验证结果
|
|
599
|
+
*/
|
|
600
|
+
interface IDCardVerificationResult {
|
|
601
|
+
/** 是否验证通过 */
|
|
602
|
+
isValid: boolean;
|
|
603
|
+
/** 验证分数 */
|
|
604
|
+
score: number;
|
|
605
|
+
/** 失败原因 */
|
|
606
|
+
failureReason?: string;
|
|
607
|
+
/** 验证详情 */
|
|
608
|
+
details?: {
|
|
609
|
+
/** 身份证号码是否有效 */
|
|
610
|
+
idNumberValid?: boolean;
|
|
611
|
+
/** 签发日期是否有效 */
|
|
612
|
+
issueDateValid?: boolean;
|
|
613
|
+
/** 有效期是否过期 */
|
|
614
|
+
isExpired?: boolean;
|
|
615
|
+
/** 防伪检测是否通过 */
|
|
616
|
+
antiFakePassed?: boolean;
|
|
617
|
+
};
|
|
618
|
+
}
|
|
619
|
+
|
|
620
|
+
/**
|
|
621
|
+
* @file 身份证模块入口
|
|
622
|
+
* @description 提供身份证识别和验证功能的模块入口
|
|
623
|
+
* @module modules/id-card
|
|
624
|
+
*/
|
|
625
|
+
|
|
626
|
+
/**
|
|
627
|
+
* 身份证识别模块
|
|
628
|
+
* 提供身份证检测、OCR识别、防伪检测等功能
|
|
629
|
+
*/
|
|
630
|
+
declare class IDCardModule extends BaseModule {
|
|
631
|
+
/** 模块名称 */
|
|
632
|
+
readonly name: string;
|
|
633
|
+
/** 模块配置 */
|
|
634
|
+
private options;
|
|
635
|
+
/** 身份证检测器 */
|
|
636
|
+
private detector;
|
|
637
|
+
/** OCR处理器 */
|
|
638
|
+
private ocrProcessor?;
|
|
639
|
+
/** 防伪检测器 */
|
|
640
|
+
private antiFakeDetector?;
|
|
641
|
+
/** 最后一次检测结果 */
|
|
642
|
+
private lastDetectionResult?;
|
|
643
|
+
/**
|
|
644
|
+
* 构造函数
|
|
645
|
+
* @param options 模块配置选项
|
|
646
|
+
*/
|
|
647
|
+
constructor(options?: IDCardModuleOptions);
|
|
648
|
+
/**
|
|
649
|
+
* 初始化模块
|
|
650
|
+
*/
|
|
651
|
+
initialize(): Promise<void>;
|
|
652
|
+
/**
|
|
653
|
+
* 识别身份证图像
|
|
654
|
+
* @param image 图像源
|
|
655
|
+
* @returns 识别结果
|
|
656
|
+
*/
|
|
657
|
+
recognize(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<IDCardInfo>;
|
|
658
|
+
/**
|
|
659
|
+
* 验证身份证信息
|
|
660
|
+
* @param idCardInfo 身份证信息
|
|
661
|
+
* @returns 验证结果
|
|
662
|
+
*/
|
|
663
|
+
verify(idCardInfo: IDCardInfo): IDCardVerificationResult;
|
|
664
|
+
/**
|
|
665
|
+
* 获取最后一次识别结果
|
|
666
|
+
*/
|
|
667
|
+
getLastRecognitionResult(): IDCardInfo | undefined;
|
|
668
|
+
/**
|
|
669
|
+
* 释放模块资源
|
|
670
|
+
*/
|
|
671
|
+
dispose(): Promise<void>;
|
|
672
|
+
/**
|
|
673
|
+
* 验证身份证号码是否有效
|
|
674
|
+
* @param idNumber 身份证号码
|
|
675
|
+
* @returns 是否有效
|
|
676
|
+
*/
|
|
677
|
+
private validateIDNumber;
|
|
678
|
+
/**
|
|
679
|
+
* 检查身份证是否过期
|
|
680
|
+
* @param validTo 有效期截止日期
|
|
681
|
+
* @returns 是否过期
|
|
682
|
+
*/
|
|
683
|
+
private isIDCardExpired;
|
|
684
|
+
/**
|
|
685
|
+
* 检测身份证
|
|
686
|
+
* @param image 图像源
|
|
687
|
+
* @returns 检测结果
|
|
688
|
+
*/
|
|
689
|
+
detect(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<{
|
|
690
|
+
success: boolean;
|
|
691
|
+
type?: IDCardType;
|
|
692
|
+
confidence: number;
|
|
693
|
+
croppedImage?: ImageData;
|
|
694
|
+
}>;
|
|
695
|
+
/**
|
|
696
|
+
* 将图像转换为 ImageData
|
|
697
|
+
* @param image 图像源
|
|
698
|
+
* @returns ImageData 对象
|
|
699
|
+
*/
|
|
700
|
+
private convertToImageData;
|
|
701
|
+
/**
|
|
702
|
+
* 确保模块已初始化
|
|
703
|
+
* @protected
|
|
704
|
+
*/
|
|
705
|
+
protected ensureInitialized(): void;
|
|
706
|
+
}
|
|
707
|
+
|
|
708
|
+
/**
|
|
709
|
+
* @file 二维码模块类型定义
|
|
710
|
+
* @description 二维码模块相关的类型和接口定义
|
|
711
|
+
* @module modules/qrcode/types
|
|
712
|
+
*/
|
|
713
|
+
/**
|
|
714
|
+
* 二维码检测结果
|
|
715
|
+
*/
|
|
716
|
+
interface QRCodeResult {
|
|
717
|
+
/** 二维码内容 */
|
|
718
|
+
data: string;
|
|
719
|
+
/** 二维码类型 */
|
|
720
|
+
type?: string;
|
|
721
|
+
/** 二维码边界框 */
|
|
722
|
+
boundingBox: {
|
|
723
|
+
topLeft: {
|
|
724
|
+
x: number;
|
|
725
|
+
y: number;
|
|
726
|
+
};
|
|
727
|
+
topRight: {
|
|
728
|
+
x: number;
|
|
729
|
+
y: number;
|
|
730
|
+
};
|
|
731
|
+
bottomRight: {
|
|
732
|
+
x: number;
|
|
733
|
+
y: number;
|
|
734
|
+
};
|
|
735
|
+
bottomLeft: {
|
|
736
|
+
x: number;
|
|
737
|
+
y: number;
|
|
738
|
+
};
|
|
739
|
+
};
|
|
740
|
+
/** 二维码中心点 */
|
|
741
|
+
center: {
|
|
742
|
+
x: number;
|
|
743
|
+
y: number;
|
|
744
|
+
};
|
|
745
|
+
/** 原始图像 */
|
|
746
|
+
image?: ImageData;
|
|
747
|
+
/** 置信度 */
|
|
748
|
+
confidence?: number;
|
|
749
|
+
}
|
|
750
|
+
/**
|
|
751
|
+
* 二维码模块选项
|
|
752
|
+
*/
|
|
753
|
+
interface QRCodeModuleOptions {
|
|
754
|
+
/** 是否启用模块 */
|
|
755
|
+
enabled?: boolean;
|
|
756
|
+
/** 二维码扫描配置 */
|
|
757
|
+
scanner?: {
|
|
758
|
+
/** 最小置信度 */
|
|
759
|
+
minConfidence?: number;
|
|
760
|
+
/** 是否尝试多次扫描 */
|
|
761
|
+
tryMultipleScan?: boolean;
|
|
762
|
+
/** 是否返回原始图像 */
|
|
763
|
+
returnImage?: boolean;
|
|
764
|
+
};
|
|
765
|
+
/** 图像处理配置 */
|
|
766
|
+
imageProcess?: {
|
|
767
|
+
/** 是否进行预处理 */
|
|
768
|
+
preprocess?: boolean;
|
|
769
|
+
/** 是否增强对比度 */
|
|
770
|
+
enhanceContrast?: boolean;
|
|
771
|
+
/** 二值化阈值 */
|
|
772
|
+
threshold?: number;
|
|
773
|
+
};
|
|
774
|
+
}
|
|
775
|
+
|
|
776
|
+
/**
|
|
777
|
+
* @file 二维码模块入口
|
|
778
|
+
* @description 提供二维码识别和解析功能的模块入口
|
|
779
|
+
* @module modules/qrcode
|
|
780
|
+
*/
|
|
781
|
+
|
|
782
|
+
/**
|
|
783
|
+
* 二维码模块
|
|
784
|
+
* 提供二维码检测和解析功能
|
|
785
|
+
*/
|
|
786
|
+
declare class QRCodeModule extends BaseModule {
|
|
787
|
+
/** 模块名称 */
|
|
788
|
+
readonly name: string;
|
|
789
|
+
/** 模块配置 */
|
|
790
|
+
private options;
|
|
791
|
+
/** 二维码扫描器 */
|
|
792
|
+
private scanner;
|
|
793
|
+
/** 最后一次扫描结果 */
|
|
794
|
+
private lastScanResult?;
|
|
795
|
+
/**
|
|
796
|
+
* 构造函数
|
|
797
|
+
* @param options 模块配置选项
|
|
798
|
+
*/
|
|
799
|
+
constructor(options?: QRCodeModuleOptions);
|
|
800
|
+
/**
|
|
801
|
+
* 初始化模块
|
|
802
|
+
*/
|
|
803
|
+
initialize(): Promise<void>;
|
|
804
|
+
/**
|
|
805
|
+
* 扫描图像中的二维码
|
|
806
|
+
* @param image 图像源
|
|
807
|
+
* @returns 二维码扫描结果
|
|
808
|
+
*/
|
|
809
|
+
scan(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<QRCodeResult | undefined>;
|
|
810
|
+
/**
|
|
811
|
+
* 获取最后一次扫描结果
|
|
812
|
+
*/
|
|
813
|
+
getLastScanResult(): QRCodeResult | undefined;
|
|
814
|
+
/**
|
|
815
|
+
* 解析二维码数据
|
|
816
|
+
* @param data 二维码数据
|
|
817
|
+
* @returns 解析后的数据对象
|
|
818
|
+
*/
|
|
819
|
+
parseQRCodeData(data: string): Record<string, any> | string;
|
|
820
|
+
/**
|
|
821
|
+
* 释放模块资源
|
|
822
|
+
*/
|
|
823
|
+
dispose(): Promise<void>;
|
|
824
|
+
}
|
|
825
|
+
|
|
826
|
+
/**
|
|
827
|
+
* @file 人脸模块类型定义
|
|
828
|
+
* @description 人脸模块相关的类型和接口定义
|
|
829
|
+
* @module modules/face/types
|
|
830
|
+
*/
|
|
831
|
+
/**
|
|
832
|
+
* 人脸检测结果
|
|
833
|
+
*/
|
|
834
|
+
interface FaceDetectionResult {
|
|
835
|
+
/** 人脸边界框 */
|
|
836
|
+
boundingBox: {
|
|
837
|
+
x: number;
|
|
838
|
+
y: number;
|
|
839
|
+
width: number;
|
|
840
|
+
height: number;
|
|
841
|
+
};
|
|
842
|
+
/** 人脸特征点 */
|
|
843
|
+
landmarks?: {
|
|
844
|
+
/** 左眼 */
|
|
845
|
+
leftEye: {
|
|
846
|
+
x: number;
|
|
847
|
+
y: number;
|
|
848
|
+
};
|
|
849
|
+
/** 右眼 */
|
|
850
|
+
rightEye: {
|
|
851
|
+
x: number;
|
|
852
|
+
y: number;
|
|
853
|
+
};
|
|
854
|
+
/** 鼻子 */
|
|
855
|
+
nose: {
|
|
856
|
+
x: number;
|
|
857
|
+
y: number;
|
|
858
|
+
};
|
|
859
|
+
/** 嘴巴 */
|
|
860
|
+
mouth: {
|
|
861
|
+
x: number;
|
|
862
|
+
y: number;
|
|
863
|
+
};
|
|
864
|
+
/** 下巴 */
|
|
865
|
+
chin: {
|
|
866
|
+
x: number;
|
|
867
|
+
y: number;
|
|
868
|
+
};
|
|
869
|
+
};
|
|
870
|
+
/** 人脸角度 */
|
|
871
|
+
angle?: {
|
|
872
|
+
/** 俯仰角 */
|
|
873
|
+
pitch: number;
|
|
874
|
+
/** 偏航角 */
|
|
875
|
+
yaw: number;
|
|
876
|
+
/** 翻滚角 */
|
|
877
|
+
roll: number;
|
|
878
|
+
};
|
|
879
|
+
/** 人脸属性 */
|
|
880
|
+
attributes?: {
|
|
881
|
+
/** 性别 */
|
|
882
|
+
gender?: {
|
|
883
|
+
/** 性别值 */
|
|
884
|
+
value: 'male' | 'female';
|
|
885
|
+
/** 置信度 */
|
|
886
|
+
confidence: number;
|
|
887
|
+
};
|
|
888
|
+
/** 年龄 */
|
|
889
|
+
age?: {
|
|
890
|
+
/** 年龄值 */
|
|
891
|
+
value: number;
|
|
892
|
+
/** 置信度 */
|
|
893
|
+
confidence: number;
|
|
894
|
+
};
|
|
895
|
+
/** 表情 */
|
|
896
|
+
emotion?: {
|
|
897
|
+
/** 表情值 */
|
|
898
|
+
value: 'neutral' | 'happiness' | 'surprise' | 'sadness' | 'anger' | 'disgust' | 'fear' | 'contempt';
|
|
899
|
+
/** 置信度 */
|
|
900
|
+
confidence: number;
|
|
901
|
+
};
|
|
902
|
+
};
|
|
903
|
+
/** 活体检测结果 */
|
|
904
|
+
liveness?: {
|
|
905
|
+
/** 是否通过活体检测 */
|
|
906
|
+
passed: boolean;
|
|
907
|
+
/** 活体检测分数 */
|
|
908
|
+
score: number;
|
|
909
|
+
/** 活体检测类型 */
|
|
910
|
+
type: 'blink' | 'mouth' | 'head' | 'passive';
|
|
911
|
+
};
|
|
912
|
+
/** 人脸图像 */
|
|
913
|
+
image?: ImageData;
|
|
914
|
+
/** 置信度 */
|
|
915
|
+
confidence: number;
|
|
916
|
+
}
|
|
917
|
+
/**
|
|
918
|
+
* 人脸比对结果
|
|
919
|
+
*/
|
|
920
|
+
interface FaceComparisonResult {
|
|
921
|
+
/** 是否匹配 */
|
|
922
|
+
isMatch: boolean;
|
|
923
|
+
/** 相似度分数 */
|
|
924
|
+
similarity: number;
|
|
925
|
+
/** 置信度 */
|
|
926
|
+
confidence: number;
|
|
927
|
+
}
|
|
928
|
+
/**
|
|
929
|
+
* 人脸模块配置选项
|
|
930
|
+
*/
|
|
931
|
+
interface FaceModuleOptions {
|
|
932
|
+
/** 是否启用模块 */
|
|
933
|
+
enabled?: boolean;
|
|
934
|
+
/** 检测器配置 */
|
|
935
|
+
detector?: {
|
|
936
|
+
/** 最小置信度 */
|
|
937
|
+
minConfidence?: number;
|
|
938
|
+
/** 是否检测特征点 */
|
|
939
|
+
detectLandmarks?: boolean;
|
|
940
|
+
/** 是否检测属性 */
|
|
941
|
+
detectAttributes?: boolean;
|
|
942
|
+
/** 是否返回人脸图像 */
|
|
943
|
+
returnFaceImage?: boolean;
|
|
944
|
+
};
|
|
945
|
+
/** 活体检测配置 */
|
|
946
|
+
liveness?: {
|
|
947
|
+
/** 是否启用活体检测 */
|
|
948
|
+
enabled?: boolean;
|
|
949
|
+
/** 活体检测类型 */
|
|
950
|
+
type?: 'blink' | 'mouth' | 'head' | 'passive';
|
|
951
|
+
/** 最小置信度 */
|
|
952
|
+
minConfidence?: number;
|
|
953
|
+
/** 检测超时时间(毫秒) */
|
|
954
|
+
timeout?: number;
|
|
955
|
+
};
|
|
956
|
+
/** 人脸比对配置 */
|
|
957
|
+
comparison?: {
|
|
958
|
+
/** 最小相似度阈值 */
|
|
959
|
+
minSimilarity?: number;
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
|
|
963
|
+
/**
|
|
964
|
+
* @file 人脸模块入口
|
|
965
|
+
* @description 提供人脸检测、活体检测和人脸比对功能的模块入口
|
|
966
|
+
* @module modules/face
|
|
967
|
+
*/
|
|
968
|
+
|
|
969
|
+
/**
|
|
970
|
+
* 人脸模块
|
|
971
|
+
* 提供人脸检测、活体检测和人脸比对功能
|
|
972
|
+
*/
|
|
973
|
+
declare class FaceModule extends BaseModule {
|
|
974
|
+
/** 模块名称 */
|
|
975
|
+
readonly name: string;
|
|
976
|
+
/** 模块配置 */
|
|
977
|
+
private options;
|
|
978
|
+
/** 最后一次检测结果 */
|
|
979
|
+
private lastDetectionResult?;
|
|
980
|
+
/**
|
|
981
|
+
* 构造函数
|
|
982
|
+
* @param options 模块配置选项
|
|
983
|
+
*/
|
|
984
|
+
constructor(options?: FaceModuleOptions);
|
|
985
|
+
/**
|
|
986
|
+
* 初始化模块
|
|
987
|
+
*/
|
|
988
|
+
initialize(): Promise<void>;
|
|
989
|
+
/**
|
|
990
|
+
* 检测图像中的人脸
|
|
991
|
+
* @param image 图像源
|
|
992
|
+
* @returns 人脸检测结果
|
|
993
|
+
*/
|
|
994
|
+
detectFace(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<FaceDetectionResult | undefined>;
|
|
995
|
+
/**
|
|
996
|
+
* 进行活体检测
|
|
997
|
+
* @param image 图像源
|
|
998
|
+
* @returns 活体检测结果
|
|
999
|
+
*/
|
|
1000
|
+
detectLiveness(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<boolean>;
|
|
1001
|
+
/**
|
|
1002
|
+
* 比对两个人脸
|
|
1003
|
+
* @param face1 第一个人脸图像
|
|
1004
|
+
* @param face2 第二个人脸图像
|
|
1005
|
+
* @returns 人脸比对结果
|
|
1006
|
+
*/
|
|
1007
|
+
compareFaces(face1: ImageData | HTMLImageElement | HTMLCanvasElement, face2: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<FaceComparisonResult>;
|
|
1008
|
+
/**
|
|
1009
|
+
* 获取最后一次检测结果
|
|
1010
|
+
*/
|
|
1011
|
+
getLastDetectionResult(): FaceDetectionResult | undefined;
|
|
1012
|
+
/**
|
|
1013
|
+
* 释放模块资源
|
|
1014
|
+
*/
|
|
1015
|
+
dispose(): Promise<void>;
|
|
1016
|
+
}
|
|
1017
|
+
|
|
1018
|
+
/**
|
|
1019
|
+
* @file 错误处理模块
|
|
1020
|
+
* @description 定义ID-Scanner-Lib的错误类层次结构
|
|
1021
|
+
* @module core/errors
|
|
1022
|
+
*/
|
|
1023
|
+
/**
|
|
1024
|
+
* ID-Scanner-Lib 基础错误类
|
|
1025
|
+
* 所有库特定错误的基类
|
|
1026
|
+
*/
|
|
1027
|
+
declare class IDScannerError extends Error {
|
|
1028
|
+
/** 错误代码 */
|
|
1029
|
+
code: string;
|
|
1030
|
+
/** 错误原因 */
|
|
1031
|
+
cause?: Error;
|
|
1032
|
+
/**
|
|
1033
|
+
* 构造函数
|
|
1034
|
+
* @param message 错误消息
|
|
1035
|
+
* @param options 错误选项
|
|
1036
|
+
*/
|
|
1037
|
+
constructor(message: string, options?: {
|
|
1038
|
+
code?: string;
|
|
1039
|
+
cause?: Error;
|
|
1040
|
+
});
|
|
1041
|
+
}
|
|
1042
|
+
/**
|
|
1043
|
+
* 初始化错误
|
|
1044
|
+
* 当库初始化失败时抛出
|
|
1045
|
+
*/
|
|
1046
|
+
declare class InitializationError extends IDScannerError {
|
|
1047
|
+
constructor(message: string, details?: string);
|
|
1048
|
+
}
|
|
1049
|
+
/**
|
|
1050
|
+
* 设备错误
|
|
1051
|
+
* 当访问硬件设备(如摄像头)失败时抛出
|
|
1052
|
+
*/
|
|
1053
|
+
declare class DeviceError extends IDScannerError {
|
|
1054
|
+
constructor(message: string);
|
|
1055
|
+
}
|
|
1056
|
+
/**
|
|
1057
|
+
* 摄像头访问错误
|
|
1058
|
+
* 当无法访问或启动摄像头时抛出
|
|
1059
|
+
*/
|
|
1060
|
+
declare class CameraAccessError extends IDScannerError {
|
|
1061
|
+
constructor(message: string, options?: {
|
|
1062
|
+
code?: string;
|
|
1063
|
+
cause?: Error;
|
|
1064
|
+
});
|
|
1065
|
+
}
|
|
1066
|
+
/**
|
|
1067
|
+
* 人脸检测错误
|
|
1068
|
+
* 当人脸检测过程失败时抛出
|
|
1069
|
+
*/
|
|
1070
|
+
declare class FaceDetectionError extends IDScannerError {
|
|
1071
|
+
constructor(message: string);
|
|
1072
|
+
}
|
|
1073
|
+
/**
|
|
1074
|
+
* 人脸比对错误
|
|
1075
|
+
* 当人脸比对过程失败时抛出
|
|
1076
|
+
*/
|
|
1077
|
+
declare class FaceComparisonError extends IDScannerError {
|
|
1078
|
+
constructor(message: string);
|
|
1079
|
+
}
|
|
1080
|
+
/**
|
|
1081
|
+
* 活体检测错误
|
|
1082
|
+
* 当活体检测过程失败时抛出
|
|
1083
|
+
*/
|
|
1084
|
+
declare class LivenessDetectionError extends IDScannerError {
|
|
1085
|
+
constructor(message: string);
|
|
1086
|
+
}
|
|
1087
|
+
/**
|
|
1088
|
+
* OCR识别错误
|
|
1089
|
+
* 当OCR文字识别失败时抛出
|
|
1090
|
+
*/
|
|
1091
|
+
declare class OCRProcessingError extends IDScannerError {
|
|
1092
|
+
constructor(message: string);
|
|
1093
|
+
}
|
|
1094
|
+
/**
|
|
1095
|
+
* 二维码扫描错误
|
|
1096
|
+
* 当二维码扫描失败时抛出
|
|
1097
|
+
*/
|
|
1098
|
+
declare class QRScanError extends IDScannerError {
|
|
1099
|
+
constructor(message: string);
|
|
1100
|
+
}
|
|
1101
|
+
/**
|
|
1102
|
+
* 身份证检测错误
|
|
1103
|
+
* 当身份证检测失败时抛出
|
|
1104
|
+
*/
|
|
1105
|
+
declare class IDCardDetectionError extends IDScannerError {
|
|
1106
|
+
constructor(message: string);
|
|
1107
|
+
}
|
|
1108
|
+
/**
|
|
1109
|
+
* 资源加载错误
|
|
1110
|
+
* 当无法加载必要资源(如模型)时抛出
|
|
1111
|
+
*/
|
|
1112
|
+
declare class ResourceLoadError extends IDScannerError {
|
|
1113
|
+
constructor(resource: string, reason: string);
|
|
1114
|
+
}
|
|
1115
|
+
/**
|
|
1116
|
+
* 参数错误
|
|
1117
|
+
* 当提供的参数无效时抛出
|
|
1118
|
+
*/
|
|
1119
|
+
declare class InvalidArgumentError extends IDScannerError {
|
|
1120
|
+
constructor(paramName: string, reason: string);
|
|
1121
|
+
}
|
|
1122
|
+
/**
|
|
1123
|
+
* 不支持错误
|
|
1124
|
+
* 当尝试使用不支持的功能或当前环境无法使用的功能时抛出
|
|
1125
|
+
*/
|
|
1126
|
+
declare class NotSupportedError extends IDScannerError {
|
|
1127
|
+
constructor(feature: string);
|
|
1128
|
+
}
|
|
1129
|
+
|
|
1130
|
+
/**
|
|
1131
|
+
* @file 类型定义文件
|
|
1132
|
+
* @description 定义全局类型
|
|
1133
|
+
* @module Types
|
|
1134
|
+
*/
|
|
1135
|
+
/**
|
|
1136
|
+
* 身份证检测结果接口
|
|
1137
|
+
*
|
|
1138
|
+
* 包含身份证检测的结果信息,如是否成功检测到身份证、身份证的四个角点坐标以及裁剪后的身份证图像
|
|
1139
|
+
*
|
|
1140
|
+
* @interface DetectionResult
|
|
1141
|
+
* @property {boolean} success - 是否成功检测到身份证
|
|
1142
|
+
* @property {Object[]} [corners] - 检测到的身份证四个角点坐标
|
|
1143
|
+
* @property {number} corners[].x - 角点X坐标
|
|
1144
|
+
* @property {number} corners[].y - 角点Y坐标
|
|
1145
|
+
* @property {ImageData} [croppedImage] - 裁剪后的身份证图像
|
|
1146
|
+
* @property {ImageData} [imageData] - 原始图像数据
|
|
1147
|
+
* @property {Object} [boundingBox] - 检测到的身份证边界框
|
|
1148
|
+
* @property {number} boundingBox.x - 边界框左上角X坐标
|
|
1149
|
+
* @property {number} boundingBox.y - 边界框左上角Y坐标
|
|
1150
|
+
* @property {number} boundingBox.width - 边界框宽度
|
|
1151
|
+
* @property {number} boundingBox.height - 边界框高度
|
|
1152
|
+
* @property {number} [confidence] - 检测结果的置信度
|
|
1153
|
+
* @property {string} [message] - 检测结果的消息
|
|
1154
|
+
*/
|
|
1155
|
+
interface DetectionResult {
|
|
1156
|
+
success: boolean;
|
|
1157
|
+
corners?: {
|
|
1158
|
+
x: number;
|
|
1159
|
+
y: number;
|
|
1160
|
+
}[];
|
|
1161
|
+
croppedImage?: ImageData;
|
|
1162
|
+
imageData?: ImageData;
|
|
1163
|
+
boundingBox?: {
|
|
1164
|
+
x: number;
|
|
1165
|
+
y: number;
|
|
1166
|
+
width: number;
|
|
1167
|
+
height: number;
|
|
1168
|
+
};
|
|
1169
|
+
confidence?: number;
|
|
1170
|
+
message?: string;
|
|
1171
|
+
}
|
|
1172
|
+
/**
|
|
1173
|
+
* 点坐标
|
|
1174
|
+
*/
|
|
1175
|
+
interface Point {
|
|
1176
|
+
x: number;
|
|
1177
|
+
y: number;
|
|
1178
|
+
}
|
|
1179
|
+
/**
|
|
1180
|
+
* 矩形区域
|
|
1181
|
+
*/
|
|
1182
|
+
interface Rect {
|
|
1183
|
+
x: number;
|
|
1184
|
+
y: number;
|
|
1185
|
+
width: number;
|
|
1186
|
+
height: number;
|
|
1187
|
+
}
|
|
1188
|
+
/**
|
|
1189
|
+
* 可释放资源接口
|
|
1190
|
+
*/
|
|
1191
|
+
interface Disposable {
|
|
1192
|
+
/** 释放资源 */
|
|
1193
|
+
dispose(): Promise<void>;
|
|
1194
|
+
}
|
|
1195
|
+
/**
|
|
1196
|
+
* 图像处理选项
|
|
1197
|
+
*/
|
|
1198
|
+
interface ImageProcessingOptions {
|
|
1199
|
+
/** 亮度调整 (-100 到 100) */
|
|
1200
|
+
brightness?: number;
|
|
1201
|
+
/** 对比度调整 (-100 到 100) */
|
|
1202
|
+
contrast?: number;
|
|
1203
|
+
/** 饱和度调整 (-100 到 100) */
|
|
1204
|
+
saturation?: number;
|
|
1205
|
+
/** 锐化强度 (0 到 10) */
|
|
1206
|
+
sharpen?: number | boolean;
|
|
1207
|
+
/** 高斯模糊半径 (0 到 10) */
|
|
1208
|
+
blur?: number;
|
|
1209
|
+
/** 是否应用灰度转换 */
|
|
1210
|
+
grayscale?: boolean;
|
|
1211
|
+
/** 是否应用二值化 */
|
|
1212
|
+
binarize?: boolean;
|
|
1213
|
+
/** 二值化阈值 (0 到 255) */
|
|
1214
|
+
threshold?: number;
|
|
1215
|
+
/** 是否应用边缘检测 */
|
|
1216
|
+
edgeDetection?: boolean;
|
|
1217
|
+
/** 是否应用降噪 */
|
|
1218
|
+
denoise?: boolean;
|
|
1219
|
+
/** 是否应用直方图均衡化 */
|
|
1220
|
+
histogramEqualization?: boolean;
|
|
1221
|
+
/** 是否应用透视校正 */
|
|
1222
|
+
perspectiveCorrection?: boolean;
|
|
1223
|
+
/** 透视校正点 */
|
|
1224
|
+
perspectivePoints?: {
|
|
1225
|
+
topLeft: Point;
|
|
1226
|
+
topRight: Point;
|
|
1227
|
+
bottomRight: Point;
|
|
1228
|
+
bottomLeft: Point;
|
|
1229
|
+
};
|
|
1230
|
+
}
|
|
1231
|
+
|
|
1232
|
+
/**
|
|
1233
|
+
* @file 主入口文件
|
|
1234
|
+
* @description ID Scanner库的主入口点,提供统一的API和模块导出
|
|
1235
|
+
* @module index
|
|
1236
|
+
*/
|
|
1237
|
+
|
|
1238
|
+
/**
|
|
1239
|
+
* IDScanner配置选项
|
|
1240
|
+
*/
|
|
1241
|
+
interface IDScannerOptions {
|
|
1242
|
+
/** 日志级别 */
|
|
1243
|
+
logLevel?: LogLevel;
|
|
1244
|
+
/** 是否启用身份证识别模块 */
|
|
1245
|
+
enableIDCard?: boolean;
|
|
1246
|
+
/** 是否启用二维码识别模块 */
|
|
1247
|
+
enableQRCode?: boolean;
|
|
1248
|
+
/** 是否启用人脸识别模块 */
|
|
1249
|
+
enableFace?: boolean;
|
|
1250
|
+
/** 身份证模块配置 */
|
|
1251
|
+
idCard?: IDCardModuleOptions;
|
|
1252
|
+
/** 二维码模块配置 */
|
|
1253
|
+
qrCode?: QRCodeModuleOptions;
|
|
1254
|
+
/** 人脸识别模块配置 */
|
|
1255
|
+
face?: FaceModuleOptions;
|
|
1256
|
+
}
|
|
1257
|
+
/**
|
|
1258
|
+
* IDScanner类
|
|
1259
|
+
* 提供整合的身份证、二维码和人脸识别功能
|
|
1260
|
+
*/
|
|
1261
|
+
declare class IDScanner {
|
|
1262
|
+
/** 版本号 */
|
|
1263
|
+
static readonly VERSION = "1.5.0";
|
|
1264
|
+
/** 构建日期 */
|
|
1265
|
+
static readonly BUILD_DATE: string;
|
|
1266
|
+
/** 模块管理器 */
|
|
1267
|
+
private moduleManager;
|
|
1268
|
+
/** 是否已经初始化 */
|
|
1269
|
+
private initialized;
|
|
1270
|
+
/** 日志工具 */
|
|
1271
|
+
private logger;
|
|
1272
|
+
/**
|
|
1273
|
+
* 构造函数
|
|
1274
|
+
* @param options 配置选项
|
|
1275
|
+
*/
|
|
1276
|
+
constructor(options?: IDScannerOptions);
|
|
1277
|
+
/**
|
|
1278
|
+
* 初始化库
|
|
1279
|
+
*/
|
|
1280
|
+
initialize(): Promise<void>;
|
|
1281
|
+
/**
|
|
1282
|
+
* 获取身份证模块实例
|
|
1283
|
+
* @returns 身份证模块
|
|
1284
|
+
*/
|
|
1285
|
+
getIDCardModule(): IDCardModule | undefined;
|
|
1286
|
+
/**
|
|
1287
|
+
* 获取二维码模块实例
|
|
1288
|
+
* @returns 二维码模块
|
|
1289
|
+
*/
|
|
1290
|
+
getQRCodeModule(): QRCodeModule | undefined;
|
|
1291
|
+
/**
|
|
1292
|
+
* 获取人脸识别模块实例
|
|
1293
|
+
* @returns 人脸识别模块
|
|
1294
|
+
*/
|
|
1295
|
+
getFaceModule(): FaceModule | undefined;
|
|
1296
|
+
/**
|
|
1297
|
+
* 释放所有资源
|
|
1298
|
+
*/
|
|
1299
|
+
dispose(): Promise<void>;
|
|
1300
|
+
}
|
|
1301
|
+
|
|
1302
|
+
export { CameraAccessError, ConsoleLogHandler, DeviceError, FaceComparisonError, FaceDetectionError, FaceModule, IDCardDetectionError, IDCardModule, IDCardType, IDScanner, IDScannerError, InitializationError, InvalidArgumentError, LivenessDetectionError, LogLevel, Logger, MemoryLogHandler, ModuleManager, NotSupportedError, OCRProcessingError, QRCodeModule, QRScanError, RemoteLogHandler, ResourceLoadError, TaggedLogger, IDScanner as default };
|
|
1303
|
+
export type { DetectionResult, Disposable, FaceComparisonResult, FaceDetectionResult, FaceModuleOptions, IDCardInfo, IDCardModuleOptions, IDCardVerificationResult, IDScannerOptions, ImageProcessingOptions, LogEntry, LogHandler, Module, ModuleOptions, Point, QRCodeModuleOptions, QRCodeResult, Rect };
|