[特殊字符] 开源一款基于 PaddleOCR 的纯离线 OCR 识别插件 | 支持身份证、银行卡、驾驶证识别
🚀 开源一款基于 PaddleOCR 的纯离线 OCR 识别插件 | 支持身份证、银行卡、驾驶证识别
不依赖任何云服务,所有识别在本地完成,隐私安全有保障!
前言
在移动应用开发中,OCR 识别是一个常见需求,尤其是证件识别场景:身份证实名认证、银行卡绑定、驾驶证信息录入等。
然而,市面上大多数 OCR 方案都依赖云服务 API,存在以下问题:
- 💰 成本高 - 按调用次数收费,量大时费用惊人
- 🌐 需要网络 - 离线场景无法使用
- 🔓 隐私风险 - 敏感证件数据上传到第三方服务器
为了解决这些痛点,我开发了 lf-OCR —— 一款基于 PaddleOCR 的纯离线 OCR 识别插件,专为 uni-app 多端开发设计。
✨ 核心特性
| 特性 | 说明 |
|---|---|
| 🔒 纯离线 | 所有模型和依赖本地化,无需网络即可使用 |
| 🚀 高性能 | 基于 PaddleOCR,识别速度快、准确率高 |
| 🎯 中文优化 | 专为中文场景优化,识别效果出色 |
| 📱 多平台 | 支持 H5、App (Android/iOS) |
| 🪪 证件识别 | 内置身份证、银行卡、驾驶证解析模板 |
| ✅ 智能验证 | 自动验证证件有效性(校验码、有效期等) |
| 🔄 自动识别 | 智能判断证件正反面,无需手动指定 |
| 🔧 易于扩展 | 支持自定义模型和识别模板 |
📦 技术架构
lf-OCR ├── 核心引擎 (PaddleOCR + ONNX Runtime + OpenCV.js) ├── 证件解析模板 (身份证/银行卡/驾驶证/通用) ├── 校验工具 (身份证号/银行卡号/手机号等) └── 格式化工具 (日期/金额/手机号等) 整个插件大小约 35MB,包含:
- ppocr_det.onnx - 文字检测模型
- ppocr_rec.onnx - 文字识别模型
- OpenCV.js - 图像处理
- ONNX Runtime - 模型推理
🎮 快速上手
安装
在 HBuilder 插件市场搜索 lf-OCR 导入,或手动复制到 uni_modules 目录。
基础使用
import lfOCR from"@/uni_modules/lf-OCR/index.js";// 初始化引擎await lfOCR.init({onProgress:(msg)=> console.log("加载进度:", msg),});// 识别身份证const result =await lfOCR.recognize(imagePath,"idCard");if(result.valid){ console.log("姓名:", result.name); console.log("身份证号:", result.idNumber); console.log("地址:", result.address);}返回数据示例
身份证正面识别结果:
{"name":"张三","gender":"男","ethnicity":"汉族","birthDate":"1990年01月01日","address":"北京市朝阳区某某街道123号","idNumber":"110101199001011234","valid":true,"side":"front"}🪪 支持的证件类型
1. 身份证识别
自动判断正反面,提取完整信息:
import{ parseIdCard, validateIdCard }from"@/uni_modules/lf-OCR/index.js";const result =parseIdCard(ocrText);if(result.side ==="front"){// 正面:姓名、性别、民族、出生日期、地址、身份证号const validation =validateIdCard(result.idNumber); console.log("年龄:", validation.info.age);}else{// 背面:签发机关、有效期限 console.log("是否过期:", result.isExpired);}2. 银行卡识别
支持国内主流银行卡,自动识别银行和卡类型:
import{ parseBankCard }from"@/uni_modules/lf-OCR/index.js";const result =parseBankCard(ocrText); console.log("卡号:", result.cardNumberFormatted);// 6222 0212 3456 7890 123 console.log("银行:", result.bankName);// 中国工商银行 console.log("类型:", result.cardType);// 借记卡3. 驾驶证识别
支持主页和副页识别:
import{ parseDriverLicense }from"@/uni_modules/lf-OCR/index.js";const result =parseDriverLicense(ocrText); console.log("准驾车型:", result.licenseClass);// C1 console.log("车型描述:", result.licenseClassDesc);// 小型汽车✅ 内置校验功能
插件不仅能识别文字,还能验证证件有效性:
import{ validateIdCard, validateBankCard,}from"@/uni_modules/lf-OCR/index.js";// 身份证校验(含校验码验证)const idResult =validateIdCard("110101199001011234");if(idResult.valid){ console.log("地区:", idResult.info.region); console.log("出生日期:", idResult.info.birthDate); console.log("性别:", idResult.info.gender); console.log("年龄:", idResult.info.age);}// 银行卡校验(Luhn 算法)const bankResult =validateBankCard("6222021234567890123"); console.log("是否有效:", bankResult.valid);🔧 扩展开发
更换 OCR 模型
支持替换为其他 ONNX 格式模型:
hybrid/html/models/ ├── ppocr_det.onnx # 替换检测模型 ├── ppocr_rec.onnx # 替换识别模型 └── ppocr_keys_v1.txt # 替换字典文件 新增识别模板
在 js_sdk/templates/ 目录下创建新模板,实现自定义证件解析:
// js_sdk/templates/passport.jsexportfunctionparsePassport(text, lines =[]){const result ={name:"",passportNumber:"",nationality:"",valid:false,};// 实现字段提取逻辑...return result;}📱 平台兼容性
| 平台 | 支持 |
|---|---|
| H5 | ✅ |
| App (Android) | ✅ |
| App (iOS) | ✅ |
| 微信小程序 | ❌ (不支持 WebAssembly) |
🔗 项目地址
📷 页面截图
🤔 常见问题
Q: 识别准确率如何?
A: 基于 PaddleOCR,中文识别准确率可达 95% 以上。建议使用清晰、光线充足的图片。
Q: 支持哪些证件?
A: 目前内置身份证、银行卡、驾驶证模板,同时支持通用文字识别。后续会持续更新。
Q: 如何添加新证件类型?
A: 在 js_sdk/templates/ 目录下创建新模板文件,参考现有模板实现即可。
📄 开源协议
MIT License - 可免费用于商业项目
🙏 致谢
- PaddleOCR - 提供高质量 OCR 模型
- ONNX Runtime - 跨平台模型推理
- OpenCV.js - 图像处理
如果这个项目对你有帮助,欢迎 ⭐️ Star 支持一下!有问题或建议也欢迎提 Issue 讨论。