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,163 @@
1
+ /**
2
+ * @file 结果包装类
3
+ * @description 提供统一的操作结果封装
4
+ * @module core/result
5
+ */
6
+
7
+ /**
8
+ * 结果类型
9
+ * 用于封装操作的成功或失败结果
10
+ */
11
+ export class Result<T = any> {
12
+ /** 结果数据 */
13
+ private _data?: T;
14
+ /** 错误对象 */
15
+ private _error?: Error;
16
+ /** 是否成功 */
17
+ private _success: boolean;
18
+ /** 额外元数据 */
19
+ private _meta?: Record<string, any>;
20
+
21
+ /**
22
+ * 构造函数
23
+ * @param success 是否成功
24
+ * @param data 结果数据
25
+ * @param error 错误对象
26
+ * @param meta 元数据
27
+ */
28
+ constructor(
29
+ success: boolean,
30
+ data?: T,
31
+ error?: Error,
32
+ meta?: Record<string, any>
33
+ ) {
34
+ this._success = success;
35
+ this._data = data;
36
+ this._error = error;
37
+ this._meta = meta;
38
+ }
39
+
40
+ /**
41
+ * 创建成功结果
42
+ * @param data 结果数据
43
+ * @param meta 元数据
44
+ */
45
+ static success<T>(data?: T, meta?: Record<string, any>): Result<T> {
46
+ return new Result<T>(true, data, undefined, meta);
47
+ }
48
+
49
+ /**
50
+ * 创建失败结果
51
+ * @param error 错误对象
52
+ * @param meta 元数据
53
+ */
54
+ static failure<T>(error: Error, meta?: Record<string, any>): Result<T> {
55
+ return new Result<T>(false, undefined, error, meta);
56
+ }
57
+
58
+ /**
59
+ * 检查结果是否成功
60
+ */
61
+ isSuccess(): boolean {
62
+ return this._success;
63
+ }
64
+
65
+ /**
66
+ * 检查结果是否失败
67
+ */
68
+ isFailure(): boolean {
69
+ return !this._success;
70
+ }
71
+
72
+ /**
73
+ * 获取结果数据
74
+ */
75
+ get data(): T | undefined {
76
+ return this._data;
77
+ }
78
+
79
+ /**
80
+ * 获取错误对象
81
+ */
82
+ get error(): Error | undefined {
83
+ return this._error;
84
+ }
85
+
86
+ /**
87
+ * 获取元数据
88
+ */
89
+ get meta(): Record<string, any> | undefined {
90
+ return this._meta;
91
+ }
92
+
93
+ /**
94
+ * 映射结果(如果成功)
95
+ * @param fn 映射函数
96
+ */
97
+ map<U>(fn: (data: T) => U): Result<U> {
98
+ if (this.isSuccess() && this._data !== undefined) {
99
+ try {
100
+ const newData = fn(this._data);
101
+ return Result.success<U>(newData, this._meta);
102
+ } catch (error) {
103
+ return Result.failure<U>(error instanceof Error ? error : new Error(String(error)), this._meta);
104
+ }
105
+ }
106
+
107
+ return Result.failure<U>(this._error!, this._meta);
108
+ }
109
+
110
+ /**
111
+ * 如果成功,则执行函数
112
+ * @param fn 要执行的函数
113
+ */
114
+ onSuccess(fn: (data?: T) => void): Result<T> {
115
+ if (this.isSuccess()) {
116
+ try {
117
+ fn(this._data);
118
+ } catch (error) {
119
+ console.error('Error in onSuccess handler:', error);
120
+ }
121
+ }
122
+ return this;
123
+ }
124
+
125
+ /**
126
+ * 如果失败,则执行函数
127
+ * @param fn 要执行的函数
128
+ */
129
+ onFailure(fn: (error: Error) => void): Result<T> {
130
+ if (this.isFailure() && this._error) {
131
+ try {
132
+ fn(this._error);
133
+ } catch (error) {
134
+ console.error('Error in onFailure handler:', error);
135
+ }
136
+ }
137
+ return this;
138
+ }
139
+
140
+ /**
141
+ * 无论成功失败,都执行函数
142
+ * @param fn 要执行的函数
143
+ */
144
+ onFinally(fn: () => void): Result<T> {
145
+ try {
146
+ fn();
147
+ } catch (error) {
148
+ console.error('Error in onFinally handler:', error);
149
+ }
150
+ return this;
151
+ }
152
+
153
+ /**
154
+ * 转换为字符串
155
+ */
156
+ toString(): string {
157
+ if (this.isSuccess()) {
158
+ return `Success: ${JSON.stringify(this._data)}`;
159
+ } else {
160
+ return `Failure: ${this._error?.message || 'Unknown error'}`;
161
+ }
162
+ }
163
+ }
@@ -0,0 +1,237 @@
1
+ /**
2
+ * @file 扫描器工厂
3
+ * @description 提供统一的组件创建和访问接口
4
+ * @module core/scanner-factory
5
+ */
6
+
7
+ import { ConfigManager } from './config';
8
+ import { Logger } from './logger';
9
+ import { ResourceManager } from './resource-manager';
10
+ import { EventEmitter } from './event-emitter';
11
+ import { InitializationError } from './errors';
12
+ import { VERSION } from '../version';
13
+
14
+ /**
15
+ * 扫描器初始化选项
16
+ */
17
+ export interface ScannerFactoryOptions {
18
+ /** 配置选项 */
19
+ config?: Record<string, any>;
20
+ /** 资源基础路径 */
21
+ resourceBasePath?: string;
22
+ /** 调试模式 */
23
+ debug?: boolean;
24
+ /** 自动初始化模块 */
25
+ autoInitModules?: boolean;
26
+ }
27
+
28
+ /**
29
+ * 扫描器工厂
30
+ * 作为整个库的核心入口点,管理组件生命周期并提供统一接口
31
+ */
32
+ export class ScannerFactory extends EventEmitter {
33
+ /** 单例实例 */
34
+ private static instance: ScannerFactory;
35
+ /** 配置管理器 */
36
+ private readonly config: ConfigManager;
37
+ /** 日志记录器 */
38
+ private readonly logger: Logger;
39
+ /** 资源管理器 */
40
+ private readonly resources: ResourceManager;
41
+ /** 是否已初始化 */
42
+ private initialized: boolean = false;
43
+ /** 初始化锁,防止多次调用 */
44
+ private initializing: boolean = false;
45
+
46
+ /**
47
+ * 私有构造函数
48
+ */
49
+ private constructor() {
50
+ super();
51
+ this.config = ConfigManager.getInstance();
52
+ this.logger = Logger.getInstance();
53
+ this.resources = ResourceManager.getInstance();
54
+ }
55
+
56
+ /**
57
+ * 获取单例实例
58
+ */
59
+ public static getInstance(): ScannerFactory {
60
+ if (!ScannerFactory.instance) {
61
+ ScannerFactory.instance = new ScannerFactory();
62
+ }
63
+ return ScannerFactory.instance;
64
+ }
65
+
66
+ /**
67
+ * 初始化扫描器工厂
68
+ * @param options 初始化选项
69
+ */
70
+ async initialize(options: ScannerFactoryOptions = {}): Promise<boolean> {
71
+ // 防止重复初始化
72
+ if (this.initialized) {
73
+ this.logger.warn('ScannerFactory', 'Already initialized');
74
+ return true;
75
+ }
76
+
77
+ if (this.initializing) {
78
+ this.logger.warn('ScannerFactory', 'Initialization already in progress');
79
+ return false;
80
+ }
81
+
82
+ this.initializing = true;
83
+
84
+ try {
85
+ const {
86
+ config = {},
87
+ resourceBasePath = '',
88
+ debug = false,
89
+ autoInitModules = true
90
+ } = options;
91
+
92
+ // 应用配置
93
+ if (debug) {
94
+ config.debug = true;
95
+ }
96
+
97
+ this.config.updateConfig(config);
98
+
99
+ // 设置资源基础路径
100
+ if (resourceBasePath) {
101
+ this.resources.setBasePath(resourceBasePath);
102
+ }
103
+
104
+ // 记录初始化日志
105
+ this.logger.info('ScannerFactory', `Initializing ID Scanner Library v${VERSION}`);
106
+
107
+ // 如果启用了自动初始化模块,则加载相应模块
108
+ if (autoInitModules) {
109
+ await this.initEnabledModules();
110
+ }
111
+
112
+ this.initialized = true;
113
+ this.initializing = false;
114
+
115
+ this.emit('initialized', { success: true });
116
+ this.logger.info('ScannerFactory', 'ID Scanner Library initialized successfully');
117
+
118
+ return true;
119
+ } catch (error) {
120
+ this.initializing = false;
121
+
122
+ const errorMessage = error instanceof Error ? error.message : String(error);
123
+ this.logger.error('ScannerFactory', `Initialization failed: ${errorMessage}`, error instanceof Error ? error : new Error(errorMessage));
124
+
125
+ this.emit('initialized', { success: false, error });
126
+
127
+ throw new InitializationError(
128
+ '扫描器初始化失败',
129
+ errorMessage
130
+ );
131
+ }
132
+ }
133
+
134
+ /**
135
+ * 初始化已启用的模块
136
+ */
137
+ private async initEnabledModules(): Promise<void> {
138
+ const enabledModules = [];
139
+
140
+ // 检查每个模块的启用状态
141
+ if (this.config.get('modules.face.enabled', false)) {
142
+ enabledModules.push(this.initFaceModule());
143
+ }
144
+
145
+ if (this.config.get('modules.qr.enabled', false)) {
146
+ enabledModules.push(this.initQRModule());
147
+ }
148
+
149
+ if (this.config.get('modules.idcard.enabled', false)) {
150
+ enabledModules.push(this.initIDCardModule());
151
+ }
152
+
153
+ if (this.config.get('modules.ocr.enabled', false)) {
154
+ enabledModules.push(this.initOCRModule());
155
+ }
156
+
157
+ // 并行初始化所有启用的模块
158
+ if (enabledModules.length > 0) {
159
+ await Promise.all(enabledModules);
160
+ }
161
+ }
162
+
163
+ /**
164
+ * 初始化人脸识别模块
165
+ */
166
+ private async initFaceModule(): Promise<void> {
167
+ this.logger.info('ScannerFactory', 'Initializing Face module');
168
+ // 实际初始化代码将在模块实现中完成
169
+ }
170
+
171
+ /**
172
+ * 初始化二维码扫描模块
173
+ */
174
+ private async initQRModule(): Promise<void> {
175
+ this.logger.info('ScannerFactory', 'Initializing QR Code module');
176
+ // 实际初始化代码将在模块实现中完成
177
+ }
178
+
179
+ /**
180
+ * 初始化身份证扫描模块
181
+ */
182
+ private async initIDCardModule(): Promise<void> {
183
+ this.logger.info('ScannerFactory', 'Initializing ID Card module');
184
+ // 实际初始化代码将在模块实现中完成
185
+ }
186
+
187
+ /**
188
+ * 初始化OCR模块
189
+ */
190
+ private async initOCRModule(): Promise<void> {
191
+ this.logger.info('ScannerFactory', 'Initializing OCR module');
192
+ // 实际初始化代码将在模块实现中完成
193
+ }
194
+
195
+ /**
196
+ * 销毁实例,释放资源
197
+ */
198
+ destroy(): void {
199
+ if (!this.initialized) return;
200
+
201
+ this.logger.info('ScannerFactory', 'Destroying ID Scanner Library');
202
+
203
+ // 释放所有资源
204
+ this.resources.releaseAll();
205
+
206
+ this.initialized = false;
207
+ this.emit('destroyed');
208
+ }
209
+
210
+ /**
211
+ * 获取配置管理器
212
+ */
213
+ getConfig(): ConfigManager {
214
+ return this.config;
215
+ }
216
+
217
+ /**
218
+ * 获取日志记录器
219
+ */
220
+ getLogger(): Logger {
221
+ return this.logger;
222
+ }
223
+
224
+ /**
225
+ * 获取资源管理器
226
+ */
227
+ getResources(): ResourceManager {
228
+ return this.resources;
229
+ }
230
+
231
+ /**
232
+ * 检查是否已初始化
233
+ */
234
+ isInitialized(): boolean {
235
+ return this.initialized;
236
+ }
237
+ }