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.
Files changed (101) hide show
  1. package/README.md +55 -460
  2. package/dist/id-scanner-lib.esm.js +4641 -0
  3. package/dist/id-scanner-lib.esm.js.map +1 -0
  4. package/dist/id-scanner-lib.js +14755 -0
  5. package/dist/id-scanner-lib.js.map +1 -0
  6. package/dist/types/core/base-module.d.ts +44 -0
  7. package/dist/types/core/camera-manager.d.ts +258 -0
  8. package/dist/types/core/config.d.ts +88 -0
  9. package/dist/types/core/errors.d.ts +111 -0
  10. package/dist/types/core/event-emitter.d.ts +55 -0
  11. package/dist/types/core/logger.d.ts +277 -0
  12. package/dist/types/core/module-manager.d.ts +78 -0
  13. package/dist/types/core/plugin-manager.d.ts +158 -0
  14. package/dist/types/core/resource-manager.d.ts +246 -0
  15. package/dist/types/core/result.d.ts +83 -0
  16. package/dist/types/core/scanner-factory.d.ts +93 -0
  17. package/dist/types/index.bundle.d.ts +1303 -0
  18. package/dist/types/index.d.ts +86 -0
  19. package/dist/types/interfaces/external-types.d.ts +174 -0
  20. package/dist/types/interfaces/face-detection.d.ts +293 -0
  21. package/dist/types/interfaces/scanner-module.d.ts +280 -0
  22. package/dist/types/modules/face/face-detector.d.ts +170 -0
  23. package/dist/types/modules/face/index.d.ts +56 -0
  24. package/dist/types/modules/face/liveness-detector.d.ts +177 -0
  25. package/dist/types/modules/face/types.d.ts +136 -0
  26. package/dist/types/modules/id-card/anti-fake-detector.d.ts +170 -0
  27. package/dist/types/modules/id-card/id-card-detector.d.ts +131 -0
  28. package/dist/types/modules/id-card/index.d.ts +89 -0
  29. package/dist/types/modules/id-card/ocr-processor.d.ts +110 -0
  30. package/dist/types/modules/id-card/ocr-worker.d.ts +31 -0
  31. package/dist/types/modules/id-card/types.d.ts +181 -0
  32. package/dist/types/modules/qrcode/index.d.ts +51 -0
  33. package/dist/types/modules/qrcode/qr-code-scanner.d.ts +64 -0
  34. package/dist/types/modules/qrcode/types.d.ts +67 -0
  35. package/dist/types/utils/camera.d.ts +81 -0
  36. package/dist/types/utils/image-processing.d.ts +176 -0
  37. package/dist/types/utils/index.d.ts +175 -0
  38. package/dist/types/utils/performance.d.ts +81 -0
  39. package/dist/types/utils/resource-manager.d.ts +53 -0
  40. package/dist/types/utils/types.d.ts +166 -0
  41. package/dist/types/utils/worker.d.ts +52 -0
  42. package/dist/types/version.d.ts +7 -0
  43. package/package.json +76 -75
  44. package/src/core/base-module.ts +78 -0
  45. package/src/core/camera-manager.ts +798 -0
  46. package/src/core/config.ts +268 -0
  47. package/src/core/errors.ts +174 -0
  48. package/src/core/event-emitter.ts +110 -0
  49. package/src/core/logger.ts +549 -0
  50. package/src/core/module-manager.ts +165 -0
  51. package/src/core/plugin-manager.ts +429 -0
  52. package/src/core/resource-manager.ts +762 -0
  53. package/src/core/result.ts +163 -0
  54. package/src/core/scanner-factory.ts +237 -0
  55. package/src/index.ts +113 -936
  56. package/src/interfaces/external-types.ts +200 -0
  57. package/src/interfaces/face-detection.ts +309 -0
  58. package/src/interfaces/scanner-module.ts +384 -0
  59. package/src/modules/face/face-detector.ts +931 -0
  60. package/src/modules/face/index.ts +208 -0
  61. package/src/modules/face/liveness-detector.ts +908 -0
  62. package/src/modules/face/types.ts +133 -0
  63. package/src/{id-recognition → modules/id-card}/anti-fake-detector.ts +273 -239
  64. package/src/modules/id-card/id-card-detector.ts +474 -0
  65. package/src/modules/id-card/index.ts +425 -0
  66. package/src/{id-recognition → modules/id-card}/ocr-processor.ts +149 -92
  67. package/src/modules/id-card/ocr-worker.ts +259 -0
  68. package/src/modules/id-card/types.ts +178 -0
  69. package/src/modules/qrcode/index.ts +175 -0
  70. package/src/modules/qrcode/qr-code-scanner.ts +230 -0
  71. package/src/modules/qrcode/types.ts +65 -0
  72. package/src/types/tesseract.d.ts +265 -22
  73. package/src/utils/image-processing.ts +68 -49
  74. package/src/utils/index.ts +426 -0
  75. package/src/utils/performance.ts +168 -131
  76. package/src/utils/resource-manager.ts +65 -146
  77. package/src/utils/types.ts +90 -2
  78. package/src/utils/worker.ts +123 -84
  79. package/src/version.ts +11 -0
  80. package/tools/scaffold.js +543 -0
  81. package/dist/id-scanner-core.esm.js +0 -11349
  82. package/dist/id-scanner-core.js +0 -11361
  83. package/dist/id-scanner-core.min.js +0 -1
  84. package/dist/id-scanner-ocr.esm.js +0 -2319
  85. package/dist/id-scanner-ocr.js +0 -2328
  86. package/dist/id-scanner-ocr.min.js +0 -1
  87. package/dist/id-scanner-qr.esm.js +0 -1296
  88. package/dist/id-scanner-qr.js +0 -1305
  89. package/dist/id-scanner-qr.min.js +0 -1
  90. package/dist/id-scanner.js +0 -4561
  91. package/dist/id-scanner.min.js +0 -1
  92. package/src/core.ts +0 -138
  93. package/src/demo/demo.ts +0 -204
  94. package/src/id-recognition/data-extractor.ts +0 -262
  95. package/src/id-recognition/id-detector.ts +0 -510
  96. package/src/id-recognition/ocr-worker.ts +0 -156
  97. package/src/index-umd.ts +0 -477
  98. package/src/ocr-module.ts +0 -187
  99. package/src/qr-module.ts +0 -179
  100. package/src/scanner/barcode-scanner.ts +0 -251
  101. 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 };