id-scanner-lib
Version:
Browser-based ID card, QR code, and face recognition scanner with liveness detection
1,304 lines (1,284 loc) • 32.2 kB
TypeScript
/**
* @file 事件发射器
* @description 提供基础的事件发射和订阅功能
* @module core/event-emitter
*/
/**
* 事件处理器类型
*/
type EventHandler = (data?: any) => void;
/**
* 事件发射器基类
* 提供基础的事件发射和订阅功能
*/
declare class EventEmitter {
/** 事件处理器映射 */
private eventHandlers;
/**
* 订阅事件
* @param eventName 事件名称
* @param handler 事件处理器
*/
on(eventName: string, handler: EventHandler): void;
/**
* 取消订阅事件
* @param eventName 事件名称
* @param handler 事件处理器,如果不提供则移除该事件的所有处理器
*/
off(eventName: string, handler?: EventHandler): void;
/**
* 订阅事件,但只触发一次
* @param eventName 事件名称
* @param handler 事件处理器
*/
once(eventName: string, handler: EventHandler): void;
/**
* 发射事件
* @param eventName 事件名称
* @param data 事件数据
*/
emit(eventName: string, data?: any): void;
/**
* 获取某个事件的处理器数量
* @param eventName 事件名称
*/
listenerCount(eventName: string): number;
/**
* 移除所有事件处理器
*/
removeAllListeners(): void;
/**
* 获取所有事件名称
*/
eventNames(): string[];
}
/**
* @file 日志系统
* @description 提供统一的日志记录与管理功能
* @module core/logger
*/
/**
* 日志级别枚举
*/
declare enum LogLevel {
DEBUG = "debug",
INFO = "info",
WARN = "warn",
ERROR = "error"
}
/**
* 日志条目接口
*/
interface LogEntry {
/** 日志级别 */
level: LogLevel;
/** 日志标签 */
tag: string;
/** 日志消息 */
message: string;
/** 时间戳 */
timestamp: number;
/** 额外数据 */
data?: any;
/** 错误 */
error?: Error;
}
/**
* 日志处理器接口
*/
interface LogHandler {
/**
* 处理日志条目
* @param entry 日志条目
*/
handle(entry: LogEntry): void;
}
/**
* 控制台日志处理器
* 将日志输出到浏览器控制台
*/
declare class ConsoleLogHandler implements LogHandler {
/**
* 处理日志条目
* @param entry 日志条目
*/
handle(entry: LogEntry): void;
}
/**
* 内存日志处理器
* 将日志保存在内存中,用于后续分析或显示
*/
declare class MemoryLogHandler implements LogHandler {
/** 日志条目数组 */
private entries;
/** 最大日志条目数 */
private maxEntries;
/**
* 构造函数
* @param maxEntries 最大日志条目数,默认为1000
*/
constructor(maxEntries?: number);
/**
* 处理日志条目
* @param entry 日志条目
*/
handle(entry: LogEntry): void;
/**
* 获取所有日志条目
*/
getEntries(): LogEntry[];
/**
* 根据级别过滤日志条目
* @param level 日志级别
*/
getEntriesByLevel(level: LogLevel): LogEntry[];
/**
* 根据标签过滤日志条目
* @param tag 日志标签
*/
getEntriesByTag(tag: string): LogEntry[];
/**
* 清空日志
*/
clear(): void;
}
/**
* 远程日志处理器
* 将日志发送到远程服务器
*/
declare class RemoteLogHandler implements LogHandler {
/** 远程服务器URL */
private endpoint;
/** 批量发送的队列 */
private queue;
/** 最大队列长度 */
private maxQueueSize;
/** 发送间隔(毫秒) */
private flushInterval;
/** 定时发送的计时器ID */
private timerId;
/**
* 构造函数
* @param endpoint 远程服务器URL
* @param maxQueueSize 最大队列长度,默认为100
* @param flushInterval 发送间隔(毫秒),默认为5000
*/
constructor(endpoint: string, maxQueueSize?: number, flushInterval?: number);
/**
* 处理日志条目
* @param entry 日志条目
*/
handle(entry: LogEntry): void;
/**
* 发送队列中的日志
*/
flush(): void;
/**
* 开始定时发送
*/
startTimer(): void;
/**
* 停止定时发送
*/
stopTimer(): void;
}
/**
* 日志管理类
* 中央日志管理器,提供统一的日志记录接口
*/
declare class Logger {
/** 单例实例 */
private static instance;
/** 配置管理器 */
private config;
/** 日志处理器 */
private handlers;
/** 默认标签 */
private defaultTag;
/** 日志级别 */
private logLevel;
/**
* 私有构造函数,防止直接实例化
*/
private constructor();
/**
* 获取单例实例
*/
static getInstance(): Logger;
/**
* 添加日志处理器
* @param handler 日志处理器
*/
addHandler(handler: LogHandler): void;
/**
* 移除日志处理器
* @param handler 要移除的处理器
*/
removeHandler(handler: LogHandler): void;
/**
* 移除所有处理器
*/
clearHandlers(): void;
/**
* 设置默认标签
* @param tag 默认标签
*/
setDefaultTag(tag: string): void;
/**
* 记录调试级别日志
* @param tag 标签
* @param message 消息
* @param error 错误
*/
debug(tag: string, message: string, error?: Error): void;
/**
* 记录信息级别日志
* @param tag 标签
* @param message 消息
* @param error 错误
*/
info(tag: string, message: string, error?: Error): void;
/**
* 记录警告级别日志
* @param tag 标签
* @param message 消息
* @param error 错误
*/
warn(tag: string, message: string, error?: Error): void;
/**
* 记录错误级别日志
* @param tag 标签
* @param message 消息
* @param error 错误
*/
error(tag: string, message: string, error?: Error): void;
/**
* 创建标记了特定标签的日志记录器
* @param tag 标签
*/
getTaggedLogger(tag: string): TaggedLogger;
/**
* 记录日志
* @param level 日志级别
* @param tag 标签
* @param message 消息
* @param error 错误
*/
private log;
/**
* 控制台输出
* @param entry 日志条目
*/
private consoleOutput;
/**
* 获取日志级别值
* @param level 日志级别
*/
private getLevelValue;
/**
* 设置日志级别
* @param level 日志级别
*/
setLevel(level: LogLevel | string): void;
/**
* 获取当前日志级别
* @returns 当前日志级别
*/
getLevel(): LogLevel;
}
/**
* 带标签的日志记录器
* 提供特定标签的简易日志接口
*/
declare class TaggedLogger {
/** 所属的主日志记录器 */
private logger;
/** 标签 */
private tag;
/**
* 构造函数
* @param logger 所属的主日志记录器
* @param tag 标签
*/
constructor(logger: Logger, tag: string);
/**
* 记录调试级别日志
* @param message 消息
* @param error 错误
*/
debug(message: string, error?: Error): void;
/**
* 记录信息级别日志
* @param message 消息
* @param error 错误
*/
info(message: string, error?: Error): void;
/**
* 记录警告级别日志
* @param message 消息
* @param error 错误
*/
warn(message: string, error?: Error): void;
/**
* 记录错误级别日志
* @param message 消息
* @param error 错误
*/
error(message: string, error?: Error): void;
}
/**
* @file 模块管理器
* @description 统一管理库的各功能模块,提供模块的注册、初始化和卸载功能
* @module core/module-manager
*/
/**
* 模块接口
* 所有功能模块必须实现此接口
*/
interface Module {
/** 模块名称 */
name: string;
/** 模块版本 */
version: string;
/** 模块是否已初始化 */
isInitialized: boolean;
/** 初始化模块 */
initialize(): Promise<void>;
/** 释放模块资源 */
dispose(): Promise<void>;
}
/**
* 模块配置接口
*/
interface ModuleOptions {
/** 是否启用该模块 */
enabled?: boolean;
/** 模块特定配置 */
[key: string]: any;
}
/**
* 模块管理器类
* 负责管理所有功能模块的生命周期
*/
declare class ModuleManager extends EventEmitter {
private static instance;
private modules;
private logger;
private initialized;
/**
* 获取模块管理器单例
*/
static getInstance(): ModuleManager;
/**
* 私有构造函数,确保单例模式
*/
private constructor();
/**
* 注册模块
* @param module 要注册的模块
* @returns 模块管理器实例,支持链式调用
*/
register(module: Module): ModuleManager;
/**
* 获取模块
* @param name 模块名称
* @returns 模块实例
*/
getModule<T extends Module>(name: string): T | undefined;
/**
* 初始化所有注册的模块
*/
initialize(): Promise<void>;
/**
* 卸载所有模块并释放资源
*/
dispose(): Promise<void>;
/**
* 获取所有已注册的模块名称
*/
getRegisteredModules(): string[];
/**
* 检查模块是否已注册
* @param name 模块名称
*/
hasModule(name: string): boolean;
}
/**
* @file 基础模块
* @description 提供基础模块实现,作为所有功能模块的基类
* @module core/base-module
*/
/**
* 基础模块类
* 提供模块的基本功能和生命周期管理
*/
declare abstract class BaseModule extends EventEmitter implements Module {
/** 模块名称 */
abstract readonly name: string;
/** 模块版本 */
readonly version: string;
/** 模块是否已初始化 */
protected _isInitialized: boolean;
/** 日志工具 */
protected logger: Logger;
/**
* 构造函数
*/
constructor();
/**
* 获取模块是否已初始化
*/
get isInitialized(): boolean;
/**
* 初始化模块
* 子类必须实现此方法
*/
abstract initialize(): Promise<void>;
/**
* 释放模块资源
* 子类可以覆盖此方法以添加额外的资源释放逻辑
*/
dispose(): Promise<void>;
/**
* 检查模块是否已初始化,如果未初始化则抛出错误
*/
protected ensureInitialized(): void;
}
/**
* @file 身份证模块类型定义
* @description 身份证模块相关的类型和接口定义
* @module modules/id-card/types
*/
/**
* 身份证类型枚举
*/
declare enum IDCardType {
/** 第二代居民身份证正面 */
FRONT = "front",
/** 第二代居民身份证背面 */
BACK = "back",
/** 第一代居民身份证 */
FIRST_GENERATION = "first_generation",
/** 临时身份证 */
TEMPORARY = "temporary",
/** 外国人永久居留证 */
FOREIGN_PERMANENT = "foreign_permanent",
/** 港澳台居民居住证 */
HMT_RESIDENT = "hmt_resident",
/** 未知类型 */
UNKNOWN = "unknown"
}
/**
* 证件边缘信息
*/
interface IDCardEdge {
/** 左上角坐标 */
topLeft: {
x: number;
y: number;
};
/** 右上角坐标 */
topRight: {
x: number;
y: number;
};
/** 右下角坐标 */
bottomRight: {
x: number;
y: number;
};
/** 左下角坐标 */
bottomLeft: {
x: number;
y: number;
};
}
/**
* 身份证信息
*/
interface IDCardInfo {
nationality?: string;
issuingAuthority?: string;
validPeriod?: string;
/** 身份证类型 */
type?: IDCardType;
/** 身份证边缘信息 */
edge?: IDCardEdge;
/** 姓名 */
name?: string;
/** 性别 */
gender?: string;
/** 民族 */
ethnicity?: string;
/** 出生日期,格式: YYYY-MM-DD */
birthDate?: string;
/** 地址 */
address?: string;
/** 身份证号码 */
idNumber?: string;
/** 签发机关 */
issueAuthority?: string;
/** 有效期起始日期,格式: YYYY-MM-DD */
validFrom?: string;
/** 有效期截止日期,格式: YYYY-MM-DD */
validTo?: string;
/** 相片区域坐标 */
photoRegion?: {
x: number;
y: number;
width: number;
height: number;
};
/** 原始身份证图像 */
image?: ImageData;
/** 置信度 */
confidence?: number;
/** 防伪检测结果 */
antiFake?: {
/** 是否通过防伪检测 */
passed: boolean;
/** 防伪检测分数 */
score: number;
/** 防伪特征检测结果 */
features?: {
/** 荧光油墨 */
fluorescent?: boolean;
/** 微缩文字 */
microtext?: boolean;
/** 光变图案 */
opticalVariable?: boolean;
/** 纹理 */
texture?: boolean;
/** 暗记 */
watermark?: boolean;
};
};
}
/**
* 身份证模块配置选项
*/
interface IDCardModuleOptions {
/** 是否启用模块 */
enabled?: boolean;
/** 检测器配置 */
detector?: {
/** 最小置信度 */
minConfidence?: number;
/** 是否启用OCR识别 */
enableOCR?: boolean;
/** 是否启用防伪检测 */
enableAntiFake?: boolean;
};
/** OCR处理器配置 */
ocr?: {
/** 是否使用Web Worker处理OCR */
useWorker?: boolean;
/** 最大图像尺寸 */
maxImageDimension?: number;
/** 亮度调整 */
brightness?: number;
/** 对比度调整 */
contrast?: number;
};
/** 防伪检测配置 */
antiFake?: {
/** 防伪检测灵敏度 */
sensitivity?: number;
/** 最小置信度 */
minConfidence?: number;
};
}
/**
* 身份证验证结果
*/
interface IDCardVerificationResult {
/** 是否验证通过 */
isValid: boolean;
/** 验证分数 */
score: number;
/** 失败原因 */
failureReason?: string;
/** 验证详情 */
details?: {
/** 身份证号码是否有效 */
idNumberValid?: boolean;
/** 签发日期是否有效 */
issueDateValid?: boolean;
/** 有效期是否过期 */
isExpired?: boolean;
/** 防伪检测是否通过 */
antiFakePassed?: boolean;
};
}
/**
* @file 身份证模块入口
* @description 提供身份证识别和验证功能的模块入口
* @module modules/id-card
*/
/**
* 身份证识别模块
* 提供身份证检测、OCR识别、防伪检测等功能
*/
declare class IDCardModule extends BaseModule {
/** 模块名称 */
readonly name: string;
/** 模块配置 */
private options;
/** 身份证检测器 */
private detector;
/** OCR处理器 */
private ocrProcessor?;
/** 防伪检测器 */
private antiFakeDetector?;
/** 最后一次检测结果 */
private lastDetectionResult?;
/**
* 构造函数
* @param options 模块配置选项
*/
constructor(options?: IDCardModuleOptions);
/**
* 初始化模块
*/
initialize(): Promise<void>;
/**
* 识别身份证图像
* @param image 图像源
* @returns 识别结果
*/
recognize(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<IDCardInfo>;
/**
* 验证身份证信息
* @param idCardInfo 身份证信息
* @returns 验证结果
*/
verify(idCardInfo: IDCardInfo): IDCardVerificationResult;
/**
* 获取最后一次识别结果
*/
getLastRecognitionResult(): IDCardInfo | undefined;
/**
* 释放模块资源
*/
dispose(): Promise<void>;
/**
* 验证身份证号码是否有效
* @param idNumber 身份证号码
* @returns 是否有效
*/
private validateIDNumber;
/**
* 检查身份证是否过期
* @param validTo 有效期截止日期
* @returns 是否过期
*/
private isIDCardExpired;
/**
* 检测身份证
* @param image 图像源
* @returns 检测结果
*/
detect(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<{
success: boolean;
type?: IDCardType;
confidence: number;
croppedImage?: ImageData;
}>;
/**
* 将图像转换为 ImageData
* @param image 图像源
* @returns ImageData 对象
*/
private convertToImageData;
/**
* 确保模块已初始化
* @protected
*/
protected ensureInitialized(): void;
}
/**
* @file 二维码模块类型定义
* @description 二维码模块相关的类型和接口定义
* @module modules/qrcode/types
*/
/**
* 二维码检测结果
*/
interface QRCodeResult {
/** 二维码内容 */
data: string;
/** 二维码类型 */
type?: string;
/** 二维码边界框 */
boundingBox: {
topLeft: {
x: number;
y: number;
};
topRight: {
x: number;
y: number;
};
bottomRight: {
x: number;
y: number;
};
bottomLeft: {
x: number;
y: number;
};
};
/** 二维码中心点 */
center: {
x: number;
y: number;
};
/** 原始图像 */
image?: ImageData;
/** 置信度 */
confidence?: number;
}
/**
* 二维码模块选项
*/
interface QRCodeModuleOptions {
/** 是否启用模块 */
enabled?: boolean;
/** 二维码扫描配置 */
scanner?: {
/** 最小置信度 */
minConfidence?: number;
/** 是否尝试多次扫描 */
tryMultipleScan?: boolean;
/** 是否返回原始图像 */
returnImage?: boolean;
};
/** 图像处理配置 */
imageProcess?: {
/** 是否进行预处理 */
preprocess?: boolean;
/** 是否增强对比度 */
enhanceContrast?: boolean;
/** 二值化阈值 */
threshold?: number;
};
}
/**
* @file 二维码模块入口
* @description 提供二维码识别和解析功能的模块入口
* @module modules/qrcode
*/
/**
* 二维码模块
* 提供二维码检测和解析功能
*/
declare class QRCodeModule extends BaseModule {
/** 模块名称 */
readonly name: string;
/** 模块配置 */
private options;
/** 二维码扫描器 */
private scanner;
/** 最后一次扫描结果 */
private lastScanResult?;
/**
* 构造函数
* @param options 模块配置选项
*/
constructor(options?: QRCodeModuleOptions);
/**
* 初始化模块
*/
initialize(): Promise<void>;
/**
* 扫描图像中的二维码
* @param image 图像源
* @returns 二维码扫描结果
*/
scan(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<QRCodeResult | undefined>;
/**
* 获取最后一次扫描结果
*/
getLastScanResult(): QRCodeResult | undefined;
/**
* 解析二维码数据
* @param data 二维码数据
* @returns 解析后的数据对象
*/
parseQRCodeData(data: string): Record<string, any> | string;
/**
* 释放模块资源
*/
dispose(): Promise<void>;
}
/**
* @file 人脸模块类型定义
* @description 人脸模块相关的类型和接口定义
* @module modules/face/types
*/
/**
* 人脸检测结果
*/
interface FaceDetectionResult {
/** 人脸边界框 */
boundingBox: {
x: number;
y: number;
width: number;
height: number;
};
/** 人脸特征点 */
landmarks?: {
/** 左眼 */
leftEye: {
x: number;
y: number;
};
/** 右眼 */
rightEye: {
x: number;
y: number;
};
/** 鼻子 */
nose: {
x: number;
y: number;
};
/** 嘴巴 */
mouth: {
x: number;
y: number;
};
/** 下巴 */
chin: {
x: number;
y: number;
};
};
/** 人脸角度 */
angle?: {
/** 俯仰角 */
pitch: number;
/** 偏航角 */
yaw: number;
/** 翻滚角 */
roll: number;
};
/** 人脸属性 */
attributes?: {
/** 性别 */
gender?: {
/** 性别值 */
value: 'male' | 'female';
/** 置信度 */
confidence: number;
};
/** 年龄 */
age?: {
/** 年龄值 */
value: number;
/** 置信度 */
confidence: number;
};
/** 表情 */
emotion?: {
/** 表情值 */
value: 'neutral' | 'happiness' | 'surprise' | 'sadness' | 'anger' | 'disgust' | 'fear' | 'contempt';
/** 置信度 */
confidence: number;
};
};
/** 活体检测结果 */
liveness?: {
/** 是否通过活体检测 */
passed: boolean;
/** 活体检测分数 */
score: number;
/** 活体检测类型 */
type: 'blink' | 'mouth' | 'head' | 'passive';
};
/** 人脸图像 */
image?: ImageData;
/** 置信度 */
confidence: number;
}
/**
* 人脸比对结果
*/
interface FaceComparisonResult {
/** 是否匹配 */
isMatch: boolean;
/** 相似度分数 */
similarity: number;
/** 置信度 */
confidence: number;
}
/**
* 人脸模块配置选项
*/
interface FaceModuleOptions {
/** 是否启用模块 */
enabled?: boolean;
/** 检测器配置 */
detector?: {
/** 最小置信度 */
minConfidence?: number;
/** 是否检测特征点 */
detectLandmarks?: boolean;
/** 是否检测属性 */
detectAttributes?: boolean;
/** 是否返回人脸图像 */
returnFaceImage?: boolean;
};
/** 活体检测配置 */
liveness?: {
/** 是否启用活体检测 */
enabled?: boolean;
/** 活体检测类型 */
type?: 'blink' | 'mouth' | 'head' | 'passive';
/** 最小置信度 */
minConfidence?: number;
/** 检测超时时间(毫秒) */
timeout?: number;
};
/** 人脸比对配置 */
comparison?: {
/** 最小相似度阈值 */
minSimilarity?: number;
};
}
/**
* @file 人脸模块入口
* @description 提供人脸检测、活体检测和人脸比对功能的模块入口
* @module modules/face
*/
/**
* 人脸模块
* 提供人脸检测、活体检测和人脸比对功能
*/
declare class FaceModule extends BaseModule {
/** 模块名称 */
readonly name: string;
/** 模块配置 */
private options;
/** 最后一次检测结果 */
private lastDetectionResult?;
/**
* 构造函数
* @param options 模块配置选项
*/
constructor(options?: FaceModuleOptions);
/**
* 初始化模块
*/
initialize(): Promise<void>;
/**
* 检测图像中的人脸
* @param image 图像源
* @returns 人脸检测结果
*/
detectFace(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<FaceDetectionResult | undefined>;
/**
* 进行活体检测
* @param image 图像源
* @returns 活体检测结果
*/
detectLiveness(image: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<boolean>;
/**
* 比对两个人脸
* @param face1 第一个人脸图像
* @param face2 第二个人脸图像
* @returns 人脸比对结果
*/
compareFaces(face1: ImageData | HTMLImageElement | HTMLCanvasElement, face2: ImageData | HTMLImageElement | HTMLCanvasElement): Promise<FaceComparisonResult>;
/**
* 获取最后一次检测结果
*/
getLastDetectionResult(): FaceDetectionResult | undefined;
/**
* 释放模块资源
*/
dispose(): Promise<void>;
}
/**
* @file 错误处理模块
* @description 定义ID-Scanner-Lib的错误类层次结构
* @module core/errors
*/
/**
* ID-Scanner-Lib 基础错误类
* 所有库特定错误的基类
*/
declare class IDScannerError extends Error {
/** 错误代码 */
code: string;
/** 错误原因 */
cause?: Error;
/**
* 构造函数
* @param message 错误消息
* @param options 错误选项
*/
constructor(message: string, options?: {
code?: string;
cause?: Error;
});
}
/**
* 初始化错误
* 当库初始化失败时抛出
*/
declare class InitializationError extends IDScannerError {
constructor(message: string, details?: string);
}
/**
* 设备错误
* 当访问硬件设备(如摄像头)失败时抛出
*/
declare class DeviceError extends IDScannerError {
constructor(message: string);
}
/**
* 摄像头访问错误
* 当无法访问或启动摄像头时抛出
*/
declare class CameraAccessError extends IDScannerError {
constructor(message: string, options?: {
code?: string;
cause?: Error;
});
}
/**
* 人脸检测错误
* 当人脸检测过程失败时抛出
*/
declare class FaceDetectionError extends IDScannerError {
constructor(message: string);
}
/**
* 人脸比对错误
* 当人脸比对过程失败时抛出
*/
declare class FaceComparisonError extends IDScannerError {
constructor(message: string);
}
/**
* 活体检测错误
* 当活体检测过程失败时抛出
*/
declare class LivenessDetectionError extends IDScannerError {
constructor(message: string);
}
/**
* OCR识别错误
* 当OCR文字识别失败时抛出
*/
declare class OCRProcessingError extends IDScannerError {
constructor(message: string);
}
/**
* 二维码扫描错误
* 当二维码扫描失败时抛出
*/
declare class QRScanError extends IDScannerError {
constructor(message: string);
}
/**
* 身份证检测错误
* 当身份证检测失败时抛出
*/
declare class IDCardDetectionError extends IDScannerError {
constructor(message: string);
}
/**
* 资源加载错误
* 当无法加载必要资源(如模型)时抛出
*/
declare class ResourceLoadError extends IDScannerError {
constructor(resource: string, reason: string);
}
/**
* 参数错误
* 当提供的参数无效时抛出
*/
declare class InvalidArgumentError extends IDScannerError {
constructor(paramName: string, reason: string);
}
/**
* 不支持错误
* 当尝试使用不支持的功能或当前环境无法使用的功能时抛出
*/
declare class NotSupportedError extends IDScannerError {
constructor(feature: string);
}
/**
* @file 类型定义文件
* @description 定义全局类型
* @module Types
*/
/**
* 身份证检测结果接口
*
* 包含身份证检测的结果信息,如是否成功检测到身份证、身份证的四个角点坐标以及裁剪后的身份证图像
*
* @interface DetectionResult
* @property {boolean} success - 是否成功检测到身份证
* @property {Object[]} [corners] - 检测到的身份证四个角点坐标
* @property {number} corners[].x - 角点X坐标
* @property {number} corners[].y - 角点Y坐标
* @property {ImageData} [croppedImage] - 裁剪后的身份证图像
* @property {ImageData} [imageData] - 原始图像数据
* @property {Object} [boundingBox] - 检测到的身份证边界框
* @property {number} boundingBox.x - 边界框左上角X坐标
* @property {number} boundingBox.y - 边界框左上角Y坐标
* @property {number} boundingBox.width - 边界框宽度
* @property {number} boundingBox.height - 边界框高度
* @property {number} [confidence] - 检测结果的置信度
* @property {string} [message] - 检测结果的消息
*/
interface DetectionResult {
success: boolean;
corners?: {
x: number;
y: number;
}[];
croppedImage?: ImageData;
imageData?: ImageData;
boundingBox?: {
x: number;
y: number;
width: number;
height: number;
};
confidence?: number;
message?: string;
}
/**
* 点坐标
*/
interface Point {
x: number;
y: number;
}
/**
* 矩形区域
*/
interface Rect {
x: number;
y: number;
width: number;
height: number;
}
/**
* 可释放资源接口
*/
interface Disposable {
/** 释放资源 */
dispose(): Promise<void>;
}
/**
* 图像处理选项
*/
interface ImageProcessingOptions {
/** 亮度调整 (-100 到 100) */
brightness?: number;
/** 对比度调整 (-100 到 100) */
contrast?: number;
/** 饱和度调整 (-100 到 100) */
saturation?: number;
/** 锐化强度 (0 到 10) */
sharpen?: number | boolean;
/** 高斯模糊半径 (0 到 10) */
blur?: number;
/** 是否应用灰度转换 */
grayscale?: boolean;
/** 是否应用二值化 */
binarize?: boolean;
/** 二值化阈值 (0 到 255) */
threshold?: number;
/** 是否应用边缘检测 */
edgeDetection?: boolean;
/** 是否应用降噪 */
denoise?: boolean;
/** 是否应用直方图均衡化 */
histogramEqualization?: boolean;
/** 是否应用透视校正 */
perspectiveCorrection?: boolean;
/** 透视校正点 */
perspectivePoints?: {
topLeft: Point;
topRight: Point;
bottomRight: Point;
bottomLeft: Point;
};
}
/**
* @file 主入口文件
* @description ID Scanner库的主入口点,提供统一的API和模块导出
* @module index
*/
/**
* IDScanner配置选项
*/
interface IDScannerOptions {
/** 日志级别 */
logLevel?: LogLevel;
/** 是否启用身份证识别模块 */
enableIDCard?: boolean;
/** 是否启用二维码识别模块 */
enableQRCode?: boolean;
/** 是否启用人脸识别模块 */
enableFace?: boolean;
/** 身份证模块配置 */
idCard?: IDCardModuleOptions;
/** 二维码模块配置 */
qrCode?: QRCodeModuleOptions;
/** 人脸识别模块配置 */
face?: FaceModuleOptions;
}
/**
* IDScanner类
* 提供整合的身份证、二维码和人脸识别功能
*/
declare class IDScanner {
/** 版本号 */
static readonly VERSION = "1.5.0";
/** 构建日期 */
static readonly BUILD_DATE: string;
/** 模块管理器 */
private moduleManager;
/** 是否已经初始化 */
private initialized;
/** 日志工具 */
private logger;
/**
* 构造函数
* @param options 配置选项
*/
constructor(options?: IDScannerOptions);
/**
* 初始化库
*/
initialize(): Promise<void>;
/**
* 获取身份证模块实例
* @returns 身份证模块
*/
getIDCardModule(): IDCardModule | undefined;
/**
* 获取二维码模块实例
* @returns 二维码模块
*/
getQRCodeModule(): QRCodeModule | undefined;
/**
* 获取人脸识别模块实例
* @returns 人脸识别模块
*/
getFaceModule(): FaceModule | undefined;
/**
* 释放所有资源
*/
dispose(): Promise<void>;
}
export { CameraAccessError, ConsoleLogHandler, DeviceError, FaceComparisonError, FaceDetectionError, FaceModule, IDCardDetectionError, IDCardModule, IDCardType, IDScanner, IDScannerError, InitializationError, InvalidArgumentError, LivenessDetectionError, LogLevel, Logger, MemoryLogHandler, ModuleManager, NotSupportedError, OCRProcessingError, QRCodeModule, QRScanError, RemoteLogHandler, ResourceLoadError, TaggedLogger, IDScanner as default };
export type { DetectionResult, Disposable, FaceComparisonResult, FaceDetectionResult, FaceModuleOptions, IDCardInfo, IDCardModuleOptions, IDCardVerificationResult, IDScannerOptions, ImageProcessingOptions, LogEntry, LogHandler, Module, ModuleOptions, Point, QRCodeModuleOptions, QRCodeResult, Rect };