🚀 开源一款基于 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 目录。
基础使用
javascript
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);
}
返回数据示例
身份证正面识别结果:
json
{
"name": "张三",
"gender": "男",
"ethnicity": "汉族",
"birthDate": "1990年01月01日",
"address": "北京市朝阳区某某街道123号",
"idNumber": "110101199001011234",
"valid": true,
"side": "front"
}
🪪 支持的证件类型
1. 身份证识别
自动判断正反面,提取完整信息:
javascript
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. 银行卡识别
支持国内主流银行卡,自动识别银行和卡类型:
javascript
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. 驾驶证识别
支持主页和副页识别:
javascript
import { parseDriverLicense } from "@/uni_modules/lf-OCR/index.js";
const result = parseDriverLicense(ocrText);
console.log("准驾车型:", result.licenseClass); // C1
console.log("车型描述:", result.licenseClassDesc); // 小型汽车
✅ 内置校验功能
插件不仅能识别文字,还能验证证件有效性:
javascript
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/ 目录下创建新模板,实现自定义证件解析:
javascript
// js_sdk/templates/passport.js
export function parsePassport(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 讨论。