id-scanner-lib 1.3.2 → 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 -77
- 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/modules/id-card/anti-fake-detector.ts +732 -0
- package/src/modules/id-card/id-card-detector.ts +474 -0
- package/src/modules/id-card/index.ts +425 -0
- package/src/modules/id-card/ocr-processor.ts +538 -0
- 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/browser-image-compression.d.ts +19 -0
- package/src/types/tesseract.d.ts +280 -0
- package/src/utils/image-processing.ts +432 -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 -11076
- package/dist/id-scanner-core.esm.js.map +0 -1
- package/dist/id-scanner-core.js +0 -11088
- package/dist/id-scanner-core.js.map +0 -1
- package/dist/id-scanner-core.min.js +0 -1
- package/dist/id-scanner-core.min.js.map +0 -1
- package/dist/id-scanner-ocr.esm.js +0 -1802
- package/dist/id-scanner-ocr.esm.js.map +0 -1
- package/dist/id-scanner-ocr.js +0 -1811
- package/dist/id-scanner-ocr.js.map +0 -1
- package/dist/id-scanner-ocr.min.js +0 -1
- package/dist/id-scanner-ocr.min.js.map +0 -1
- package/dist/id-scanner-qr.esm.js +0 -1023
- package/dist/id-scanner-qr.esm.js.map +0 -1
- package/dist/id-scanner-qr.js +0 -1032
- package/dist/id-scanner-qr.js.map +0 -1
- package/dist/id-scanner-qr.min.js +0 -1
- package/dist/id-scanner-qr.min.js.map +0 -1
- package/dist/id-scanner.js +0 -3740
- package/dist/id-scanner.js.map +0 -1
- package/dist/id-scanner.min.js +0 -1
- package/dist/id-scanner.min.js.map +0 -1
- package/src/core.ts +0 -138
- package/src/demo/demo.ts +0 -204
- package/src/id-recognition/anti-fake-detector.ts +0 -317
- package/src/id-recognition/data-extractor.ts +0 -262
- package/src/id-recognition/id-detector.ts +0 -363
- package/src/id-recognition/ocr-processor.ts +0 -334
- 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,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 人脸模块类型定义
|
|
3
|
+
* @description 人脸模块相关的类型和接口定义
|
|
4
|
+
* @module modules/face/types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 人脸检测结果
|
|
8
|
+
*/
|
|
9
|
+
export interface FaceDetectionResult {
|
|
10
|
+
/** 人脸边界框 */
|
|
11
|
+
boundingBox: {
|
|
12
|
+
x: number;
|
|
13
|
+
y: number;
|
|
14
|
+
width: number;
|
|
15
|
+
height: number;
|
|
16
|
+
};
|
|
17
|
+
/** 人脸特征点 */
|
|
18
|
+
landmarks?: {
|
|
19
|
+
/** 左眼 */
|
|
20
|
+
leftEye: {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
};
|
|
24
|
+
/** 右眼 */
|
|
25
|
+
rightEye: {
|
|
26
|
+
x: number;
|
|
27
|
+
y: number;
|
|
28
|
+
};
|
|
29
|
+
/** 鼻子 */
|
|
30
|
+
nose: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
};
|
|
34
|
+
/** 嘴巴 */
|
|
35
|
+
mouth: {
|
|
36
|
+
x: number;
|
|
37
|
+
y: number;
|
|
38
|
+
};
|
|
39
|
+
/** 下巴 */
|
|
40
|
+
chin: {
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/** 人脸角度 */
|
|
46
|
+
angle?: {
|
|
47
|
+
/** 俯仰角 */
|
|
48
|
+
pitch: number;
|
|
49
|
+
/** 偏航角 */
|
|
50
|
+
yaw: number;
|
|
51
|
+
/** 翻滚角 */
|
|
52
|
+
roll: number;
|
|
53
|
+
};
|
|
54
|
+
/** 人脸属性 */
|
|
55
|
+
attributes?: {
|
|
56
|
+
/** 性别 */
|
|
57
|
+
gender?: {
|
|
58
|
+
/** 性别值 */
|
|
59
|
+
value: 'male' | 'female';
|
|
60
|
+
/** 置信度 */
|
|
61
|
+
confidence: number;
|
|
62
|
+
};
|
|
63
|
+
/** 年龄 */
|
|
64
|
+
age?: {
|
|
65
|
+
/** 年龄值 */
|
|
66
|
+
value: number;
|
|
67
|
+
/** 置信度 */
|
|
68
|
+
confidence: number;
|
|
69
|
+
};
|
|
70
|
+
/** 表情 */
|
|
71
|
+
emotion?: {
|
|
72
|
+
/** 表情值 */
|
|
73
|
+
value: 'neutral' | 'happiness' | 'surprise' | 'sadness' | 'anger' | 'disgust' | 'fear' | 'contempt';
|
|
74
|
+
/** 置信度 */
|
|
75
|
+
confidence: number;
|
|
76
|
+
};
|
|
77
|
+
};
|
|
78
|
+
/** 活体检测结果 */
|
|
79
|
+
liveness?: {
|
|
80
|
+
/** 是否通过活体检测 */
|
|
81
|
+
passed: boolean;
|
|
82
|
+
/** 活体检测分数 */
|
|
83
|
+
score: number;
|
|
84
|
+
/** 活体检测类型 */
|
|
85
|
+
type: 'blink' | 'mouth' | 'head' | 'passive';
|
|
86
|
+
};
|
|
87
|
+
/** 人脸图像 */
|
|
88
|
+
image?: ImageData;
|
|
89
|
+
/** 置信度 */
|
|
90
|
+
confidence: number;
|
|
91
|
+
}
|
|
92
|
+
/**
|
|
93
|
+
* 人脸比对结果
|
|
94
|
+
*/
|
|
95
|
+
export interface FaceComparisonResult {
|
|
96
|
+
/** 是否匹配 */
|
|
97
|
+
isMatch: boolean;
|
|
98
|
+
/** 相似度分数 */
|
|
99
|
+
similarity: number;
|
|
100
|
+
/** 置信度 */
|
|
101
|
+
confidence: number;
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* 人脸模块配置选项
|
|
105
|
+
*/
|
|
106
|
+
export interface FaceModuleOptions {
|
|
107
|
+
/** 是否启用模块 */
|
|
108
|
+
enabled?: boolean;
|
|
109
|
+
/** 检测器配置 */
|
|
110
|
+
detector?: {
|
|
111
|
+
/** 最小置信度 */
|
|
112
|
+
minConfidence?: number;
|
|
113
|
+
/** 是否检测特征点 */
|
|
114
|
+
detectLandmarks?: boolean;
|
|
115
|
+
/** 是否检测属性 */
|
|
116
|
+
detectAttributes?: boolean;
|
|
117
|
+
/** 是否返回人脸图像 */
|
|
118
|
+
returnFaceImage?: boolean;
|
|
119
|
+
};
|
|
120
|
+
/** 活体检测配置 */
|
|
121
|
+
liveness?: {
|
|
122
|
+
/** 是否启用活体检测 */
|
|
123
|
+
enabled?: boolean;
|
|
124
|
+
/** 活体检测类型 */
|
|
125
|
+
type?: 'blink' | 'mouth' | 'head' | 'passive';
|
|
126
|
+
/** 最小置信度 */
|
|
127
|
+
minConfidence?: number;
|
|
128
|
+
/** 检测超时时间(毫秒) */
|
|
129
|
+
timeout?: number;
|
|
130
|
+
};
|
|
131
|
+
/** 人脸比对配置 */
|
|
132
|
+
comparison?: {
|
|
133
|
+
/** 最小相似度阈值 */
|
|
134
|
+
minSimilarity?: number;
|
|
135
|
+
};
|
|
136
|
+
}
|
|
@@ -0,0 +1,170 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 身份证防伪检测模块
|
|
3
|
+
* @description 提供身份证防伪特征识别功能,区分真假身份证
|
|
4
|
+
* @module AntiFakeDetector
|
|
5
|
+
* @version 1.3.2
|
|
6
|
+
*/
|
|
7
|
+
import { Disposable } from "../../utils/resource-manager";
|
|
8
|
+
/**
|
|
9
|
+
* 防伪检测结果
|
|
10
|
+
*/
|
|
11
|
+
export interface AntiFakeDetectionResult {
|
|
12
|
+
isAuthentic: boolean;
|
|
13
|
+
confidence: number;
|
|
14
|
+
detectedFeatures: string[];
|
|
15
|
+
message: string;
|
|
16
|
+
processingTime?: number;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 防伪检测器配置选项
|
|
20
|
+
*/
|
|
21
|
+
export interface AntiFakeDetectorOptions {
|
|
22
|
+
sensitivity?: number;
|
|
23
|
+
enableCache?: boolean;
|
|
24
|
+
cacheSize?: number;
|
|
25
|
+
logger?: (message: string) => void;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 身份证防伪特征检测器
|
|
29
|
+
*
|
|
30
|
+
* 基于图像分析技术检测身份证中的多种防伪特征,包括:
|
|
31
|
+
* 1. 荧光油墨特征
|
|
32
|
+
* 2. 微缩文字
|
|
33
|
+
* 3. 光变图案
|
|
34
|
+
* 4. 雕刻凹印
|
|
35
|
+
* 5. 隐形图案
|
|
36
|
+
*
|
|
37
|
+
* @example
|
|
38
|
+
* ```typescript
|
|
39
|
+
* // 创建防伪检测器
|
|
40
|
+
* const antiFakeDetector = new AntiFakeDetector({
|
|
41
|
+
* sensitivity: 0.8,
|
|
42
|
+
* enableCache: true
|
|
43
|
+
* });
|
|
44
|
+
*
|
|
45
|
+
* // 分析身份证图像
|
|
46
|
+
* const imageData = await ImageProcessor.createImageDataFromFile(idCardFile);
|
|
47
|
+
* const result = await antiFakeDetector.detect(imageData);
|
|
48
|
+
*
|
|
49
|
+
* if (result.isAuthentic) {
|
|
50
|
+
* console.log('身份证真实,检测到防伪特征:', result.detectedFeatures);
|
|
51
|
+
* } else {
|
|
52
|
+
* console.log('警告!', result.message);
|
|
53
|
+
* }
|
|
54
|
+
* ```
|
|
55
|
+
*/
|
|
56
|
+
export declare class AntiFakeDetector implements Disposable {
|
|
57
|
+
private options;
|
|
58
|
+
private resultCache;
|
|
59
|
+
/**
|
|
60
|
+
* 创建身份证防伪检测器实例
|
|
61
|
+
*
|
|
62
|
+
* @param options 防伪检测器配置
|
|
63
|
+
*/
|
|
64
|
+
constructor(options?: AntiFakeDetectorOptions);
|
|
65
|
+
/**
|
|
66
|
+
* 检测身份证图像的防伪特征
|
|
67
|
+
*
|
|
68
|
+
* @param imageData 身份证图像数据
|
|
69
|
+
* @returns 防伪检测结果
|
|
70
|
+
*/
|
|
71
|
+
detect(imageData: ImageData): Promise<AntiFakeDetectionResult>;
|
|
72
|
+
/**
|
|
73
|
+
* 增强身份证图像中的防伪特征
|
|
74
|
+
*
|
|
75
|
+
* @param imageData 原始图像数据
|
|
76
|
+
* @returns 增强后的图像数据
|
|
77
|
+
* @private
|
|
78
|
+
*/
|
|
79
|
+
private enhanceAntiFakeFeatures;
|
|
80
|
+
/**
|
|
81
|
+
* 检测荧光油墨特征
|
|
82
|
+
*
|
|
83
|
+
* @param imageData 图像数据
|
|
84
|
+
* @returns [特征名称, 是否检测到, 置信度]
|
|
85
|
+
* @private
|
|
86
|
+
*/
|
|
87
|
+
private detectUVInkFeatures;
|
|
88
|
+
/**
|
|
89
|
+
* 从图像数据中提取指定颜色通道
|
|
90
|
+
* @param imageData 原始图像数据
|
|
91
|
+
* @param channel 通道名称(red, green, blue)
|
|
92
|
+
*/
|
|
93
|
+
private extractColorChannel;
|
|
94
|
+
/**
|
|
95
|
+
* 分析颜色通道分布特征
|
|
96
|
+
* @param channelData 颜色通道数据
|
|
97
|
+
*/
|
|
98
|
+
private analyzeChannelDistribution;
|
|
99
|
+
/**
|
|
100
|
+
* 平滑直方图以减少噪声
|
|
101
|
+
*/
|
|
102
|
+
private smoothHistogram;
|
|
103
|
+
/**
|
|
104
|
+
* 检测图像中的荧光颜色模式
|
|
105
|
+
*/
|
|
106
|
+
private detectUVColorPattern;
|
|
107
|
+
/**
|
|
108
|
+
* 分析头像区域是否存在荧光特征
|
|
109
|
+
* 这个方法用于检测伪造的身份证,因为头像区域不应该有荧光特征
|
|
110
|
+
*/
|
|
111
|
+
private analyzePortraitArea;
|
|
112
|
+
/**
|
|
113
|
+
* 检测微缩文字
|
|
114
|
+
*
|
|
115
|
+
* @param imageData 图像数据
|
|
116
|
+
* @returns [特征名称, 是否检测到, 置信度]
|
|
117
|
+
* @private
|
|
118
|
+
*/
|
|
119
|
+
private detectMicroText;
|
|
120
|
+
/**
|
|
121
|
+
* 分析边缘图像的频率特征
|
|
122
|
+
* 微缩文字呈现高频的边缘过渡
|
|
123
|
+
*/
|
|
124
|
+
private analyzeFrequencyFeatures;
|
|
125
|
+
/**
|
|
126
|
+
* 检测微缩文字区域
|
|
127
|
+
* 微缩文字通常呈现呈现规则的组合排列
|
|
128
|
+
*/
|
|
129
|
+
private detectMicroTextRegions;
|
|
130
|
+
/**
|
|
131
|
+
* 深度优先搜索连通的边缘区域
|
|
132
|
+
*/
|
|
133
|
+
private floodFillEdge;
|
|
134
|
+
/**
|
|
135
|
+
* 获取点集的外接矩形
|
|
136
|
+
*/
|
|
137
|
+
private getBoundingBox;
|
|
138
|
+
/**
|
|
139
|
+
* 检测光变图案
|
|
140
|
+
*
|
|
141
|
+
* @param imageData 图像数据
|
|
142
|
+
* @returns [特征名称, 是否检测到, 置信度]
|
|
143
|
+
* @private
|
|
144
|
+
*/
|
|
145
|
+
private detectOpticalVariable;
|
|
146
|
+
/**
|
|
147
|
+
* 检测凹印雕刻特征
|
|
148
|
+
*
|
|
149
|
+
* @param imageData 图像数据
|
|
150
|
+
* @returns [特征名称, 是否检测到, 置信度]
|
|
151
|
+
* @private
|
|
152
|
+
*/
|
|
153
|
+
private detectIntaglioPrinting;
|
|
154
|
+
/**
|
|
155
|
+
* 检测隐形图案(幽灵图像)
|
|
156
|
+
*
|
|
157
|
+
* @param imageData 图像数据
|
|
158
|
+
* @returns [特征名称, 是否检测到, 置信度]
|
|
159
|
+
* @private
|
|
160
|
+
*/
|
|
161
|
+
private detectGhostImage;
|
|
162
|
+
/**
|
|
163
|
+
* 清除结果缓存
|
|
164
|
+
*/
|
|
165
|
+
clearCache(): void;
|
|
166
|
+
/**
|
|
167
|
+
* 释放资源
|
|
168
|
+
*/
|
|
169
|
+
dispose(): void;
|
|
170
|
+
}
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 身份证检测器
|
|
3
|
+
* @description 提供身份证检测和解析功能
|
|
4
|
+
* @module modules/id-card/id-card-detector
|
|
5
|
+
*/
|
|
6
|
+
import { EventEmitter } from '../../core/event-emitter';
|
|
7
|
+
import { Result } from '../../core/result';
|
|
8
|
+
import { IDCardInfo } from './types';
|
|
9
|
+
/**
|
|
10
|
+
* 身份证检测器配置选项
|
|
11
|
+
*/
|
|
12
|
+
export interface IDCardDetectorOptions {
|
|
13
|
+
/** 是否启用 */
|
|
14
|
+
enabled?: boolean;
|
|
15
|
+
/** 最小置信度 */
|
|
16
|
+
minConfidence?: number;
|
|
17
|
+
/** 是否检测身份证类型 */
|
|
18
|
+
detectType?: boolean;
|
|
19
|
+
/** 是否检测边缘 */
|
|
20
|
+
detectEdge?: boolean;
|
|
21
|
+
/** 是否启用边缘检测(用于更精确的边缘检测) */
|
|
22
|
+
enableEdgeDetection?: boolean;
|
|
23
|
+
/** 是否启用OCR识别 */
|
|
24
|
+
enableOCR?: boolean;
|
|
25
|
+
/** 是否裁剪并校正图像 */
|
|
26
|
+
cropAndAlign?: boolean;
|
|
27
|
+
/** 是否启用防伪检测 */
|
|
28
|
+
enableAntiFake?: boolean;
|
|
29
|
+
/** 是否返回原始图像 */
|
|
30
|
+
returnImage?: boolean;
|
|
31
|
+
/** 模型路径 */
|
|
32
|
+
modelPath?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* 图像处理配置选项
|
|
36
|
+
*/
|
|
37
|
+
export interface ImageProcessOptions {
|
|
38
|
+
/** 是否进行预处理 */
|
|
39
|
+
preprocess?: boolean;
|
|
40
|
+
/** 是否校正图像 */
|
|
41
|
+
correctPerspective?: boolean;
|
|
42
|
+
/** 是否增强图像 */
|
|
43
|
+
enhance?: boolean;
|
|
44
|
+
/** 是否去噪 */
|
|
45
|
+
denoise?: boolean;
|
|
46
|
+
/** 是否二值化 */
|
|
47
|
+
binarize?: boolean;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* 身份证检测器类
|
|
51
|
+
*/
|
|
52
|
+
export declare class IDCardDetector extends EventEmitter {
|
|
53
|
+
private options;
|
|
54
|
+
private logger;
|
|
55
|
+
private initialized;
|
|
56
|
+
private models;
|
|
57
|
+
/**
|
|
58
|
+
* 构造函数
|
|
59
|
+
* @param options 配置选项
|
|
60
|
+
*/
|
|
61
|
+
constructor(options?: IDCardDetectorOptions);
|
|
62
|
+
/**
|
|
63
|
+
* 初始化检测器
|
|
64
|
+
*/
|
|
65
|
+
initialize(): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* 加载检测模型
|
|
68
|
+
* @private
|
|
69
|
+
*/
|
|
70
|
+
private loadDetectionModel;
|
|
71
|
+
/**
|
|
72
|
+
* 加载OCR模型
|
|
73
|
+
* @private
|
|
74
|
+
*/
|
|
75
|
+
private loadOCRModel;
|
|
76
|
+
/**
|
|
77
|
+
* 加载防伪模型
|
|
78
|
+
* @private
|
|
79
|
+
*/
|
|
80
|
+
private loadAntiFakeModel;
|
|
81
|
+
/**
|
|
82
|
+
* 处理图像
|
|
83
|
+
* @param image 图像源(可以是ImageData、HTMLImageElement、HTMLCanvasElement等)
|
|
84
|
+
* @param processOptions 图像处理选项
|
|
85
|
+
* @returns 处理结果
|
|
86
|
+
*/
|
|
87
|
+
processImage(image: ImageData | HTMLImageElement | HTMLCanvasElement, processOptions?: ImageProcessOptions): Promise<Result<IDCardInfo>>;
|
|
88
|
+
/**
|
|
89
|
+
* 预处理图像
|
|
90
|
+
* @param image 图像源
|
|
91
|
+
* @param options 处理选项
|
|
92
|
+
* @returns 处理后的图像
|
|
93
|
+
* @private
|
|
94
|
+
*/
|
|
95
|
+
private preprocessImage;
|
|
96
|
+
/**
|
|
97
|
+
* 检测身份证
|
|
98
|
+
* @param image 图像数据
|
|
99
|
+
* @returns 检测结果
|
|
100
|
+
* @private
|
|
101
|
+
*/
|
|
102
|
+
private detectIDCard;
|
|
103
|
+
/**
|
|
104
|
+
* 裁剪并校正图像
|
|
105
|
+
* @param image 图像数据
|
|
106
|
+
* @param edge 边缘信息
|
|
107
|
+
* @returns 校正后的图像
|
|
108
|
+
* @private
|
|
109
|
+
*/
|
|
110
|
+
private cropAndAlign;
|
|
111
|
+
/**
|
|
112
|
+
* 识别文字
|
|
113
|
+
* @param image 图像数据
|
|
114
|
+
* @param type 身份证类型
|
|
115
|
+
* @returns 识别结果
|
|
116
|
+
* @private
|
|
117
|
+
*/
|
|
118
|
+
private recognizeText;
|
|
119
|
+
/**
|
|
120
|
+
* 检测防伪特征
|
|
121
|
+
* @param image 图像数据
|
|
122
|
+
* @param detectionResult 检测结果
|
|
123
|
+
* @returns 防伪检测结果
|
|
124
|
+
* @private
|
|
125
|
+
*/
|
|
126
|
+
private detectAntiFake;
|
|
127
|
+
/**
|
|
128
|
+
* 释放资源
|
|
129
|
+
*/
|
|
130
|
+
dispose(): void;
|
|
131
|
+
}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 身份证模块入口
|
|
3
|
+
* @description 提供身份证识别和验证功能的模块入口
|
|
4
|
+
* @module modules/id-card
|
|
5
|
+
*/
|
|
6
|
+
import { BaseModule } from '../../core/base-module';
|
|
7
|
+
import { IDCardInfo, IDCardType, IDCardModuleOptions, IDCardVerificationResult } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* 身份证识别模块
|
|
10
|
+
* 提供身份证检测、OCR识别、防伪检测等功能
|
|
11
|
+
*/
|
|
12
|
+
export declare class IDCardModule extends BaseModule {
|
|
13
|
+
/** 模块名称 */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/** 模块配置 */
|
|
16
|
+
private options;
|
|
17
|
+
/** 身份证检测器 */
|
|
18
|
+
private detector;
|
|
19
|
+
/** OCR处理器 */
|
|
20
|
+
private ocrProcessor?;
|
|
21
|
+
/** 防伪检测器 */
|
|
22
|
+
private antiFakeDetector?;
|
|
23
|
+
/** 最后一次检测结果 */
|
|
24
|
+
private lastDetectionResult?;
|
|
25
|
+
/**
|
|
26
|
+
* 构造函数
|
|
27
|
+
* @param options 模块配置选项
|
|
28
|
+
*/
|
|
29
|
+
constructor(options?: IDCardModuleOptions);
|
|
30
|
+
/**
|
|
31
|
+
* 初始化模块
|
|
32
|
+
*/
|
|
33
|
+
initialize(): Promise<void>;
|
|
34
|
+
/**
|
|
35
|
+
* 识别身份证图像
|
|
36
|
+
* @param image 图像源
|
|
37
|
+
* @returns 识别结果
|
|
38
|
+
*/
|
|
39
|
+
recognize(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<IDCardInfo>;
|
|
40
|
+
/**
|
|
41
|
+
* 验证身份证信息
|
|
42
|
+
* @param idCardInfo 身份证信息
|
|
43
|
+
* @returns 验证结果
|
|
44
|
+
*/
|
|
45
|
+
verify(idCardInfo: IDCardInfo): IDCardVerificationResult;
|
|
46
|
+
/**
|
|
47
|
+
* 获取最后一次识别结果
|
|
48
|
+
*/
|
|
49
|
+
getLastRecognitionResult(): IDCardInfo | undefined;
|
|
50
|
+
/**
|
|
51
|
+
* 释放模块资源
|
|
52
|
+
*/
|
|
53
|
+
dispose(): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* 验证身份证号码是否有效
|
|
56
|
+
* @param idNumber 身份证号码
|
|
57
|
+
* @returns 是否有效
|
|
58
|
+
*/
|
|
59
|
+
private validateIDNumber;
|
|
60
|
+
/**
|
|
61
|
+
* 检查身份证是否过期
|
|
62
|
+
* @param validTo 有效期截止日期
|
|
63
|
+
* @returns 是否过期
|
|
64
|
+
*/
|
|
65
|
+
private isIDCardExpired;
|
|
66
|
+
/**
|
|
67
|
+
* 检测身份证
|
|
68
|
+
* @param image 图像源
|
|
69
|
+
* @returns 检测结果
|
|
70
|
+
*/
|
|
71
|
+
detect(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<{
|
|
72
|
+
success: boolean;
|
|
73
|
+
type?: IDCardType;
|
|
74
|
+
confidence: number;
|
|
75
|
+
croppedImage?: ImageData;
|
|
76
|
+
}>;
|
|
77
|
+
/**
|
|
78
|
+
* 将图像转换为 ImageData
|
|
79
|
+
* @param image 图像源
|
|
80
|
+
* @returns ImageData 对象
|
|
81
|
+
*/
|
|
82
|
+
private convertToImageData;
|
|
83
|
+
/**
|
|
84
|
+
* 确保模块已初始化
|
|
85
|
+
* @protected
|
|
86
|
+
*/
|
|
87
|
+
protected ensureInitialized(): void;
|
|
88
|
+
}
|
|
89
|
+
export * from './types';
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file OCR处理器
|
|
3
|
+
* @description 提供身份证OCR识别功能
|
|
4
|
+
* @module modules/id-card/ocr-processor
|
|
5
|
+
*/
|
|
6
|
+
/// <reference path="../../../../src/types/tesseract.d.ts" />
|
|
7
|
+
import { IDCardInfo } from './types';
|
|
8
|
+
import { LoggerMessage } from "tesseract.js";
|
|
9
|
+
import { Disposable } from "../../utils/resource-manager";
|
|
10
|
+
type LoggerFunction = ((message: string | LoggerMessage) => void) | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* OCR处理器选项接口
|
|
13
|
+
*/
|
|
14
|
+
export interface OCRProcessorOptions {
|
|
15
|
+
language?: string;
|
|
16
|
+
useWorker?: boolean;
|
|
17
|
+
maxImageDimension?: number;
|
|
18
|
+
timeout?: number;
|
|
19
|
+
brightness?: number;
|
|
20
|
+
contrast?: number;
|
|
21
|
+
onProgress?: (progress: number) => void;
|
|
22
|
+
enableCache?: boolean;
|
|
23
|
+
cacheSize?: number;
|
|
24
|
+
logger?: LoggerFunction;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* OCR处理器类
|
|
28
|
+
*
|
|
29
|
+
* 使用Tesseract.js实现对身份证图像的OCR文字识别和信息提取功能
|
|
30
|
+
*
|
|
31
|
+
* @example
|
|
32
|
+
* ```typescript
|
|
33
|
+
* // 创建OCR处理器
|
|
34
|
+
* const ocrProcessor = new OCRProcessor();
|
|
35
|
+
*
|
|
36
|
+
* // 初始化OCR引擎
|
|
37
|
+
* await ocrProcessor.initialize();
|
|
38
|
+
*
|
|
39
|
+
* // 处理身份证图像
|
|
40
|
+
* const idInfo = await ocrProcessor.processIDCard(idCardImageData);
|
|
41
|
+
* console.log('识别到的身份证信息:', idInfo);
|
|
42
|
+
*
|
|
43
|
+
* // 使用结束后释放资源
|
|
44
|
+
* await ocrProcessor.terminate();
|
|
45
|
+
* ```
|
|
46
|
+
*/
|
|
47
|
+
export declare class OCRProcessor implements Disposable {
|
|
48
|
+
private worker;
|
|
49
|
+
private ocrWorker;
|
|
50
|
+
private initialized;
|
|
51
|
+
private resultCache;
|
|
52
|
+
private options;
|
|
53
|
+
/**
|
|
54
|
+
* 创建OCR处理器实例
|
|
55
|
+
*
|
|
56
|
+
* @param options OCR处理器选项
|
|
57
|
+
*/
|
|
58
|
+
constructor(options?: OCRProcessorOptions);
|
|
59
|
+
/**
|
|
60
|
+
* 初始化OCR引擎
|
|
61
|
+
*
|
|
62
|
+
* 加载Tesseract OCR引擎和中文简体语言包,并设置适合身份证识别的参数
|
|
63
|
+
*
|
|
64
|
+
* @returns {Promise<void>} 初始化完成的Promise
|
|
65
|
+
*/
|
|
66
|
+
initialize(): Promise<void>;
|
|
67
|
+
/**
|
|
68
|
+
* 处理身份证图像并提取信息
|
|
69
|
+
* @param imageData 要处理的身份证图像数据
|
|
70
|
+
* @returns 提取的身份证信息
|
|
71
|
+
*/
|
|
72
|
+
processIDCard(imageData: ImageData): Promise<IDCardInfo>;
|
|
73
|
+
/**
|
|
74
|
+
* 解析身份证文本信息
|
|
75
|
+
*
|
|
76
|
+
* 从OCR识别到的文本中提取结构化的身份证信息
|
|
77
|
+
*
|
|
78
|
+
* @private
|
|
79
|
+
* @param {string} text - OCR识别到的文本
|
|
80
|
+
* @returns {IDCardInfo} 提取到的身份证信息对象
|
|
81
|
+
*/
|
|
82
|
+
/**
|
|
83
|
+
* 格式化日期字符串为标准格式 (YYYY-MM-DD)
|
|
84
|
+
* @param dateStr 原始日期字符串
|
|
85
|
+
* @returns 格式化后的日期字符串
|
|
86
|
+
*/
|
|
87
|
+
private formatDateString;
|
|
88
|
+
/**
|
|
89
|
+
* 验证身份证号是否符合规则
|
|
90
|
+
* @param idNumber 身份证号
|
|
91
|
+
* @returns 是否有效
|
|
92
|
+
*/
|
|
93
|
+
private validateIDNumber;
|
|
94
|
+
private parseIDCardText;
|
|
95
|
+
/**
|
|
96
|
+
* 清除结果缓存
|
|
97
|
+
*/
|
|
98
|
+
clearCache(): void;
|
|
99
|
+
/**
|
|
100
|
+
* 终止OCR引擎并释放资源
|
|
101
|
+
*
|
|
102
|
+
* @returns {Promise<void>} 终止完成的Promise
|
|
103
|
+
*/
|
|
104
|
+
terminate(): Promise<void>;
|
|
105
|
+
/**
|
|
106
|
+
* 释放资源
|
|
107
|
+
*/
|
|
108
|
+
dispose(): Promise<void>;
|
|
109
|
+
}
|
|
110
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file OCR Worker
|
|
3
|
+
* @description OCR处理的Worker线程实现
|
|
4
|
+
* @module modules/id-card/ocr-worker
|
|
5
|
+
*/
|
|
6
|
+
/// <reference path="../../../../src/types/tesseract.d.ts" />
|
|
7
|
+
import { IDCardInfo } from './types';
|
|
8
|
+
import { LoggerMessage } from 'tesseract.js';
|
|
9
|
+
/**
|
|
10
|
+
* OCR处理输入参数
|
|
11
|
+
*/
|
|
12
|
+
export interface OCRProcessInput {
|
|
13
|
+
/** 图像Base64数据 */
|
|
14
|
+
imageBase64: string;
|
|
15
|
+
/** Tesseract Worker选项 */
|
|
16
|
+
tessWorkerOptions?: {
|
|
17
|
+
/** 语言 */
|
|
18
|
+
language?: string;
|
|
19
|
+
/** 日志回调 */
|
|
20
|
+
logger?: (message: LoggerMessage) => void;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 在Worker中处理OCR识别
|
|
25
|
+
* @param input OCR处理输入参数
|
|
26
|
+
* @returns OCR处理结果
|
|
27
|
+
*/
|
|
28
|
+
export declare function processOCRInWorker(input: OCRProcessInput): Promise<{
|
|
29
|
+
idCardInfo: IDCardInfo;
|
|
30
|
+
processingTime: number;
|
|
31
|
+
}>;
|