ID-Scanner-Lib 开发者指南
简介
ID-Scanner-Lib 是一个纯前端实现的身份证与二维码识别库,专为 Web 应用设计。该库提供高质量的图像处理、OCR 文字识别、身份证信息提取、二维码扫描和人脸识别等功能,所有功能均在浏览器端运行,无需服务器处理,确保用户数据安全。
特性
- 身份证识别:支持中国第二代身份证正反面识别,自动提取姓名、身份证号、住址等信息
- 二维码识别:支持多种二维码格式,包括 QR Code、Code 128、EAN-13 等
- 人脸识别:支持人脸检测、特征点定位、活体检测等
- 模块化设计:按需加载所需功能,减小应用体积
- 多端适配:支持 PC 和移动端,自适应不同设备
- 高性能:优化的算法和 Web Worker 支持,提供流畅的用户体验
- 无服务器依赖:所有功能在浏览器端实现,保护用户隐私
快速开始
本指南将帮助你快速上手 ID-Scanner-Lib,实现身份证识别、二维码扫描和人脸识别功能。
安装
首先,使用 npm 或 yarn 安装库:
bash
# 使用 npm
npm install id-scanner-lib --save
# 或使用 yarn
yarn add id-scanner-lib基础使用
创建扫描器实例
首先创建一个 IDScanner 实例,这是库的核心入口:
javascript
import { IDScanner } from 'id-scanner-lib';
// 创建扫描器实例
const scanner = new IDScanner();
// 初始化扫描器 (必须在使用前调用)
await scanner.initialize();身份证识别
识别身份证并提取信息:
javascript
// 获取身份证模块
const idCardModule = scanner.getIDCardModule();
// 从图像中识别身份证
const imageElement = document.getElementById('idcard-image');
const idCardInfo = await idCardModule.recognize(imageElement);
// 处理识别结果
if (idCardInfo) {
console.log('姓名:', idCardInfo.name);
console.log('身份证号:', idCardInfo.idNumber);
console.log('地址:', idCardInfo.address);
}二维码扫描
扫描图像中的二维码:
javascript
// 获取二维码模块
const qrCodeModule = scanner.getQRCodeModule();
// 扫描图像中的二维码
const imageElement = document.getElementById('qrcode-image');
const qrResult = await qrCodeModule.scan(imageElement);
// 处理扫描结果
if (qrResult) {
console.log('二维码内容:', qrResult.data);
}人脸检测
检测图像中的人脸:
javascript
// 获取人脸模块
const faceModule = scanner.getFaceModule();
// 检测图像中的人脸
const imageElement = document.getElementById('face-image');
const faceResult = await faceModule.detectFace(imageElement);
// 处理检测结果
if (faceResult) {
console.log('检测到人脸:', faceResult);
// 获取人脸属性
if (faceResult.attributes) {
console.log('性别:', faceResult.attributes.gender?.value);
console.log('年龄:', faceResult.attributes.age?.value);
}
}实时扫描示例
以下是一个使用摄像头实时扫描二维码的示例:
javascript
// DOM元素
const videoElement = document.getElementById('camera');
const resultElement = document.getElementById('result');
// 创建扫描器
const scanner = new IDScanner();
await scanner.initialize();
// 获取二维码模块
const qrCodeModule = scanner.getQRCodeModule();
// 启动摄像头
const stream = await scanner.startCamera(videoElement, {
facingMode: 'environment', // 使用后置摄像头
width: 1280,
height: 720
});
// 定时扫描视频帧
let scanning = true;
const scanInterval = setInterval(async () => {
if (!scanning) return;
try {
// 捕获当前帧
const frame = scanner.captureFrame(videoElement);
// 扫描二维码
const result = await qrCodeModule.scan(frame);
if (result) {
// 找到二维码,显示结果
resultElement.textContent = result.data;
// 暂停扫描
scanning = false;
// 可选:停止摄像头
// scanner.stopCamera(stream);
}
} catch (error) {
console.error('扫描错误:', error);
}
}, 500);
// 清理资源
function cleanup() {
clearInterval(scanInterval);
scanner.stopCamera(stream);
scanner.dispose();
}
// 页面关闭时清理资源
window.addEventListener('beforeunload', cleanup);下一步
模块化架构
ID-Scanner-Lib 采用模块化设计,核心功能被划分为不同的模块:
核心模块
- ModuleManager: 负责管理所有功能模块的生命周期
- Logger: 提供日志记录功能
- EventEmitter: 事件发布订阅系统
功能模块
IDCardModule: 身份证识别模块
- OCRProcessor: OCR 文字识别
- IDCardDetector: 身份证检测与定位
- AntiFakeDetector: 防伪特征检测
QRCodeModule: 二维码识别模块
- QRScanner: 二维码扫描器
- BarcodeReader: 条形码阅读器
FaceModule: 人脸识别模块
- FaceDetector: 人脸检测
- FaceLandmark: 人脸特征点
- LivenessDetector: 活体检测
详细 API
IDScanner 类
主要的入口类,用于创建和管理扫描器实例。
构造函数
javascript
const scanner = new IDScanner(options);选项:
logLevel: 日志级别enableIDCard: 是否启用身份证识别(默认: true)enableQRCode: 是否启用二维码识别(默认: true)enableFace: 是否启用人脸识别(默认: false)idCard: 身份证模块配置qrCode: 二维码模块配置face: 人脸识别模块配置
方法
- initialize(): 初始化扫描器
- dispose(): 释放资源
- getIDCardModule(): 获取身份证模块
- getQRCodeModule(): 获取二维码模块
- getFaceModule(): 获取人脸识别模块
IDCardModule 类
身份证识别模块,提供身份证检测与信息提取功能。
方法
- initialize(): 初始化模块
- recognize(image): 识别身份证图像
- verify(idCardInfo): 验证身份证信息
- dispose(): 释放资源
识别结果示例:
javascript
{
type: 'front', // 'front' 或 'back'
name: '张三',
gender: '男',
nationality: '汉族',
birthDate: '1990-01-01',
address: '北京市朝阳区...',
idNumber: '110101199001011234',
issuingAuthority: '北京市公安局',
validFrom: '2010-01-01',
validTo: '2020-01-01',
confidence: 0.95 // 识别置信度
}QRCodeModule 类
二维码识别模块,支持多种格式的二维码和条形码识别。
方法
- initialize(): 初始化模块
- scan(image): 扫描图像中的二维码
- startScanner(videoElement): 启动实时扫描
- stopScanner(): 停止实时扫描
- dispose(): 释放资源
FaceModule 类
人脸识别模块,提供人脸检测、特征提取和活体检测功能。
方法
- initialize(): 初始化模块
- detect(image): 检测图像中的人脸
- getLandmarks(image): 获取人脸特征点
- verifyLiveness(image): 活体检测
- dispose(): 释放资源
高级功能
Web Worker
为提高性能,ID-Scanner-Lib 支持在 Web Worker 中进行繁重的计算任务,使应用界面保持流畅:
javascript
const idCardModule = scanner.getIDCardModule();
// 使用 Web Worker 处理 OCR
const result = await idCardModule.recognize(imageElement, {
useWorker: true
});性能优化
处理大型图像时,可以配置缩放和预处理选项以提高性能:
javascript
const result = await idCardModule.recognize(imageElement, {
maxImageDimension: 1000, // 限制图像最大尺寸
preprocessing: {
brightness: 10, // 亮度调整
contrast: 20, // 对比度调整
sharpen: true // 锐化
}
});自定义事件
使用事件系统监听识别过程中的事件:
javascript
const idCardModule = scanner.getIDCardModule();
// 监听识别完成事件
idCardModule.on('recognized', (event) => {
console.log('识别完成:', event.idCardInfo);
});
// 监听错误事件
idCardModule.on('error', (event) => {
console.error('识别错误:', event.error);
});兼容性
ID-Scanner-Lib 支持以下浏览器环境:
- Chrome 60+
- Firefox 55+
- Safari 11+
- Edge 79+
移动端支持:
- iOS Safari 11+
- Android Chrome 60+
常见问题
识别精度
为获得最佳识别效果,建议:
- 确保图像清晰、光线充足
- 避免强烈反光或阴影
- 身份证在图像中占据足够大的比例
性能问题
如果遇到性能问题,可以:
- 减小处理图像的尺寸
- 启用 Web Worker 选项
- 减少同时加载的模块数量
调试模式
启用调试模式获取更详细的日志信息:
javascript
const scanner = new IDScanner({
logLevel: 'DEBUG'
});许可证
MIT License