[特殊字符] 开源一款基于 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 目录。

基础使用

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 - 可免费用于商业项目


🙏 致谢


如果这个项目对你有帮助,欢迎 ⭐️ Star 支持一下!有问题或建议也欢迎提 Issue 讨论。

相关推荐
摇滚侠1 小时前
npm 设置了阿里云镜像,然后全局安装了 pnpm,pnpm 还需要设置阿里云镜像吗
前端·阿里云·npm
熊猫钓鱼>_>2 小时前
【开源鸿蒙跨平台开发先锋训练营】Day 7:开源鸿蒙开发第一阶段复盘与技术深度总结
react native·华为·开源·harmonyos·arkts·openharmony·rnoh
程序员清洒7 小时前
Flutter for OpenHarmony:GridView — 网格布局实现
android·前端·学习·flutter·华为
VX:Fegn08957 小时前
计算机毕业设计|基于ssm + vue超市管理系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·课程设计
0思必得07 小时前
[Web自动化] 反爬虫
前端·爬虫·python·selenium·自动化
LawrenceLan7 小时前
Flutter 零基础入门(二十六):StatefulWidget 与状态更新 setState
开发语言·前端·flutter·dart
秋秋小事8 小时前
TypeScript 模版字面量与类型操作
前端·typescript
2401_892000528 小时前
Flutter for OpenHarmony 猫咪管家App实战 - 添加提醒实现
前端·javascript·flutter
Yolanda948 小时前
【项目经验】vue h5移动端禁止缩放
前端·javascript·vue.js
时光慢煮8 小时前
【Flutter × OpenHarmony】跨端开发实现全局Toast提示卡片
flutter·华为·开源·openharmony