id-scanner-lib 1.0.0 → 1.1.1
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 +96 -0
- package/dist/core.d.ts +77 -0
- package/dist/id-recognition/data-extractor.d.ts +31 -0
- package/dist/id-recognition/id-detector.d.ts +25 -1
- package/dist/id-scanner-core.esm.js +10710 -0
- package/dist/id-scanner-core.esm.js.map +1 -0
- package/dist/id-scanner-core.js +10722 -0
- package/dist/id-scanner-core.js.map +1 -0
- package/dist/id-scanner-core.min.js +9 -0
- package/dist/id-scanner-core.min.js.map +1 -0
- package/dist/id-scanner-ocr.esm.js +914 -0
- package/dist/id-scanner-ocr.esm.js.map +1 -0
- package/dist/id-scanner-ocr.js +923 -0
- package/dist/id-scanner-ocr.js.map +1 -0
- package/dist/id-scanner-ocr.min.js +9 -0
- package/dist/id-scanner-ocr.min.js.map +1 -0
- package/dist/id-scanner-qr.esm.js +613 -0
- package/dist/id-scanner-qr.esm.js.map +1 -0
- package/dist/id-scanner-qr.js +622 -0
- package/dist/id-scanner-qr.js.map +1 -0
- package/dist/id-scanner-qr.min.js +9 -0
- package/dist/id-scanner-qr.min.js.map +1 -0
- package/dist/id-scanner.js +1243 -94656
- package/dist/id-scanner.js.map +1 -1
- package/dist/id-scanner.min.js +7 -7
- package/dist/id-scanner.min.js.map +1 -1
- package/dist/index-umd.d.ts +96 -0
- package/dist/index.d.ts +23 -88
- package/dist/ocr-module.d.ts +67 -0
- package/dist/qr-module.d.ts +68 -0
- package/dist/types/core.d.ts +77 -0
- package/dist/types/demo/demo.d.ts +14 -0
- package/dist/types/id-recognition/data-extractor.d.ts +105 -0
- package/dist/types/id-recognition/id-detector.d.ts +100 -0
- package/dist/types/id-recognition/ocr-processor.d.ts +64 -0
- package/dist/types/index-umd.d.ts +96 -0
- package/dist/types/index.d.ts +78 -0
- package/dist/types/ocr-module.d.ts +67 -0
- package/dist/types/qr-module.d.ts +68 -0
- package/dist/types/scanner/barcode-scanner.d.ts +90 -0
- package/dist/types/scanner/qr-scanner.d.ts +80 -0
- package/dist/types/utils/camera.d.ts +81 -0
- package/dist/types/utils/image-processing.d.ts +75 -0
- package/dist/types/utils/types.d.ts +65 -0
- package/dist/utils/camera.d.ts +18 -13
- package/dist/utils/types.d.ts +6 -6
- package/package.json +25 -4
- package/src/core.ts +138 -0
- package/src/id-recognition/data-extractor.ts +97 -0
- package/src/id-recognition/id-detector.ts +20 -2
- package/src/id-recognition/ocr-processor.ts +3 -6
- package/src/index-umd.ts +240 -0
- package/src/index.ts +125 -139
- package/src/ocr-module.ts +139 -0
- package/src/qr-module.ts +129 -0
- package/src/utils/camera.ts +61 -36
- package/src/utils/types.ts +23 -6
package/README.md
CHANGED
|
@@ -37,6 +37,49 @@
|
|
|
37
37
|
npm install id-scanner-lib
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
+
## 优化引入方式
|
|
41
|
+
|
|
42
|
+
本库支持多种引入方式,可根据实际需求选择最优方案,减小应用体积:
|
|
43
|
+
|
|
44
|
+
### 完整引入
|
|
45
|
+
```javascript
|
|
46
|
+
// 引入完整包(包含全部功能)
|
|
47
|
+
import { IDScanner } from 'id-scanner-lib';
|
|
48
|
+
|
|
49
|
+
const scanner = new IDScanner({
|
|
50
|
+
onQRCodeScanned: (result) => console.log('扫描结果:', result),
|
|
51
|
+
onIDCardScanned: (info) => console.log('身份证信息:', info)
|
|
52
|
+
});
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### 按需引入
|
|
56
|
+
```javascript
|
|
57
|
+
// 只引入二维码相关功能,减小应用体积
|
|
58
|
+
import { ScannerModule } from 'id-scanner-lib/qr';
|
|
59
|
+
|
|
60
|
+
const qrScanner = new ScannerModule({
|
|
61
|
+
onQRCodeScanned: (result) => console.log('二维码:', result)
|
|
62
|
+
});
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
```javascript
|
|
66
|
+
// 只引入OCR身份证识别功能
|
|
67
|
+
import { OCRModule } from 'id-scanner-lib/ocr';
|
|
68
|
+
|
|
69
|
+
const ocrScanner = new OCRModule({
|
|
70
|
+
onIDCardScanned: (info) => console.log('身份证信息:', info)
|
|
71
|
+
});
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
```javascript
|
|
75
|
+
// 只引入轻量核心功能(无OCR)
|
|
76
|
+
import { IDScannerCore } from 'id-scanner-lib/core';
|
|
77
|
+
|
|
78
|
+
const coreScanner = new IDScannerCore({
|
|
79
|
+
onQRCodeScanned: (result) => console.log('扫描结果:', result)
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
40
83
|
## 快速开始
|
|
41
84
|
|
|
42
85
|
### 基本用法
|
|
@@ -263,6 +306,59 @@ A: 库的大小约为1MB,主要是因为包含OCR引擎。可以考虑按需
|
|
|
263
306
|
| 安卓WebView | 60+ | 需要应用授予相机权限 |
|
|
264
307
|
| iOS WebView | 11+ | 需要用户主动点击激活相机 |
|
|
265
308
|
|
|
309
|
+
## 体积优化与性能优化
|
|
310
|
+
|
|
311
|
+
本库设计时考虑了多种使用场景和设备性能限制,提供了多种优化选项:
|
|
312
|
+
|
|
313
|
+
### 包体积优化
|
|
314
|
+
1. **按需引入模块**:基于ES模块可以实现tree-shaking,只引入需要的功能,如:
|
|
315
|
+
```javascript
|
|
316
|
+
// 只需要二维码功能时,包体积减小约65%
|
|
317
|
+
import { ScannerModule } from 'id-scanner-lib/qr';
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
2. **延迟加载OCR引擎**:OCR引擎体积较大,默认采用延迟加载策略:
|
|
321
|
+
```javascript
|
|
322
|
+
// OCR引擎只在实际使用身份证识别功能时才会加载
|
|
323
|
+
const scanner = new IDScanner();
|
|
324
|
+
|
|
325
|
+
// 这一步不会加载OCR引擎
|
|
326
|
+
await scanner.startQRScanner(videoElement);
|
|
327
|
+
|
|
328
|
+
// 只有在需要识别身份证时才会加载OCR引擎
|
|
329
|
+
await scanner.startIDCardScanner(videoElement);
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
3. **分包构建**:完整库约1MB,但按功能拆分后最小可达200KB:
|
|
333
|
+
- 核心包 (无OCR): 约200KB
|
|
334
|
+
- 二维码扫描: 约350KB
|
|
335
|
+
- OCR模块: 约650KB
|
|
336
|
+
|
|
337
|
+
4. **CDN加载**:可以通过CDN加载以加快访问速度:
|
|
338
|
+
```html
|
|
339
|
+
<!-- 完整版 -->
|
|
340
|
+
<script src="https://cdn.jsdelivr.net/npm/id-scanner-lib/dist/id-scanner.min.js"></script>
|
|
341
|
+
|
|
342
|
+
<!-- 或仅加载核心功能 -->
|
|
343
|
+
<script src="https://cdn.jsdelivr.net/npm/id-scanner-lib/dist/id-scanner-core.min.js"></script>
|
|
344
|
+
```
|
|
345
|
+
|
|
346
|
+
5. **版本更新记录**:
|
|
347
|
+
- v1.0.0: 首次发布版本
|
|
348
|
+
- v1.1.0: 模块化重构,实现按需加载,大幅减小体积
|
|
349
|
+
|
|
350
|
+
### 运行时性能
|
|
351
|
+
1. **摄像头参数自动优化**:根据设备性能自动调整摄像头分辨率
|
|
352
|
+
2. **OCR引擎缓存**:OCR引擎加载后会缓存,避免重复加载
|
|
353
|
+
3. **资源释放**:不使用时自动释放内存资源
|
|
354
|
+
4. **图像预处理**:针对不同光线条件优化识别准确率
|
|
355
|
+
|
|
356
|
+
### 推荐做法
|
|
357
|
+
- 在应用初始化阶段,先使用核心功能
|
|
358
|
+
- 为OCR等重型功能设置单独的入口或交互按钮
|
|
359
|
+
- 在用户可能需要OCR前预加载,但不立即初始化
|
|
360
|
+
- 实现加载状态UI反馈,提升用户体验
|
|
361
|
+
|
|
266
362
|
## 开发与贡献
|
|
267
363
|
|
|
268
364
|
### 本地开发
|
package/dist/core.d.ts
ADDED
|
@@ -0,0 +1,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 轻量级扫描库核心
|
|
3
|
+
* @description 不包含OCR功能的轻量版,只提供二维码和条形码扫描功能
|
|
4
|
+
* @module IDScannerCore
|
|
5
|
+
* @version 1.0.0
|
|
6
|
+
* @license MIT
|
|
7
|
+
*/
|
|
8
|
+
import { QRScannerOptions } from './scanner/qr-scanner';
|
|
9
|
+
import { BarcodeScannerOptions } from './scanner/barcode-scanner';
|
|
10
|
+
import { CameraOptions } from './utils/camera';
|
|
11
|
+
/**
|
|
12
|
+
* IDScannerCore配置选项
|
|
13
|
+
*/
|
|
14
|
+
export interface IDScannerCoreOptions {
|
|
15
|
+
cameraOptions?: CameraOptions;
|
|
16
|
+
qrScannerOptions?: QRScannerOptions;
|
|
17
|
+
barcodeScannerOptions?: BarcodeScannerOptions;
|
|
18
|
+
onQRCodeScanned?: (result: string) => void;
|
|
19
|
+
onBarcodeScanned?: (result: string) => void;
|
|
20
|
+
onError?: (error: Error) => void;
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* IDScannerCore 轻量级扫描类
|
|
24
|
+
*
|
|
25
|
+
* 提供二维码和条形码扫描功能,不包含OCR身份证识别功能
|
|
26
|
+
*/
|
|
27
|
+
export declare class IDScannerCore {
|
|
28
|
+
private options;
|
|
29
|
+
private qrScanner;
|
|
30
|
+
private barcodeScanner;
|
|
31
|
+
private camera;
|
|
32
|
+
private scanMode;
|
|
33
|
+
private videoElement;
|
|
34
|
+
/**
|
|
35
|
+
* 构造函数
|
|
36
|
+
* @param options 配置选项
|
|
37
|
+
*/
|
|
38
|
+
constructor(options?: IDScannerCoreOptions);
|
|
39
|
+
/**
|
|
40
|
+
* 初始化扫描器
|
|
41
|
+
*/
|
|
42
|
+
initialize(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* 启动二维码扫描
|
|
45
|
+
* @param videoElement HTML视频元素
|
|
46
|
+
*/
|
|
47
|
+
startQRScanner(videoElement: HTMLVideoElement): Promise<void>;
|
|
48
|
+
/**
|
|
49
|
+
* 启动条形码扫描
|
|
50
|
+
* @param videoElement HTML视频元素
|
|
51
|
+
*/
|
|
52
|
+
startBarcodeScanner(videoElement: HTMLVideoElement): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* 停止扫描
|
|
55
|
+
*/
|
|
56
|
+
stop(): void;
|
|
57
|
+
/**
|
|
58
|
+
* 处理二维码扫描结果
|
|
59
|
+
*/
|
|
60
|
+
private handleQRScan;
|
|
61
|
+
/**
|
|
62
|
+
* 处理条形码扫描结果
|
|
63
|
+
*/
|
|
64
|
+
private handleBarcodeScan;
|
|
65
|
+
/**
|
|
66
|
+
* 处理错误
|
|
67
|
+
*/
|
|
68
|
+
private handleError;
|
|
69
|
+
/**
|
|
70
|
+
* 释放资源
|
|
71
|
+
*/
|
|
72
|
+
terminate(): Promise<void>;
|
|
73
|
+
}
|
|
74
|
+
export { QRScanner, QRScannerOptions } from './scanner/qr-scanner';
|
|
75
|
+
export { BarcodeScanner, BarcodeScannerOptions } from './scanner/barcode-scanner';
|
|
76
|
+
export { Camera, CameraOptions } from './utils/camera';
|
|
77
|
+
export { ImageProcessor } from './utils/image-processing';
|
|
@@ -71,4 +71,35 @@ export declare class DataExtractor {
|
|
|
71
71
|
* @returns {IDCardInfo} 增强后的身份证信息
|
|
72
72
|
*/
|
|
73
73
|
static enhanceIDCardInfo(ocrInfo: IDCardInfo, idNumber?: string): IDCardInfo;
|
|
74
|
+
/**
|
|
75
|
+
* 提取并验证身份证信息
|
|
76
|
+
*
|
|
77
|
+
* @param idCardInfo 初步提取的身份证信息
|
|
78
|
+
* @returns 验证和增强后的身份证信息
|
|
79
|
+
*/
|
|
80
|
+
extractAndValidate(idCardInfo: IDCardInfo): IDCardInfo;
|
|
81
|
+
/**
|
|
82
|
+
* 规范化身份证号码
|
|
83
|
+
*/
|
|
84
|
+
private normalizeIDNumber;
|
|
85
|
+
/**
|
|
86
|
+
* 验证身份证号码是否有效
|
|
87
|
+
*/
|
|
88
|
+
private validateIDNumber;
|
|
89
|
+
/**
|
|
90
|
+
* 从身份证号中提取出生日期
|
|
91
|
+
*/
|
|
92
|
+
private extractBirthDateFromID;
|
|
93
|
+
/**
|
|
94
|
+
* 从身份证号中提取性别信息
|
|
95
|
+
*/
|
|
96
|
+
private extractGenderFromID;
|
|
97
|
+
/**
|
|
98
|
+
* 规范化日期格式
|
|
99
|
+
*/
|
|
100
|
+
private normalizeDate;
|
|
101
|
+
/**
|
|
102
|
+
* 规范化地址信息
|
|
103
|
+
*/
|
|
104
|
+
private normalizeAddress;
|
|
74
105
|
}
|
|
@@ -3,7 +3,31 @@
|
|
|
3
3
|
* @description 提供自动检测和定位图像中的身份证功能
|
|
4
4
|
* @module IDCardDetector
|
|
5
5
|
*/
|
|
6
|
-
|
|
6
|
+
/**
|
|
7
|
+
* DetectionResult接口
|
|
8
|
+
*
|
|
9
|
+
* 包含身份证检测结果信息
|
|
10
|
+
*/
|
|
11
|
+
export interface DetectionResult {
|
|
12
|
+
success: boolean;
|
|
13
|
+
imageData?: ImageData;
|
|
14
|
+
boundingBox?: {
|
|
15
|
+
x: number;
|
|
16
|
+
y: number;
|
|
17
|
+
width: number;
|
|
18
|
+
height: number;
|
|
19
|
+
};
|
|
20
|
+
confidence?: number;
|
|
21
|
+
message?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* IDCardDetector配置选项
|
|
25
|
+
*/
|
|
26
|
+
export interface IDCardDetectorOptions {
|
|
27
|
+
onDetection?: (result: DetectionResult) => void;
|
|
28
|
+
onError?: (error: Error) => void;
|
|
29
|
+
detectionInterval?: number;
|
|
30
|
+
}
|
|
7
31
|
/**
|
|
8
32
|
* 身份证检测器类
|
|
9
33
|
*
|