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.
Files changed (80) hide show
  1. package/README.md +324 -410
  2. package/dist/id-scanner-lib.esm.js +4826 -0
  3. package/dist/id-scanner-lib.esm.js.map +1 -0
  4. package/dist/id-scanner-lib.js +4858 -0
  5. package/dist/id-scanner-lib.js.map +1 -0
  6. package/dist/types/browser-image-compression.d.ts +19 -0
  7. package/dist/types/tesseract.d.ts +280 -0
  8. package/package.json +89 -78
  9. package/src/core/base-module.ts +78 -0
  10. package/src/core/camera-manager.ts +813 -0
  11. package/src/core/config.ts +305 -0
  12. package/src/core/errors.ts +174 -0
  13. package/src/core/event-emitter.test.ts +42 -0
  14. package/src/core/event-emitter.ts +110 -0
  15. package/src/core/loading-state.test.ts +67 -0
  16. package/src/core/loading-state.ts +156 -0
  17. package/src/core/logger.test.ts +49 -0
  18. package/src/core/logger.ts +549 -0
  19. package/src/core/module-manager.ts +163 -0
  20. package/src/core/plugin-manager.ts +429 -0
  21. package/src/core/resource-manager.ts +762 -0
  22. package/src/core/result.ts +163 -0
  23. package/src/core/scanner-factory.ts +236 -0
  24. package/src/index.ts +117 -939
  25. package/src/interfaces/external-types.ts +200 -0
  26. package/src/interfaces/face-detection.ts +309 -0
  27. package/src/interfaces/scanner-module.ts +384 -0
  28. package/src/modules/face/face-detector.ts +988 -0
  29. package/src/modules/face/index.ts +208 -0
  30. package/src/modules/face/liveness-detector.ts +908 -0
  31. package/src/modules/face/types.ts +133 -0
  32. package/src/{id-recognition → modules/id-card}/anti-fake-detector.ts +274 -240
  33. package/src/modules/id-card/id-card-detector.ts +474 -0
  34. package/src/modules/id-card/index.ts +425 -0
  35. package/src/{id-recognition → modules/id-card}/ocr-processor.ts +149 -92
  36. package/src/modules/id-card/ocr-worker.ts +259 -0
  37. package/src/modules/id-card/types.ts +178 -0
  38. package/src/modules/qrcode/index.ts +175 -0
  39. package/src/modules/qrcode/qr-code-scanner.ts +231 -0
  40. package/src/modules/qrcode/types.ts +169 -0
  41. package/src/types/common.test.ts +99 -0
  42. package/src/types/common.ts +166 -0
  43. package/src/types/tesseract.d.ts +265 -22
  44. package/src/utils/camera.test.ts +30 -0
  45. package/src/utils/camera.ts +4 -1
  46. package/src/utils/error-handler.test.ts +137 -0
  47. package/src/utils/error-handler.ts +110 -0
  48. package/src/utils/image-processing.ts +68 -49
  49. package/src/utils/index.test.ts +186 -0
  50. package/src/utils/index.ts +429 -0
  51. package/src/utils/performance.ts +168 -131
  52. package/src/utils/resource-manager.ts +65 -146
  53. package/src/utils/retry.test.ts +142 -0
  54. package/src/utils/retry.ts +282 -0
  55. package/src/utils/types.ts +90 -2
  56. package/src/utils/utils.test.ts +171 -0
  57. package/src/utils/worker.ts +123 -84
  58. package/src/version.ts +11 -0
  59. package/tools/scaffold.js +543 -0
  60. package/dist/id-scanner-core.esm.js +0 -11349
  61. package/dist/id-scanner-core.js +0 -11361
  62. package/dist/id-scanner-core.min.js +0 -1
  63. package/dist/id-scanner-ocr.esm.js +0 -2319
  64. package/dist/id-scanner-ocr.js +0 -2328
  65. package/dist/id-scanner-ocr.min.js +0 -1
  66. package/dist/id-scanner-qr.esm.js +0 -1296
  67. package/dist/id-scanner-qr.js +0 -1305
  68. package/dist/id-scanner-qr.min.js +0 -1
  69. package/dist/id-scanner.js +0 -4561
  70. package/dist/id-scanner.min.js +0 -1
  71. package/src/core.ts +0 -138
  72. package/src/demo/demo.ts +0 -204
  73. package/src/id-recognition/data-extractor.ts +0 -262
  74. package/src/id-recognition/id-detector.ts +0 -510
  75. package/src/id-recognition/ocr-worker.ts +0 -156
  76. package/src/index-umd.ts +0 -477
  77. package/src/ocr-module.ts +0 -187
  78. package/src/qr-module.ts +0 -179
  79. package/src/scanner/barcode-scanner.ts +0 -251
  80. package/src/scanner/qr-scanner.ts +0 -167
