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.
- 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 -75
- 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/{id-recognition → modules/id-card}/anti-fake-detector.ts +273 -239
- package/src/modules/id-card/id-card-detector.ts +474 -0
- package/src/modules/id-card/index.ts +425 -0
- package/src/{id-recognition → modules/id-card}/ocr-processor.ts +149 -92
- 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/tesseract.d.ts +265 -22
- package/src/utils/image-processing.ts +68 -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 -11349
- package/dist/id-scanner-core.js +0 -11361
- package/dist/id-scanner-core.min.js +0 -1
- package/dist/id-scanner-ocr.esm.js +0 -2319
- package/dist/id-scanner-ocr.js +0 -2328
- package/dist/id-scanner-ocr.min.js +0 -1
- package/dist/id-scanner-qr.esm.js +0 -1296
- package/dist/id-scanner-qr.js +0 -1305
- package/dist/id-scanner-qr.min.js +0 -1
- package/dist/id-scanner.js +0 -4561
- package/dist/id-scanner.min.js +0 -1
- package/src/core.ts +0 -138
- package/src/demo/demo.ts +0 -204
- package/src/id-recognition/data-extractor.ts +0 -262
- package/src/id-recognition/id-detector.ts +0 -510
- 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,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 身份证模块类型定义
|
|
3
|
+
* @description 身份证模块相关的类型和接口定义
|
|
4
|
+
* @module modules/id-card/types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 身份证类型枚举
|
|
8
|
+
*/
|
|
9
|
+
export declare enum IDCardType {
|
|
10
|
+
/** 第二代居民身份证正面 */
|
|
11
|
+
FRONT = "front",
|
|
12
|
+
/** 第二代居民身份证背面 */
|
|
13
|
+
BACK = "back",
|
|
14
|
+
/** 第一代居民身份证 */
|
|
15
|
+
FIRST_GENERATION = "first_generation",
|
|
16
|
+
/** 临时身份证 */
|
|
17
|
+
TEMPORARY = "temporary",
|
|
18
|
+
/** 外国人永久居留证 */
|
|
19
|
+
FOREIGN_PERMANENT = "foreign_permanent",
|
|
20
|
+
/** 港澳台居民居住证 */
|
|
21
|
+
HMT_RESIDENT = "hmt_resident",
|
|
22
|
+
/** 未知类型 */
|
|
23
|
+
UNKNOWN = "unknown"
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* 证件边缘信息
|
|
27
|
+
*/
|
|
28
|
+
export interface IDCardEdge {
|
|
29
|
+
/** 左上角坐标 */
|
|
30
|
+
topLeft: {
|
|
31
|
+
x: number;
|
|
32
|
+
y: number;
|
|
33
|
+
};
|
|
34
|
+
/** 右上角坐标 */
|
|
35
|
+
topRight: {
|
|
36
|
+
x: number;
|
|
37
|
+
y: number;
|
|
38
|
+
};
|
|
39
|
+
/** 右下角坐标 */
|
|
40
|
+
bottomRight: {
|
|
41
|
+
x: number;
|
|
42
|
+
y: number;
|
|
43
|
+
};
|
|
44
|
+
/** 左下角坐标 */
|
|
45
|
+
bottomLeft: {
|
|
46
|
+
x: number;
|
|
47
|
+
y: number;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* 身份证信息
|
|
52
|
+
*/
|
|
53
|
+
export interface IDCardInfo {
|
|
54
|
+
nationality?: string;
|
|
55
|
+
issuingAuthority?: string;
|
|
56
|
+
validPeriod?: string;
|
|
57
|
+
/** 身份证类型 */
|
|
58
|
+
type?: IDCardType;
|
|
59
|
+
/** 身份证边缘信息 */
|
|
60
|
+
edge?: IDCardEdge;
|
|
61
|
+
/** 姓名 */
|
|
62
|
+
name?: string;
|
|
63
|
+
/** 性别 */
|
|
64
|
+
gender?: string;
|
|
65
|
+
/** 民族 */
|
|
66
|
+
ethnicity?: string;
|
|
67
|
+
/** 出生日期,格式: YYYY-MM-DD */
|
|
68
|
+
birthDate?: string;
|
|
69
|
+
/** 地址 */
|
|
70
|
+
address?: string;
|
|
71
|
+
/** 身份证号码 */
|
|
72
|
+
idNumber?: string;
|
|
73
|
+
/** 签发机关 */
|
|
74
|
+
issueAuthority?: string;
|
|
75
|
+
/** 有效期起始日期,格式: YYYY-MM-DD */
|
|
76
|
+
validFrom?: string;
|
|
77
|
+
/** 有效期截止日期,格式: YYYY-MM-DD */
|
|
78
|
+
validTo?: string;
|
|
79
|
+
/** 相片区域坐标 */
|
|
80
|
+
photoRegion?: {
|
|
81
|
+
x: number;
|
|
82
|
+
y: number;
|
|
83
|
+
width: number;
|
|
84
|
+
height: number;
|
|
85
|
+
};
|
|
86
|
+
/** 原始身份证图像 */
|
|
87
|
+
image?: ImageData;
|
|
88
|
+
/** 置信度 */
|
|
89
|
+
confidence?: number;
|
|
90
|
+
/** 防伪检测结果 */
|
|
91
|
+
antiFake?: {
|
|
92
|
+
/** 是否通过防伪检测 */
|
|
93
|
+
passed: boolean;
|
|
94
|
+
/** 防伪检测分数 */
|
|
95
|
+
score: number;
|
|
96
|
+
/** 防伪特征检测结果 */
|
|
97
|
+
features?: {
|
|
98
|
+
/** 荧光油墨 */
|
|
99
|
+
fluorescent?: boolean;
|
|
100
|
+
/** 微缩文字 */
|
|
101
|
+
microtext?: boolean;
|
|
102
|
+
/** 光变图案 */
|
|
103
|
+
opticalVariable?: boolean;
|
|
104
|
+
/** 纹理 */
|
|
105
|
+
texture?: boolean;
|
|
106
|
+
/** 暗记 */
|
|
107
|
+
watermark?: boolean;
|
|
108
|
+
};
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* 身份证模块配置选项
|
|
113
|
+
*/
|
|
114
|
+
export interface IDCardModuleOptions {
|
|
115
|
+
/** 是否启用模块 */
|
|
116
|
+
enabled?: boolean;
|
|
117
|
+
/** 检测器配置 */
|
|
118
|
+
detector?: {
|
|
119
|
+
/** 最小置信度 */
|
|
120
|
+
minConfidence?: number;
|
|
121
|
+
/** 是否启用OCR识别 */
|
|
122
|
+
enableOCR?: boolean;
|
|
123
|
+
/** 是否启用防伪检测 */
|
|
124
|
+
enableAntiFake?: boolean;
|
|
125
|
+
};
|
|
126
|
+
/** OCR处理器配置 */
|
|
127
|
+
ocr?: {
|
|
128
|
+
/** 是否使用Web Worker处理OCR */
|
|
129
|
+
useWorker?: boolean;
|
|
130
|
+
/** 最大图像尺寸 */
|
|
131
|
+
maxImageDimension?: number;
|
|
132
|
+
/** 亮度调整 */
|
|
133
|
+
brightness?: number;
|
|
134
|
+
/** 对比度调整 */
|
|
135
|
+
contrast?: number;
|
|
136
|
+
};
|
|
137
|
+
/** 防伪检测配置 */
|
|
138
|
+
antiFake?: {
|
|
139
|
+
/** 防伪检测灵敏度 */
|
|
140
|
+
sensitivity?: number;
|
|
141
|
+
/** 最小置信度 */
|
|
142
|
+
minConfidence?: number;
|
|
143
|
+
};
|
|
144
|
+
}
|
|
145
|
+
/**
|
|
146
|
+
* 身份证验证结果
|
|
147
|
+
*/
|
|
148
|
+
export interface IDCardVerificationResult {
|
|
149
|
+
/** 是否验证通过 */
|
|
150
|
+
isValid: boolean;
|
|
151
|
+
/** 验证分数 */
|
|
152
|
+
score: number;
|
|
153
|
+
/** 失败原因 */
|
|
154
|
+
failureReason?: string;
|
|
155
|
+
/** 验证详情 */
|
|
156
|
+
details?: {
|
|
157
|
+
/** 身份证号码是否有效 */
|
|
158
|
+
idNumberValid?: boolean;
|
|
159
|
+
/** 签发日期是否有效 */
|
|
160
|
+
issueDateValid?: boolean;
|
|
161
|
+
/** 有效期是否过期 */
|
|
162
|
+
isExpired?: boolean;
|
|
163
|
+
/** 防伪检测是否通过 */
|
|
164
|
+
antiFakePassed?: boolean;
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* 图像处理配置选项
|
|
169
|
+
*/
|
|
170
|
+
export interface ImageProcessOptions {
|
|
171
|
+
/** 是否进行预处理 */
|
|
172
|
+
preprocess?: boolean;
|
|
173
|
+
/** 是否校正图像 */
|
|
174
|
+
correctPerspective?: boolean;
|
|
175
|
+
/** 是否增强图像 */
|
|
176
|
+
enhance?: boolean;
|
|
177
|
+
/** 是否去噪 */
|
|
178
|
+
denoise?: boolean;
|
|
179
|
+
/** 是否二值化 */
|
|
180
|
+
binarize?: boolean;
|
|
181
|
+
}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 二维码模块入口
|
|
3
|
+
* @description 提供二维码识别和解析功能的模块入口
|
|
4
|
+
* @module modules/qrcode
|
|
5
|
+
*/
|
|
6
|
+
import { BaseModule } from '../../core/base-module';
|
|
7
|
+
import { QRCodeResult, QRCodeModuleOptions } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* 二维码模块
|
|
10
|
+
* 提供二维码检测和解析功能
|
|
11
|
+
*/
|
|
12
|
+
export declare class QRCodeModule extends BaseModule {
|
|
13
|
+
/** 模块名称 */
|
|
14
|
+
readonly name: string;
|
|
15
|
+
/** 模块配置 */
|
|
16
|
+
private options;
|
|
17
|
+
/** 二维码扫描器 */
|
|
18
|
+
private scanner;
|
|
19
|
+
/** 最后一次扫描结果 */
|
|
20
|
+
private lastScanResult?;
|
|
21
|
+
/**
|
|
22
|
+
* 构造函数
|
|
23
|
+
* @param options 模块配置选项
|
|
24
|
+
*/
|
|
25
|
+
constructor(options?: QRCodeModuleOptions);
|
|
26
|
+
/**
|
|
27
|
+
* 初始化模块
|
|
28
|
+
*/
|
|
29
|
+
initialize(): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* 扫描图像中的二维码
|
|
32
|
+
* @param image 图像源
|
|
33
|
+
* @returns 二维码扫描结果
|
|
34
|
+
*/
|
|
35
|
+
scan(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<QRCodeResult | undefined>;
|
|
36
|
+
/**
|
|
37
|
+
* 获取最后一次扫描结果
|
|
38
|
+
*/
|
|
39
|
+
getLastScanResult(): QRCodeResult | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* 解析二维码数据
|
|
42
|
+
* @param data 二维码数据
|
|
43
|
+
* @returns 解析后的数据对象
|
|
44
|
+
*/
|
|
45
|
+
parseQRCodeData(data: string): Record<string, any> | string;
|
|
46
|
+
/**
|
|
47
|
+
* 释放模块资源
|
|
48
|
+
*/
|
|
49
|
+
dispose(): Promise<void>;
|
|
50
|
+
}
|
|
51
|
+
export * from './types';
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 二维码扫描器
|
|
3
|
+
* @description 提供二维码检测和解析功能
|
|
4
|
+
* @module modules/qrcode/qr-code-scanner
|
|
5
|
+
*/
|
|
6
|
+
import { EventEmitter } from '../../core/event-emitter';
|
|
7
|
+
import { QRCodeResult } from './types';
|
|
8
|
+
/**
|
|
9
|
+
* 二维码扫描器配置选项
|
|
10
|
+
*/
|
|
11
|
+
export interface QRCodeScannerOptions {
|
|
12
|
+
/** 最小置信度 */
|
|
13
|
+
minConfidence?: number;
|
|
14
|
+
/** 是否返回原始图像 */
|
|
15
|
+
returnImage?: boolean;
|
|
16
|
+
/** 图像处理配置 */
|
|
17
|
+
imageProcess?: {
|
|
18
|
+
/** 是否进行预处理 */
|
|
19
|
+
preprocess?: boolean;
|
|
20
|
+
/** 是否增强对比度 */
|
|
21
|
+
enhanceContrast?: boolean;
|
|
22
|
+
/** 二值化阈值 */
|
|
23
|
+
threshold?: number;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* 二维码扫描器类
|
|
28
|
+
*/
|
|
29
|
+
export declare class QRCodeScanner extends EventEmitter {
|
|
30
|
+
private options;
|
|
31
|
+
private logger;
|
|
32
|
+
private initialized;
|
|
33
|
+
/**
|
|
34
|
+
* 构造函数
|
|
35
|
+
* @param options 配置选项
|
|
36
|
+
*/
|
|
37
|
+
constructor(options?: QRCodeScannerOptions);
|
|
38
|
+
/**
|
|
39
|
+
* 初始化扫描器
|
|
40
|
+
*/
|
|
41
|
+
initialize(): Promise<void>;
|
|
42
|
+
/**
|
|
43
|
+
* 扫描图像中的二维码
|
|
44
|
+
* @param image 图像源
|
|
45
|
+
* @returns 二维码扫描结果
|
|
46
|
+
*/
|
|
47
|
+
scan(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<QRCodeResult | undefined>;
|
|
48
|
+
/**
|
|
49
|
+
* 将各种图像源转换为ImageData
|
|
50
|
+
* @param image 图像源
|
|
51
|
+
* @returns ImageData
|
|
52
|
+
*/
|
|
53
|
+
private getImageData;
|
|
54
|
+
/**
|
|
55
|
+
* 图像预处理
|
|
56
|
+
* @param imageData 原始图像数据
|
|
57
|
+
* @returns 处理后的图像数据
|
|
58
|
+
*/
|
|
59
|
+
private preprocessImage;
|
|
60
|
+
/**
|
|
61
|
+
* 释放资源
|
|
62
|
+
*/
|
|
63
|
+
dispose(): Promise<void>;
|
|
64
|
+
}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 二维码模块类型定义
|
|
3
|
+
* @description 二维码模块相关的类型和接口定义
|
|
4
|
+
* @module modules/qrcode/types
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 二维码检测结果
|
|
8
|
+
*/
|
|
9
|
+
export interface QRCodeResult {
|
|
10
|
+
/** 二维码内容 */
|
|
11
|
+
data: string;
|
|
12
|
+
/** 二维码类型 */
|
|
13
|
+
type?: string;
|
|
14
|
+
/** 二维码边界框 */
|
|
15
|
+
boundingBox: {
|
|
16
|
+
topLeft: {
|
|
17
|
+
x: number;
|
|
18
|
+
y: number;
|
|
19
|
+
};
|
|
20
|
+
topRight: {
|
|
21
|
+
x: number;
|
|
22
|
+
y: number;
|
|
23
|
+
};
|
|
24
|
+
bottomRight: {
|
|
25
|
+
x: number;
|
|
26
|
+
y: number;
|
|
27
|
+
};
|
|
28
|
+
bottomLeft: {
|
|
29
|
+
x: number;
|
|
30
|
+
y: number;
|
|
31
|
+
};
|
|
32
|
+
};
|
|
33
|
+
/** 二维码中心点 */
|
|
34
|
+
center: {
|
|
35
|
+
x: number;
|
|
36
|
+
y: number;
|
|
37
|
+
};
|
|
38
|
+
/** 原始图像 */
|
|
39
|
+
image?: ImageData;
|
|
40
|
+
/** 置信度 */
|
|
41
|
+
confidence?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* 二维码模块选项
|
|
45
|
+
*/
|
|
46
|
+
export interface QRCodeModuleOptions {
|
|
47
|
+
/** 是否启用模块 */
|
|
48
|
+
enabled?: boolean;
|
|
49
|
+
/** 二维码扫描配置 */
|
|
50
|
+
scanner?: {
|
|
51
|
+
/** 最小置信度 */
|
|
52
|
+
minConfidence?: number;
|
|
53
|
+
/** 是否尝试多次扫描 */
|
|
54
|
+
tryMultipleScan?: boolean;
|
|
55
|
+
/** 是否返回原始图像 */
|
|
56
|
+
returnImage?: boolean;
|
|
57
|
+
};
|
|
58
|
+
/** 图像处理配置 */
|
|
59
|
+
imageProcess?: {
|
|
60
|
+
/** 是否进行预处理 */
|
|
61
|
+
preprocess?: boolean;
|
|
62
|
+
/** 是否增强对比度 */
|
|
63
|
+
enhanceContrast?: boolean;
|
|
64
|
+
/** 二值化阈值 */
|
|
65
|
+
threshold?: number;
|
|
66
|
+
};
|
|
67
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 相机工具类
|
|
3
|
+
* @description 提供访问和控制设备摄像头的功能
|
|
4
|
+
* @module Camera
|
|
5
|
+
*/
|
|
6
|
+
/**
|
|
7
|
+
* 相机配置选项接口
|
|
8
|
+
*
|
|
9
|
+
* @interface CameraOptions
|
|
10
|
+
* @property {number} [width] - 视频宽度,默认为640
|
|
11
|
+
* @property {number} [height] - 视频高度,默认为480
|
|
12
|
+
* @property {string} [facingMode] - 摄像头朝向,'user'为前置摄像头,'environment'为后置摄像头,默认为'environment'
|
|
13
|
+
*/
|
|
14
|
+
export interface CameraOptions {
|
|
15
|
+
width?: number;
|
|
16
|
+
height?: number;
|
|
17
|
+
facingMode?: 'user' | 'environment';
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* 相机工具类
|
|
21
|
+
*
|
|
22
|
+
* 提供访问设备摄像头、获取视频流以及捕获图像帧的功能
|
|
23
|
+
*
|
|
24
|
+
* @example
|
|
25
|
+
* ```typescript
|
|
26
|
+
* // 创建相机实例
|
|
27
|
+
* const camera = new Camera({
|
|
28
|
+
* width: 1280,
|
|
29
|
+
* height: 720,
|
|
30
|
+
* facingMode: 'environment' // 使用后置摄像头
|
|
31
|
+
* });
|
|
32
|
+
*
|
|
33
|
+
* // 初始化相机
|
|
34
|
+
* const videoElement = document.getElementById('video') as HTMLVideoElement;
|
|
35
|
+
* await camera.start(videoElement);
|
|
36
|
+
*
|
|
37
|
+
* // 捕获当前视频帧
|
|
38
|
+
* const imageData = camera.captureFrame();
|
|
39
|
+
*
|
|
40
|
+
* // 使用结束后释放资源
|
|
41
|
+
* camera.stop();
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare class Camera {
|
|
45
|
+
private options;
|
|
46
|
+
private stream;
|
|
47
|
+
private videoElement;
|
|
48
|
+
/**
|
|
49
|
+
* 创建相机实例
|
|
50
|
+
* @param {CameraOptions} [options] - 相机配置选项
|
|
51
|
+
*/
|
|
52
|
+
constructor(options?: CameraOptions);
|
|
53
|
+
/**
|
|
54
|
+
* 启动摄像头并将视频流绑定到视频元素
|
|
55
|
+
* @param videoElement HTML视频元素
|
|
56
|
+
* @returns Promise<void>
|
|
57
|
+
*/
|
|
58
|
+
start(videoElement: HTMLVideoElement): Promise<void>;
|
|
59
|
+
/**
|
|
60
|
+
* 停止摄像头并释放资源
|
|
61
|
+
*/
|
|
62
|
+
stop(): void;
|
|
63
|
+
/**
|
|
64
|
+
* 初始化相机,获取视频流并绑定到视频元素
|
|
65
|
+
*
|
|
66
|
+
* @param {HTMLVideoElement} videoElement - 用于显示视频流的视频元素
|
|
67
|
+
* @returns {Promise<void>} 初始化完成的Promise
|
|
68
|
+
* @throws 如果无法访问摄像头,将抛出错误
|
|
69
|
+
*/
|
|
70
|
+
initialize(videoElement: HTMLVideoElement): Promise<void>;
|
|
71
|
+
/**
|
|
72
|
+
* 捕获当前视频帧
|
|
73
|
+
*
|
|
74
|
+
* @returns {ImageData|null} 视频帧的ImageData对象,如果未初始化则返回null
|
|
75
|
+
*/
|
|
76
|
+
captureFrame(): ImageData | null;
|
|
77
|
+
/**
|
|
78
|
+
* 释放摄像头资源
|
|
79
|
+
*/
|
|
80
|
+
release(): void;
|
|
81
|
+
}
|
|
@@ -0,0 +1,176 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file 图像处理工具类
|
|
3
|
+
* @description 提供图像预处理功能,用于提高OCR识别率
|
|
4
|
+
* @module ImageProcessor
|
|
5
|
+
* @version 1.3.2
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* 图像处理器配置选项
|
|
9
|
+
*/
|
|
10
|
+
export interface ImageProcessorOptions {
|
|
11
|
+
brightness?: number;
|
|
12
|
+
contrast?: number;
|
|
13
|
+
grayscale?: boolean;
|
|
14
|
+
invert?: boolean;
|
|
15
|
+
blur?: number;
|
|
16
|
+
sharpen?: boolean;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 图像压缩选项
|
|
20
|
+
*/
|
|
21
|
+
export interface ImageCompressionOptions {
|
|
22
|
+
maxSizeMB?: number;
|
|
23
|
+
maxWidthOrHeight?: number;
|
|
24
|
+
useWebWorker?: boolean;
|
|
25
|
+
maxIteration?: number;
|
|
26
|
+
quality?: number;
|
|
27
|
+
fileType?: string;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* 图像处理工具类
|
|
31
|
+
*
|
|
32
|
+
* 提供各种图像处理功能,用于优化识别效果
|
|
33
|
+
*/
|
|
34
|
+
export declare class ImageProcessor {
|
|
35
|
+
/**
|
|
36
|
+
* 将ImageData转换为Canvas元素
|
|
37
|
+
*
|
|
38
|
+
* @param {ImageData} imageData - 要转换的图像数据
|
|
39
|
+
* @returns {HTMLCanvasElement} 包含图像的Canvas元素
|
|
40
|
+
*/
|
|
41
|
+
static imageDataToCanvas(imageData: ImageData): HTMLCanvasElement;
|
|
42
|
+
/**
|
|
43
|
+
* 将Canvas转换为ImageData
|
|
44
|
+
*
|
|
45
|
+
* @param {HTMLCanvasElement} canvas - 要转换的Canvas元素
|
|
46
|
+
* @returns {ImageData|null} Canvas的图像数据,如果获取失败则返回null
|
|
47
|
+
*/
|
|
48
|
+
static canvasToImageData(canvas: HTMLCanvasElement): ImageData | null;
|
|
49
|
+
/**
|
|
50
|
+
* 调整图像亮度和对比度
|
|
51
|
+
*
|
|
52
|
+
* @param imageData 原始图像数据
|
|
53
|
+
* @param brightness 亮度调整值 (-100到100)
|
|
54
|
+
* @param contrast 对比度调整值 (-100到100)
|
|
55
|
+
* @returns 处理后的图像数据
|
|
56
|
+
*/
|
|
57
|
+
static adjustBrightnessContrast(imageData: ImageData, brightness?: number, contrast?: number): ImageData;
|
|
58
|
+
/**
|
|
59
|
+
* 将图像转换为灰度图
|
|
60
|
+
*
|
|
61
|
+
* @param imageData 原始图像数据
|
|
62
|
+
* @returns 灰度图像数据
|
|
63
|
+
*/
|
|
64
|
+
static toGrayscale(imageData: ImageData): ImageData;
|
|
65
|
+
/**
|
|
66
|
+
* 锐化图像
|
|
67
|
+
*
|
|
68
|
+
* @param imageData 原始图像数据
|
|
69
|
+
* @param amount 锐化程度,默认为2
|
|
70
|
+
* @returns 锐化后的图像数据
|
|
71
|
+
*/
|
|
72
|
+
static sharpen(imageData: ImageData, amount?: number): ImageData;
|
|
73
|
+
/**
|
|
74
|
+
* 对图像应用阈值操作,增强对比度
|
|
75
|
+
*
|
|
76
|
+
* @param imageData 原始图像数据
|
|
77
|
+
* @param threshold 阈值 (0-255)
|
|
78
|
+
* @returns 处理后的图像数据
|
|
79
|
+
*/
|
|
80
|
+
static threshold(imageData: ImageData, threshold?: number): ImageData;
|
|
81
|
+
/**
|
|
82
|
+
* 将图像转换为黑白图像(二值化)
|
|
83
|
+
*
|
|
84
|
+
* @param imageData 原始图像数据
|
|
85
|
+
* @returns 二值化后的图像数据
|
|
86
|
+
*/
|
|
87
|
+
static toBinaryImage(imageData: ImageData): ImageData;
|
|
88
|
+
/**
|
|
89
|
+
* 使用OTSU算法计算最佳阈值
|
|
90
|
+
*
|
|
91
|
+
* @param imageData 灰度图像数据
|
|
92
|
+
* @returns 最佳阈值
|
|
93
|
+
*/
|
|
94
|
+
private static getOtsuThreshold;
|
|
95
|
+
/**
|
|
96
|
+
* 批量应用图像处理
|
|
97
|
+
*
|
|
98
|
+
* @param imageData 原始图像数据
|
|
99
|
+
* @param options 处理选项
|
|
100
|
+
* @returns 处理后的图像数据
|
|
101
|
+
*/
|
|
102
|
+
static batchProcess(imageData: ImageData, options: ImageProcessorOptions): ImageData;
|
|
103
|
+
/**
|
|
104
|
+
* 压缩图片文件
|
|
105
|
+
*
|
|
106
|
+
* @param file 图片文件
|
|
107
|
+
* @param options 压缩选项
|
|
108
|
+
* @returns Promise<File> 压缩后的文件
|
|
109
|
+
*/
|
|
110
|
+
static compressImage(file: File, options?: ImageCompressionOptions): Promise<File>;
|
|
111
|
+
/**
|
|
112
|
+
* 从图片文件创建ImageData
|
|
113
|
+
*
|
|
114
|
+
* @param file 图片文件
|
|
115
|
+
* @returns Promise<ImageData>
|
|
116
|
+
*/
|
|
117
|
+
static createImageDataFromFile(file: File): Promise<ImageData>;
|
|
118
|
+
/**
|
|
119
|
+
* 将ImageData转换为File对象
|
|
120
|
+
*
|
|
121
|
+
* @param imageData ImageData对象
|
|
122
|
+
* @param fileName 输出文件名
|
|
123
|
+
* @param fileType 输出文件类型
|
|
124
|
+
* @param quality 图片质量 (0-1)
|
|
125
|
+
* @returns Promise<File>
|
|
126
|
+
*/
|
|
127
|
+
static imageDataToFile(imageData: ImageData, fileName?: string, fileType?: string, quality?: number): Promise<File>;
|
|
128
|
+
/**
|
|
129
|
+
* 将图像调整到指定大小
|
|
130
|
+
* @param image 输入图像
|
|
131
|
+
* @param maxWidth 最大宽度
|
|
132
|
+
* @param maxHeight 最大高度
|
|
133
|
+
* @param keepAspectRatio 是否保持宽高比
|
|
134
|
+
* @returns 调整后的图像
|
|
135
|
+
*/
|
|
136
|
+
static resizeImage(image: ImageData | HTMLImageElement | HTMLCanvasElement, maxWidth: number, maxHeight: number, keepAspectRatio?: boolean): ImageData;
|
|
137
|
+
/**
|
|
138
|
+
* 边缘检测算法,用于识别图像中的边缘
|
|
139
|
+
* 基于Sobel算子实现
|
|
140
|
+
*
|
|
141
|
+
* @param imageData 原始图像数据,应已转为灰度图
|
|
142
|
+
* @param threshold 边缘阈值,默认为30
|
|
143
|
+
* @returns 检测到边缘的图像数据
|
|
144
|
+
*/
|
|
145
|
+
static detectEdges(imageData: ImageData, threshold?: number): ImageData;
|
|
146
|
+
/**
|
|
147
|
+
* 卡尼-德里奇边缘检测
|
|
148
|
+
* 相比Sobel更精确的边缘检测算法
|
|
149
|
+
*
|
|
150
|
+
* @param imageData 灰度图像数据
|
|
151
|
+
* @param lowThreshold 低阈值
|
|
152
|
+
* @param highThreshold 高阈值
|
|
153
|
+
* @returns 边缘检测结果
|
|
154
|
+
*/
|
|
155
|
+
static cannyEdgeDetection(imageData: ImageData, lowThreshold?: number, highThreshold?: number): ImageData;
|
|
156
|
+
/**
|
|
157
|
+
* 高斯模糊
|
|
158
|
+
*/
|
|
159
|
+
private static gaussianBlur;
|
|
160
|
+
/**
|
|
161
|
+
* 生成高斯核
|
|
162
|
+
*/
|
|
163
|
+
private static generateGaussianKernel;
|
|
164
|
+
/**
|
|
165
|
+
* 计算梯度强度和方向
|
|
166
|
+
*/
|
|
167
|
+
private static computeGradients;
|
|
168
|
+
/**
|
|
169
|
+
* 非极大值抛弃
|
|
170
|
+
*/
|
|
171
|
+
private static nonMaxSuppression;
|
|
172
|
+
/**
|
|
173
|
+
* 双阈值处理
|
|
174
|
+
*/
|
|
175
|
+
private static hysteresisThresholding;
|
|
176
|
+
}
|