package/README.md CHANGED
@@ -1,505 +1,419 @@
1
- # ID-Scanner-Lib
2
-
3
- 纯前端实现的TypeScript身份证与二维码识别库,无需后端支持,所有处理均在浏览器端完成。结合高性能图像处理与OCR技术,提供完整的识别解决方案。
4
-
5
- [![NPM Version](https://img.shields.io/npm/v/id-scanner-lib.svg)](https://www.npmjs.com/package/id-scanner-lib)
6
- [![GitHub Stars](https://img.shields.io/github/stars/agions/id-scanner-lib.svg?style=social)](https://github.com/agions/id-scanner-lib)
7
- [![Bundle Size](https://img.shields.io/bundlephobia/minzip/id-scanner-lib)](https://bundlephobia.com/package/id-scanner-lib)
8
- [![License](https://img.shields.io/npm/l/id-scanner-lib.svg)](https://github.com/agions/id-scanner-lib/blob/master/LICENSE)
9
-
10
- ## 技术特性
11
-
12
- - **高性能识别引擎**:针对浏览器环境优化的识别算法,支持实时处理
13
- - **二维码扫描**:基于jsQR实现高精度二维码识别与解码
14
- - **条形码识别**:支持EAN-13、CODE-128等常见一维码格式
15
- - **身份证OCR**:基于Tesseract.js的优化OCR引擎,精确提取身份证信息
16
- - **身份证防伪检测**:检测多种防伪特征,有效识别伪造证件
17
- - **图像处理优化**:内置多种图像预处理算法,提高识别率
18
- - **支持多种数据源**:摄像头实时视频流、图片文件、URL、Base64等
19
- - **高效缓存机制**:内置LRU缓存,避免重复识别,提升性能
20
- - **Web Worker支持**:耗时操作可在后台线程执行,不阻塞UI
21
- - **模块化设计**:支持按需加载,最小化应用体积
22
- - **TypeScript支持**:完整类型定义,提供良好的开发体验
23
-
24
- ## 性能指标
25
-
26
- | 功能 | 平均识别时间 | 识别率 | 备注 |
27
- | ---------- | ------------ | ------ | ---------------- |
28
- | 二维码识别 | 50-150ms | >98% | 取决于图像质量 |
29
- | 条形码识别 | 70-200ms | >95% | 支持多种格式 |
30
- | 身份证OCR | 300-800ms | >90% | 优化后的识别速度 |
31
- | 防伪检测 | 100-200ms | >85% | 多特征综合分析 |
32
- | 图像处理 | 20-100ms | - | 视处理操作而定 |
33
-
34
- ## 最新版本 (v1.3.2)
35
-
36
- - **图像处理引擎升级**:
37
- - 增强的图像锐化算法,提高低光照环境下的识别率
38
- - 自适应阈值算法,优化二值化效果
39
- - 基于OTSU算法的自动阈值选择
40
- - **性能优化**:
41
- - 代码压缩与Tree-shaking优化,减少30%以上的包体积
42
- - 引入智能缓存机制,避免重复计算
43
- - Web Worker支持,提高多核CPU利用率
44
- - **新增功能**:
45
- - 批量图像处理API
46
- - 内置图像压缩功能
47
- - 一体化演示组件
48
- - **身份证防伪检测**:识别多种防伪特征,检测伪造证件
49
- - 支持荧光油墨、微缩文字、光变图案等5种防伪特征检测
50
- - 基于多特征综合评分,提供置信度评估
51
- - 缓存机制提高重复检测性能
52
- - **架构改进**:
53
- - 资源自动释放机制
54
- - 更精细的模块划分
55
- - 增强的错误处理
56
-
57
- ## 版本路线图
58
-
59
- ### v1.4.0:人脸比对与活体检测
60
-
61
- - **人脸比对模块**:
62
- - 身份证照片与现场采集照片的比对功能
63
- - 基于深度学习的人脸特征提取与分析
64
- - 提供相似度评分与置信度
65
- - **活体检测**:
66
- - 眨眼、张嘴等动作检测防止照片欺骗
67
- - 基于光线反射的3D检测技术
68
- - 多帧分析提高检测准确率
69
- - **安全增强**:
70
- - 本地处理所有数据,保护隐私
71
- - 结果加密存储选项
72
- - 合规性验证工具
73
-
74
- ### v1.5.0:多证件类型支持
75
-
76
- - **护照识别**:
77
- - MRZ码(机读区)解析
78
- - 多国护照模板适配
79
- - 芯片信息读取(ePassport支持)
80
- - **驾驶证识别**:
81
- - 驾驶证OCR识别
82
- - 驾驶资格与限制条件解析
83
- - 国际驾照支持
84
- - **营业执照识别**:
85
- - 企业信息提取
86
- - 统一社会信用代码验证
87
- - 经营范围解析
88
- - **银行卡识别**:
89
- - 卡号、有效期识别
90
- - 银行标识解析
91
- - BIN码验证
92
-
93
- ### v1.6.0:UI/UX改进与组件库升级
94
-
95
- - **现代化UI框架**:
96
- - 基于Web Components的组件系统
97
- - 自适应扫描界面
98
- - 多主题支持(含暗色模式)
99
- - **交互体验优化**:
100
- - 实时扫描引导框
101
- - 智能对焦与取景提示
102
- - 证件边缘自动检测与校正
103
- - **可访问性支持**:
104
- - 屏幕阅读器兼容
105
- - 键盘导航
106
- - 多语言本地化
107
- - **动效与反馈**:
108
- - 平滑过渡动画
109
- - 触觉反馈(移动设备)
110
- - 声音反馈与语音提示
111
-
112
- ### v1.7.0:性能与架构优化
113
-
114
- - **WebAssembly实现**:
115
- - 核心图像处理算法WASM化
116
- - 性能提升3-5倍
117
- - 更低的CPU占用
118
- - **离线支持**:
119
- - 完整离线运行能力
120
- - 基于IndexedDB的本地缓存
121
- - Service Worker支持
122
- - **微前端集成**:
123
- - React/Vue/Angular专用组件
124
- - 更简单的集成API
125
- - TypeScript类型增强
126
- - **渐进式加载**:
127
- - 核心功能快速加载
128
- - 按需延迟加载附加模块
129
- - 预测性加载提高响应速度
130
-
131
- ### v2.0.0:企业级解决方案
132
-
133
- - **云端协同验证**:
134
- - 可选云端验证API
135
- - 本地与云端结果比对
136
- - 多级安全验证
137
- - **高级分析功能**:
138
- - 证件使用统计与分析
139
- - 风险评估模型
140
- - 异常检测系统
141
- - **行业解决方案包**:
142
- - 金融行业KYC流程集成
143
- - 酒店/零售快速登记系统
144
- - 政务/安防高安全性验证
145
- - **企业级管理功能**:
146
- - 多租户支持
147
- - 批量处理队列
148
- - 完整审计日志
149
-
150
- ## 系统架构
1
+ # ID Scanner Lib
151
2
 
152
- ```
153
- ┌────────────────────────────────────────────────────────────┐
154
- │ IDScanner 主模块 │
155
- ├─────────────┬─────────────────┬────────────────────────────┤
156
- │ QRScanner │ BarcodeScanner │ IDCardDetector │
157
- ├─────────────┴─────────────────┴────────────────────────────┤
158
- │ Camera (视频流捕获与处理)
159
- └────────────────────────────────────────────────────────────┘
160
-
161
-
162
-
163
- ┌────────────────────────────────────────────────────────────┐
164
- │ 核心处理引擎 │
165
- ├─────────────────┬─────────────────┬────────────────────────┤
166
- │ OCRProcessor │ DataExtractor │ ImageProcessor │
167
- │ (文字识别) │ (数据提取验证) │ (图像预处理) │
168
- ├─────────────────┴─────────────────┴────────────────────────┤
169
- │ AntiFakeDetector (身份证防伪检测) │
170
- └────────────────────────────────────────────────────────────┘
171
- ```
3
+ [English](./README_EN.md) | [中文](./README.md)
4
+
5
+ 一个功能强大的浏览器端身份验证和人脸识别库,支持人脸检测、人脸比对、活体检测和二维码扫描。
6
+
7
+ ![Version](https://img.shields.io/npm/v/id-scanner-lib)
8
+ ![License](https://img.shields.io/npm/l/id-scanner-lib)
9
+ ![Size](https://img.shields.io/bundlephobia/min/id-scanner-lib)
10
+
11
+ ## 特性
172
12
 
173
- ## 安装与使用
13
+ - 🚀 **模块化架构** - 核心组件独立封装,便于扩展和维护
14
+ - 👤 **人脸检测** - 快速准确的人脸定位和属性分析
15
+ - 🔍 **人脸比对** - 高精度的人脸相似度比对
16
+ - 🛡️ **活体检测** - 支持被动式和主动式活体验证,防止照片、视频欺骗
17
+ - 📱 **二维码扫描** - 支持QR码和多种条形码格式
18
+ - ⚡ **轻量级** - 优化的模型加载策略,按需加载
19
+ - 🌐 **跨平台** - 支持所有主流浏览器和设备
174
20
 
175
- ### NPM安装
21
+ ## 安装
22
+
23
+ ### NPM
176
24
 
177
25
  ```bash
178
- npm install id-scanner-lib --save
26
+ npm install id-scanner-lib
179
27
  ```
180
28
 
181
- ### CDN引入
29
+ ### CDN
182
30
 
183
31
  ```html
184
- <!-- 生产环境 (压缩版) -->
185
- <script src="https://cdn.jsdelivr.net/npm/id-scanner-lib@1.3.1/dist/id-scanner.min.js"></script>
32
+ <!-- UMD -->
33
+ <script src="https://cdn.jsdelivr.net/npm/id-scanner-lib/dist/id-scanner-lib.min.js"></script>
186
34
 
187
- <!-- 开发环境 (未压缩) -->
188
- <script src="https://cdn.jsdelivr.net/npm/id-scanner-lib@1.3.1/dist/id-scanner.js"></script>
35
+ <!-- ESM -->
36
+ <script type="module">
37
+ import IDScannerLib from 'https://cdn.jsdelivr.net/npm/id-scanner-lib/dist/id-scanner-lib.esm.js';
38
+ </script>
189
39
  ```
190
40
 
191
- ## 包体积优化
41
+ ## 快速开始
192
42
 
193
- v1.3.1版本通过代码分割和Tree-shaking极大地优化了包体积:
43
+ ### 基础使用
194
44
 
195
- | 模块 | 大小 (gzip) | 说明 |
196
- | --------------- | ----------- | ---------------- |
197
- | 完整包(min.js) | 93KB | 包含所有功能 |
198
- | 核心包(min.js) | 186KB | 基础功能,无OCR |
199
- | OCR模块(min.js) | 70KB | 仅文字识别 |
200
- | QR模块(min.js) | 60KB | 仅二维码识别 |
201
- | ESM模块 | 各模块更小 | 支持Tree-shaking |
45
+ ```typescript
46
+ import { IDScanner, FaceModule } from 'id-scanner-lib';
202
47
 
203
- ## 最佳实践:按需引入
48
+ // 初始化库
49
+ await IDScanner.initialize({
50
+ debug: true
51
+ });
204
52
 
205
- ### 完整引入
53
+ // 创建人脸模块
54
+ const faceModule = new FaceModule({
55
+ onFaceDetected: (faces) => console.log('检测到人脸:', faces),
56
+ onError: (error) => console.error('错误:', error)
57
+ });
206
58
 
207
- ```javascript
208
- // 引入完整功能
209
- import { IDScanner } from 'id-scanner-lib';
59
+ // 初始化人脸模块
60
+ await faceModule.initialize();
210
61
 
211
- const scanner = new IDScanner({
212
- onQRCodeScanned: (result) => console.log('扫描结果:', result),
213
- onIDCardScanned: (info) => console.log('身份证信息:', info),
214
- onAntiFakeDetected: (result) => console.log('防伪检测结果:', result)
215
- });
62
+ // 启动摄像头并开始人脸检测
63
+ const videoElement = document.getElementById('video');
64
+ await faceModule.startFaceRecognition(videoElement);
216
65
  ```
217
66
 
218
- ### 轻量引入
67
+ ### 人脸比对
219
68
 
220
- ```javascript
221
- // 只引入二维码相关功能
222
- import { ScannerModule } from 'id-scanner-lib/qr';
69
+ ```typescript
70
+ // 比对两张人脸图片
71
+ const result = await faceModule.compareFaces(image1, image2);
223
72
 
224
- const qrScanner = new ScannerModule({
225
- onQRCodeScanned: (result) => console.log('二维码:', result)
226
- });
73
+ console.log(`相似度: ${result.similarity}`);
74
+ console.log(`是否匹配: ${result.isMatch}`);
227
75
  ```
228
76
 
229
- ## 快速开始
230
-
231
- ### 二维码识别
232
-
233
- ```javascript
234
- import { IDScanner } from 'id-scanner-lib';
77
+ ### 活体检测
235
78
 
236
- // 创建扫描器实例
237
- const scanner = new IDScanner({
238
- onQRCodeScanned: (result) => {
239
- console.log('扫描到二维码:', result);
240
- }
79
+ ```typescript
80
+ // 被动式活体检测
81
+ const result = await faceModule.detectLiveness(image, {
82
+ type: LivenessDetectionType.PASSIVE,
83
+ onlyLive: true,
84
+ minConfidence: 0.7
241
85
  });
242
86
 
243
- // 初始化
244
- await scanner.initialize();
87
+ console.log(`是否为真人: ${result.isLive}`);
88
+ console.log(`置信度: ${result.score}`);
89
+ ```
245
90
 
246
- // 启动扫描
247
- const videoElement = document.getElementById('video');
248
- await scanner.startQRScanner(videoElement);
91
+ ### 二维码扫描
249
92
 
250
- // 处理静态图片
251
- const qrResult = await scanner.processQRCodeImage('https://example.com/qr.jpg');
252
- ```
93
+ ```typescript
94
+ // 创建二维码扫描器
95
+ const qrScanner = IDScanner.createQRScanner({
96
+ scanFrequency: 200,
97
+ formats: ['qrcode', 'code_128', 'code_39', 'ean_13']
98
+ });
253
99
 
254
- ### 身份证识别
100
+ // 初始化扫描器
101
+ await qrScanner.init();
255
102
 
256
- ```javascript
257
- import { IDScanner } from 'id-scanner-lib';
103
+ // 启动实时扫描
104
+ await qrScanner.startRealtime(videoElement);
258
105
 
259
- const scanner = new IDScanner({
260
- onIDCardScanned: (info) => {
261
- console.log('识别到身份证信息:', info);
262
- document.getElementById('name').textContent = info.name;
263
- document.getElementById('idNumber').textContent = info.idNumber;
264
- }
106
+ // 处理扫描结果
107
+ qrScanner.on('module:realtime:result', (event) => {
108
+ console.log('扫描结果:', event.result.content);
265
109
  });
110
+ ```
266
111
 
267
- await scanner.initialize();
268
- await scanner.startIDCardScanner(document.getElementById('camera'));
269
-
270
- // 使用文件输入处理
271
- document.getElementById('fileInput').addEventListener('change', async (e) => {
272
- const file = e.target.files[0];
273
- try {
274
- // 先压缩图片提高处理速度
275
- const compressed = await scanner.compressImage(file, {
276
- maxSizeMB: 1,
277
- maxWidthOrHeight: 1920
278
- });
279
-
280
- // 处理身份证图像
281
- const idInfo = await scanner.processIDCardImage(compressed);
282
- console.log('身份证信息:', idInfo);
283
-
284
- // 检查防伪检测结果
285
- if (idInfo.antiFakeResult) {
286
- console.log('防伪检测结果:', idInfo.antiFakeResult);
287
- if (idInfo.antiFakeResult.isAuthentic) {
288
- console.log('证件验证通过');
289
- } else {
290
- console.log('警告:可能为伪造证件');
291
- }
292
- }
293
- } catch (error) {
294
- console.error('处理失败:', error);
295
- }
296
- });
112
+ ## API 文档
113
+
114
+ ### 核心类
115
+
116
+ | | 说明 |
117
+ |---|---|
118
+ | `IDScanner` | 主入口类,管理所有模块 |
119
+ | `FaceModule` | 人脸检测、比对、活体检测模块 |
120
+ | `IDCardModule` | 身份证识别模块 |
121
+ | `QRCodeModule` | 二维码扫描模块 |
122
+
123
+ ### 工具函数
124
+
125
+ | 函数 | 说明 |
126
+ |---|---|
127
+ | `withRetry()` | 带重试的异步函数包装器 |
128
+ | `AsyncCache` | 异步缓存类 |
129
+ | `Semaphore` | 信号量,并发控制 |
130
+ | `ErrorHandler` | 统一错误处理 |
131
+ | `LoadingStateManager` | 加载状态管理 |
132
+
133
+ ### 类型定义
134
+
135
+ ```typescript
136
+ import type {
137
+ ImageSource,
138
+ Rectangle,
139
+ Point,
140
+ ModuleState,
141
+ BaseResult
142
+ } from 'id-scanner-lib';
297
143
  ```
298
144
 
299
- ### 身份证防伪检测
145
+ ## 性能优化
300
146
 
301
- ```javascript
302
- import { IDScanner } from 'id-scanner-lib';
147
+ ### 模型懒加载
303
148
 
304
- const scanner = new IDScanner({
305
- // 防伪检测结果回调
306
- onAntiFakeDetected: (result) => {
307
- if (result.isAuthentic) {
308
- console.log('身份证验证通过,检测到的防伪特征:', result.detectedFeatures);
309
- } else {
310
- console.log('警告:可能是伪造证件!', result.message);
311
- // 显示安全提示
312
- document.getElementById('warning').style.display = 'block';
313
- }
314
- }
149
+ 默认只加载必要的模型,按需加载其他模型:
150
+
151
+ ```typescript
152
+ const faceModule = new FaceModule({
153
+ // 只加载检测模型,不加载表情、年龄等模型
154
+ extractEmbeddings: false,
155
+ detectExpressions: false,
156
+ detectAgeGender: false
315
157
  });
158
+ ```
316
159
 
317
- await scanner.initialize();
160
+ ### 内存管理
318
161
 
319
- // 方法1:单独进行防伪检测
320
- const antiFakeResult = await scanner.detectIDCardAntiFake(idCardImage);
321
- console.log('防伪检测结果:', antiFakeResult);
322
- console.log('检测置信度:', antiFakeResult.confidence);
162
+ 使用完成后务必释放资源:
323
163
 
324
- // 方法2:身份证识别时自动进行防伪检测
325
- const idInfo = await scanner.processIDCardImage(idCardImage);
326
- // 防伪检测结果包含在返回的信息中
327
- if (idInfo.antiFakeResult && idInfo.antiFakeResult.isAuthentic) {
328
- // 身份证真实,继续处理
329
- } else {
330
- // 提示可能为伪造证件
331
- }
164
+ ```typescript
165
+ // 释放模块
166
+ await faceModule.dispose();
167
+
168
+ // 释放整个库
169
+ await scanner.dispose();
332
170
  ```
333
171
 
334
- ### 使用内置演示组件
172
+ ## 浏览器兼容性
335
173
 
336
- ```javascript
337
- import { IDScannerDemo } from 'id-scanner-lib';
174
+ | 浏览器 | 最低版本 |
175
+ |--------|---------|
176
+ | Chrome | 80+ |
177
+ | Firefox | 75+ |
178
+ | Safari | 14+ |
179
+ | Edge | 80+ |
338
180
 
339
- // 快速创建完整功能演示
340
- const demo = new IDScannerDemo(
341
- 'video', // 视频元素ID
342
- 'result', // 结果显示元素ID
343
- 'switchButton', // 切换按钮ID
344
- 'imageInput' // 图片输入元素ID
345
- );
181
+ ## 项目结构
346
182
 
347
- await demo.initialize();
183
+ ```
184
+ src/
185
+ ├── core/ # 核心功能
186
+ │ ├── camera-manager.ts # 摄像头管理
187
+ │ ├── config.ts # 配置管理
188
+ │ ├── logger.ts # 日志系统
189
+ │ └── loading-state.ts # 加载状态
190
+ ├── modules/ # 功能模块
191
+ │ ├── face/ # 人脸模块
192
+ │ ├── id-card/ # 身份证模块
193
+ │ └── qrcode/ # 二维码模块
194
+ ├── utils/ # 工具函数
195
+ │ ├── retry.ts # 重试机制
196
+ │ └── error-handler.ts # 错误处理
197
+ └── types/ # 类型定义
348
198
  ```
349
199
 
350
- ## 高级图像处理
200
+ ## 常见问题
351
201
 
352
- ```javascript
353
- import { ImageProcessor } from 'id-scanner-lib';
202
+ ### Q: 模型加载失败怎么办?
354
203
 
355
- // 从文件创建ImageData
356
- const file = document.getElementById('fileInput').files[0];
357
- const imageData = await ImageProcessor.createImageDataFromFile(file);
204
+ A: 检查网络连接,或使用本地模型:
358
205
 
359
- // 批量图像处理
360
- const enhancedImage = ImageProcessor.batchProcess(imageData, {
361
- brightness: 15, // 增加亮度
362
- contrast: 25, // 提高对比度
363
- sharpen: true, // 锐化图像
364
- grayscale: false // 不转换为灰度
206
+ ```typescript
207
+ const faceModule = new FaceModule({
208
+ modelPath: '/local/models'
365
209
  });
210
+ ```
211
+
212
+ ### Q: 如何处理权限问题?
213
+
214
+ A: 确保页面在 HTTPS 环境下运行,并获取用户授权:
366
215
 
367
- // 二值化处理
368
- const binaryImage = ImageProcessor.toBinaryImage(enhancedImage);
369
-
370
- // 显示处理结果
371
- const canvas = document.getElementById('previewCanvas');
372
- const ctx = canvas.getContext('2d');
373
- ctx.putImageData(binaryImage, 0, 0);
374
-
375
- // 转换为文件并上传
376
- const processedFile = await ImageProcessor.imageDataToFile(
377
- enhancedImage,
378
- 'processed.jpg',
379
- 'image/jpeg',
380
- 0.9
381
- );
216
+ ```typescript
217
+ const stream = await navigator.mediaDevices.getUserMedia({
218
+ video: { facingMode: 'user' }
219
+ });
382
220
  ```
383
221
 
384
- ## 技术实现细节
222
+ ### Q: 如何处理内存泄漏?
385
223
 
386
- ### OCR引擎优化
224
+ A: 确保在使用完毕后释放资源:
387
225
 
388
- OCR引擎基于Tesseract.js进行了一系列优化:
226
+ ```typescript
227
+ // 组件卸载时
228
+ useEffect(() => {
229
+ return () => {
230
+ faceModule?.dispose();
231
+ };
232
+ }, []);
233
+ ```
389
234
 
390
- 1. **预处理流水线**:图像经过多阶段处理,包括大小调整、增强对比度、锐化等
391
- 2. **字符集约束**:针对身份证特定字符集进行了优化,提高识别准确度
392
- 3. **多线程处理**:使用Web Worker避免主线程阻塞
393
- 4. **结果缓存**:相同图像指纹不重复计算,提高响应速度
235
+ ### Q: 支持哪些图片格式?
394
236
 
395
- ### 身份证防伪检测技术
237
+ A: 支持 JPEG、PNG、WebP 等浏览器常见的图片格式。
396
238
 
397
- 防伪检测模块能识别身份证中的多种防伪特征:
239
+ ## TypeScript 类型
398
240
 
399
- 1. **荧光油墨特征**:检测特定区域的荧光反应模式
400
- 2. **微缩文字**:识别证件上的微小文字,伪造证件难以复制
401
- 3. **光变图案**:检测特定角度下的光变效果
402
- 4. **雕刻凹印**:通过纹理检测特定的凹印模式
403
- 5. **隐形图案**:识别证件上的幽灵图像和隐形水印
241
+ 完整类型定义请参考 [types](./src/types/) 目录。
404
242
 
405
- 算法结合多种图像处理技术:
243
+ ### 核心类型
406
244
 
407
- - 特定光谱通道提取与分析
408
- - 边缘检测与微文字模式识别
409
- - 对比度与光照调整突出隐形特征
410
- - 自适应阈值处理增强识别准确度
245
+ ```typescript
246
+ // 图像源
247
+ type ImageSource = HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageData;
411
248
 
412
- ### 图像增强算法
249
+ // 矩形区域
250
+ interface Rectangle {
251
+ x: number;
252
+ y: number;
253
+ width: number;
254
+ height: number;
255
+ }
413
256
 
414
- 针对不同场景提供最佳图像处理策略:
257
+ // 点坐标
258
+ interface Point {
259
+ x: number;
260
+ y: number;
261
+ }
415
262
 
416
- - **弱光环境**:自动提高亮度和对比度
417
- - **模糊图像**:应用锐化算法提高清晰度
418
- - **过度曝光**:自适应调整对比度
419
- - **特殊角度**:透视校正(开发中)
263
+ // 模块状态
264
+ type ModuleState = 'idle' | 'loading' | 'ready' | 'error' | 'disposed';
420
265
 
421
- ## 浏览器兼容性
266
+ // 人脸检测结果
267
+ interface FaceDetectionResult {
268
+ faces: Face[];
269
+ image: ImageData;
270
+ }
422
271
 
423
- 完整支持所有现代浏览器:
272
+ // 人脸详情
273
+ interface Face {
274
+ box: Rectangle;
275
+ landmarks: Point[];
276
+ expressions?: Record<string, number>;
277
+ age?: number;
278
+ gender?: string;
279
+ embedding?: number[];
280
+ }
281
+ ```
424
282
 
425
- | 浏览器 | 最低版本 | 功能限制 |
426
- | -------------- | -------- | --------------------------- |
427
- | Chrome | 60+ | 完整支持 |
428
- | Firefox | 55+ | 完整支持 |
429
- | Safari | 11+ | 完整支持 |
430
- | Edge | 79+ | 完整支持 |
431
- | iOS Safari | 11+ | 仅支持Safari,不支持WebView |
432
- | Android Chrome | 60+ | 完整支持 |
433
- | 微信浏览器 | 最新版 | 仅支持静态图像处理 |
283
+ ## 错误处理
284
+
285
+ ### 错误类型
286
+
287
+ ```typescript
288
+ import { ScannerError, ErrorCode } from 'id-scanner-lib';
289
+
290
+ try {
291
+ await faceModule.initialize();
292
+ } catch (error) {
293
+ if (error instanceof ScannerError) {
294
+ switch (error.code) {
295
+ case ErrorCode.CAMERA_NOT_FOUND:
296
+ // 处理摄像头未找到
297
+ break;
298
+ case ErrorCode.PERMISSION_DENIED:
299
+ // 处理权限被拒绝
300
+ break;
301
+ case ErrorCode.MODEL_LOAD_FAILED:
302
+ // 处理模型加载失败
303
+ break;
304
+ }
305
+ }
306
+ }
307
+ ```
434
308
 
435
- ## 性能优化建议
309
+ ### 错误代码
436
310
 
437
- 1. **按需加载**:仅引入所需模块,减少首次加载时间
438
- 2. **预加载模型**:提前加载OCR模型,避免首次识别延迟
439
- 3. **适当降低分辨率**:处理前将图像缩小到合适尺寸(约1000px宽)
440
- 4. **开启缓存**:对于相似图像,启用结果缓存
441
- 5. **使用Web Worker**:处理大量图像时开启多线程
311
+ | 代码 | 说明 |
312
+ |------|------|
313
+ | `CAMERA_NOT_FOUND` | 摄像头未找到 |
314
+ | `PERMISSION_DENIED` | 权限被拒绝 |
315
+ | `MODEL_LOAD_FAILED` | 模型加载失败 |
316
+ | `INITIALIZATION_FAILED` | 初始化失败 |
317
+ | `PROCESSING_FAILED` | 处理失败 |
318
+ | `DISPOSED` | 模块已释放 |
442
319
 
443
- ## 应用场景
320
+ ## 性能调优
444
321
 
445
- - **网上银行身份验证**:快速验证用户身份信息,检测伪造证件
446
- - **酒店登记系统**:自动录入住客信息并验证证件真伪
447
- - **自助服务终端**:无需人工,自动处理证件信息
448
- - **企业内部系统**:员工证件信息采集与验证
449
- - **活动签到系统**:快速扫码签到与证件登记
322
+ ### 1. 调整检测频率
450
323
 
451
- ## 发布指南
324
+ ```typescript
325
+ const faceModule = new FaceModule({
326
+ // 降低检测频率以提升性能
327
+ detectionFrequency: 100, // ms
328
+ });
329
+ ```
452
330
 
453
- ### 发布到NPM
331
+ ### 2. 缩小检测区域
454
332
 
455
- ```bash
456
- # 1. 确保版本号正确
457
- npm version [patch|minor|major]
333
+ ```typescript
334
+ const faceModule = new FaceModule({
335
+ // 只检测画面中心区域
336
+ detectionRegion: {
337
+ x: 0.25,
338
+ y: 0.25,
339
+ width: 0.5,
340
+ height: 0.5
341
+ }
342
+ });
343
+ ```
458
344
 
459
- # 2. 构建生产版本
460
- npm run build:prod
345
+ ### 3. 使用 Web Worker
461
346
 
462
- # 3. 发布到NPM
463
- npm publish
347
+ ```typescript
348
+ // 身份证识别使用 Web Worker,不阻塞主线程
349
+ const idCardModule = new IDCardModule({
350
+ useWorker: true
351
+ });
352
+ ```
464
353
 
465
- # 4. 生成标签
466
- git push origin --tags
354
+ ### 4. 模型选择
355
+
356
+ ```typescript
357
+ const faceModule = new FaceModule({
358
+ // 使用轻量级模型
359
+ modelType: 'tiny',
360
+ // 或者使用完整模型(更准确但更慢)
361
+ // modelType: 'full'
362
+ });
467
363
  ```
468
364
 
469
- ### 发布到GitHub
365
+ ## 浏览器兼容性
470
366
 
471
- ```bash
472
- # 1. 提交代码变更
473
- git add .
474
- git commit -m "发布 v1.x.x"
367
+ | 浏览器 | 最低版本 | 支持情况 |
368
+ |--------|---------|---------|
369
+ | Chrome | 80+ | ✅ 完全支持 |
370
+ | Firefox | 75+ | ✅ 完全支持 |
371
+ | Safari | 14+ | ✅ 完全支持 |
372
+ | Edge | 80+ | ✅ 完全支持 |
373
+ | iOS Safari | 14+ | ✅ 完全支持 |
374
+ | Android Chrome | 80+ | ✅ 完全支持 |
375
+
376
+ ### Polyfill
377
+
378
+ 如需支持旧版浏览器,请添加以下 polyfill:
475
379
 
476
- # 2. 推送到GitHub
477
- git push origin main
380
+ ```html
381
+ <script src="https://polyfill.io/v3/polyfill.min.js"></script>
382
+ ```
478
383
 
479
- # 3. 创建Release
480
- # 访问 https://github.com/agions/id-scanner-lib/releases/new
481
- # 选择对应的标签,填写Release说明
384
+ ## 项目结构
385
+
386
+ ```
387
+ src/
388
+ ├── core/ # 核心功能
389
+ │ ├── camera-manager.ts # 摄像头管理
390
+ │ ├── config.ts # 配置管理
391
+ │ ├── logger.ts # 日志系统
392
+ │ └── loading-state.ts # 加载状态
393
+ ├── modules/ # 功能模块
394
+ │ ├── face/ # 人脸模块
395
+ │ ├── id-card/ # 身份证模块
396
+ │ └── qrcode/ # 二维码模块
397
+ ├── utils/ # 工具函数
398
+ │ ├── retry.ts # 重试机制
399
+ │ └── error-handler.ts # 错误处理
400
+ └── types/ # 类型定义
482
401
  ```
483
402
 
484
403
  ## 贡献指南
485
404
 
486
- 欢迎贡献代码、报告问题或提出新功能建议。请通过GitHub Issues或Pull Requests参与项目。
405
+ 欢迎提交 Issue 和 Pull Request!
487
406
 
488
- 1. Fork项目仓库
489
- 2. 创建你的特性分支 (`git checkout -b feature/amazing-feature`)
490
- 3. 提交你的更改 (`git commit -m '添加一些很棒的功能'`)
491
- 4. 推送到分支 (`git push origin feature/amazing-feature`)
492
- 5. 打开Pull Request
407
+ 1. Fork 本仓库
408
+ 2. 创建特性分支 (`git checkout -b feature/xxx`)
409
+ 3. 提交更改 (`git commit -m 'Add xxx'`)
410
+ 4. 推送分支 (`git push origin feature/xxx`)
411
+ 5. 创建 Pull Request
493
412
 
494
413
  ## 许可证
495
414
 
496
- 本项目采用MIT许可证。详见[LICENSE](LICENSE)文件。
415
+ MIT License
497
416
 
498
- ---
417
+ ## 更新日志
499
418
 
500
- <p align="center">
501
- <a href="https://github.com/agions/id-scanner-lib">GitHub</a> •
502
- <a href="https://www.npmjs.com/package/id-scanner-lib">NPM</a> •
503
- <a href="https://github.com/agions/id-scanner-lib/issues">Issues</a> •
504
- <a href="https://github.com/agions/id-scanner-lib/releases">Releases</a>
505
- </p>
419
+ See [CHANGELOG](./CHANGELOG.md)