更新记录

1.0.0(2026-05-30) 下载此版本

初次提交


平台兼容性

uni-app x(4.75)

Chrome Safari Android iOS 鸿蒙 微信小程序
× × 5.0 15 ×

其他

多语言 暗黑模式 宽屏模式

laoqianjunzi-ocr

laoqianjunzi-ocr 是一个面向 uni-app x 的本地 OCR 与文档处理插件,提供图片文本识别、文档整理增强、结构化字段提取、会话式分析、JPEG/PDF/Base64 导出等能力。

插件当前文档只说明现有正式接口与现有组件能力,示例全部基于 uni-app x 当前 API 编写。

功能概览

  • 图片全文 OCR
  • 按行 OCR 结果输出
  • 文档边界整理与图像增强
  • 身份证、银行卡、车牌、VIN、营业执照、社保卡、登机牌、答题卡、合同等场景提取
  • 会话式连续分析
  • JPEG、PDF、Base64 导出
  • 运行时能力探测

适用平台

平台 支持情况 说明
uni-app x Web 支持 使用 Canvas + Optional Tesseract,OCR 依赖运行时注入的 Tesseract
uni-app x Android 支持 原生桥接能力已启用
uni-app x iOS 支持 原生桥接能力已启用
uni-app x Harmony 支持 原生桥接能力已启用

版本要求

  • HBuilderX >= 5.07
  • uni-app x >= 4.75
  • Android 最低版本 21
  • iOS 最低版本 15

权限与运行说明

Android

插件已声明相机权限:

  • android.permission.CAMERA

如果业务流程需要从系统相册选图,实际项目中还应根据目标平台版本确认相册访问授权流程。

iOS

插件已包含以下权限说明:

  • 相机使用说明
  • 相册读取说明
  • 相册写入说明

导出图片或 PDF 时,若业务需要保存到系统相册或文件位置,应确保目标环境具备对应写入权限。

Web

  • Web 端 OCR 识别依赖全局 Tesseract
  • Web 端 PDF 导出不可用
  • Web 端导出 jpegbase64 时,结果通常是 Data URL 字符串

安装后导入

import {
    describeOcrRuntime,
    inspectDocumentImage,
    polishDocumentImage,
    readTextFromImage,
    exportDocumentFile,
    openSmartSession,
    pushSmartSessionFrame,
    pauseSmartSession,
    resumeSmartSession,
    closeSmartSession,
    scanIdCard,
    scanBankCard,
    scanVehiclePlate
} from "@/uni_modules/laoqianjunzi-ocr"

import type {
    LqjDocumentOptions,
    LqjDocumentResult,
    LqjExportOptions,
    LqjOcrFailure,
    LqjOcrLanguage,
    LqjPolishOptions,
    LqjSessionActionOptions,
    LqjSessionFrameOptions,
    LqjSessionOptions,
    LqjTextReadOptions
} from "@/uni_modules/laoqianjunzi-ocr"

快速开始

推荐先通过 uni.chooseImage 获取图片路径,再调用插件接口处理。imagePath 需要传入当前平台可访问的本地图片路径。

<script setup lang="uts">
import { inspectDocumentImage } from "@/uni_modules/laoqianjunzi-ocr"
import type { LqjDocumentOptions, LqjDocumentResult, LqjOcrFailure } from "@/uni_modules/laoqianjunzi-ocr"

const imagePath = ref("")
const resultText = ref("等待识别")

function chooseImage() : void {
    uni.chooseImage({
        count : 1,
        success : (res) => {
            if (res.tempFilePaths.length > 0) {
                imagePath.value = res.tempFilePaths[0]
            }
        }
    })
}

function runInspect() : void {
    if (imagePath.value.length == 0) {
        uni.showToast({
            title : "请先选择图片",
            icon : "none"
        })
        return
    }

    const options : LqjDocumentOptions = {
        imagePath : imagePath.value,
        languages : ["zh", "en"] as LqjOcrLanguage[],
        mode : "balanced",
        documentHint : "auto",
        polishBeforeRead : true,
        polishMode : "color",
        success : (res : LqjDocumentResult) => {
            resultText.value = res.fullText.length > 0 ? res.fullText : "未识别到文本"
        },
        fail : (err : LqjOcrFailure) => {
            uni.showToast({
                title : err.errMsg,
                icon : "none"
            })
        }
    }

    inspectDocumentImage(options)
}
</script>

运行时能力探测

使用 describeOcrRuntime() 可以在页面初始化时读取当前平台支持情况。

const runtimeInfo = describeOcrRuntime()

console.log(runtimeInfo.platformName)
console.log(runtimeInfo.engineName)
console.log(runtimeInfo.supportsOcr)
console.log(runtimeInfo.supportsPdfExport)
console.log(runtimeInfo.supportsSession)
console.log(runtimeInfo.usesNativeBridge)

返回结构:

字段 类型 说明
platformName string 当前平台名称
engineName string 当前 OCR / 导出引擎描述
supportsOcr boolean 是否支持 OCR 识别
supportsPdfExport boolean 是否支持 PDF 导出
supportsSession boolean 是否支持会话能力
usesNativeBridge boolean 是否启用原生桥接

核心数据类型

OCR 语言 LqjOcrLanguage

说明
zh 中文
en 英文
ja 日文
ko 韩文
deva 天城文

识别模式 LqjOcrMode

说明
fast 更偏向速度
balanced 速度与效果平衡,推荐默认使用
accurate 更偏向识别质量

文档提示 LqjDocumentHint

说明
auto 自动判断
plainText 普通文本
idCard 身份证
bankCard 银行卡
vehiclePlate 车牌
vehicleVin 车辆 VIN
businessPermit 营业执照
socialCard 社保卡
boardingPass 登机牌
examSheet 答题卡
contract 合同

整理模式 LqjPolishMode

说明
original 保持原图
color 彩色整理
grayscale 灰度整理
binary 二值化
contrast 对比度增强

导出格式 LqjExportFormat

说明
jpeg 导出 JPEG
pdf 导出 PDF
base64 导出 Base64 字符串

API 一览

1. describeOcrRuntime()

读取当前平台运行时支持情况。

2. readTextFromImage(options)

执行全文 OCR。

关键参数:

字段 类型 必填 说明
imagePath string 待识别图片路径
languages LqjOcrLanguage[] \| null 语言列表
mode LqjOcrMode 识别模式
success (res) => void 成功回调
fail (err) => void 失败回调
complete (res, err) => void 完成回调

返回结果重点字段:

字段 类型 说明
fullText string 合并后的全文
blocks LqjTextUnit[] 段落级结果
lines LqjTextUnit[] 行级结果
confidence number 置信度
durationMs number 耗时

示例:

const options : LqjTextReadOptions = {
    imagePath : imagePath.value,
    languages : ["zh", "en"] as LqjOcrLanguage[],
    mode : "balanced",
    success : (res) => {
        console.log(res.fullText)
    }
}

readTextFromImage(options)

3. readLinesFromImage(options)

按行输出 OCR 结果,参数与 readTextFromImage 一致,适合票据、表单、段落拆行预览等场景。

4. polishDocumentImage(options)

执行文档裁切、拉伸修正、灰度化、二值化或增强处理。

关键参数:

字段 类型 必填 说明
imagePath string 输入图片路径
corners LqjPoint[] \| null 文档四角坐标
polishMode LqjPolishMode 整理模式
stretchFix boolean 是否执行拉伸修正

返回结果重点字段:

字段 类型 说明
outputPath string 整理后的结果路径
previewPath string 预览图路径
corners LqjPoint[] 结果使用的四角坐标
quality LqjQualitySnapshot 质量快照

示例:

const options : LqjPolishOptions = {
    imagePath : imagePath.value,
    polishMode : "contrast",
    stretchFix : true,
    success : (res) => {
        console.log(res.outputPath)
    }
}

polishDocumentImage(options)

5. inspectDocumentImage(options)

执行文档分析,输出全文、行块结果、文档类型标签、字段提取、整理结果和质量信息。

关键参数:

字段 类型 必填 说明
imagePath string 输入图片路径
languages LqjOcrLanguage[] \| null 语言列表
mode LqjOcrMode 识别模式
documentHint LqjDocumentHint 文档提示
polishBeforeRead boolean 识别前是否先整理
polishMode LqjPolishMode 整理模式
corners LqjPoint[] \| null 自定义文档四角

返回结果重点字段:

字段 类型 说明
documentHint LqjDocumentHint 实际使用的提示类型
documentLabel string 面向展示的文档标签
fields LqjDocumentField[] 结构化字段
warnings string[] 质量或识别提醒
polishedPath string \| null 识别前整理输出路径
confidence number 识别置信度

6. 场景化快捷方法

这些方法本质上是对 inspectDocumentImage 的语义化封装,内部会自动带上对应 documentHint

  • scanPlainText(options)
  • scanIdCard(options)
  • scanBankCard(options)
  • scanVehiclePlate(options)
  • scanVehicleVin(options)
  • scanBusinessPermit(options)
  • scanSocialCard(options)
  • scanBoardingPass(options)
  • scanExamSheet(options)
  • scanContract(options)

示例:

scanIdCard({
    imagePath : imagePath.value,
    polishBeforeRead : true,
    polishMode : "color",
    success : (res) => {
        console.log(res.documentLabel)
        console.log(res.fields)
    }
} as LqjDocumentOptions)

7. exportDocumentFile(options)

将图片按指定模式整理后导出为 jpegpdfbase64

关键参数:

字段 类型 必填 说明
imagePath string 输入图片路径
format LqjExportFormat 导出格式
polishMode LqjPolishMode 导出前整理模式
quality number 导出质量
corners LqjPoint[] \| null 文档四角

返回结果重点字段:

字段 类型 说明
outputPath string 导出结果路径或 Data URL
format LqjExportFormat 导出格式
mimeType string 结果 MIME 类型
base64Data string \| null base64 导出结果

示例:

const options : LqjExportOptions = {
    imagePath : imagePath.value,
    format : "pdf",
    polishMode : "color",
    quality : 92,
    success : (res) => {
        console.log(res.outputPath)
    }
}

exportDocumentFile(options)

8. readImageBase64(options)

直接读取图片 Base64 内容。

适用场景:

  • 需要把图片内容转成字符串后再上传或二次处理
  • 只需要读取原图内容,不需要文档分析或字段提取

9. 会话式分析 API

会话接口适合连续扫描或多次推送图像的流程。

openSmartSession(options)

开启一个分析会话,返回 LqjSessionSnapshot

字段 类型 必填 说明
sessionId string 会话唯一标识
documentHint LqjDocumentHint 默认文档提示
polishMode LqjPolishMode 默认整理模式
autoPolish boolean 是否自动整理

pushSmartSessionFrame(options)

向会话推送一张图片,输出 LqjDocumentResult

字段 类型 必填 说明
sessionId string 会话 ID
imagePath string 当前帧图片路径
languages LqjOcrLanguage[] \| null 语言列表
mode LqjOcrMode 识别模式
documentHint LqjDocumentHint \| null 当前帧覆盖提示

pauseSmartSession(options) / resumeSmartSession(options) / closeSmartSession(options)

用于暂停、恢复、关闭会话。成功回调返回最新 LqjSessionSnapshot

会话示例:

const session = openSmartSession({
    sessionId : "demo-session",
    documentHint : "contract",
    polishMode : "color",
    autoPolish : true
} as LqjSessionOptions)

const frameOptions : LqjSessionFrameOptions = {
    sessionId : session.sessionId,
    imagePath : imagePath.value,
    languages : ["zh", "en"] as LqjOcrLanguage[],
    mode : "balanced",
    success : (res) => {
        console.log(res.documentLabel)
    }
}

pushSmartSessionFrame(frameOptions)

pauseSmartSession({
    sessionId : session.sessionId
} as LqjSessionActionOptions)

resumeSmartSession({
    sessionId : session.sessionId
} as LqjSessionActionOptions)

closeSmartSession({
    sessionId : session.sessionId
} as LqjSessionActionOptions)

可选组件

插件内置 easycom 组件:lqj-ocr-live

用途:

  • 封装实时扫描容器
  • 通过 params 字符串驱动内部行为
  • 通过 onEvent 事件向外输出结果

当前组件对外暴露的基础约定:

项目 说明
组件名 lqj-ocr-live
props.params string,用于传入 JSON 字符串协议
emits.onEvent 事件回调,事件体中包含 detail

Web 兼容模式下支持的业务指令:

  • startScan
  • stopScan
  • switchCamera
  • setParams

示例:

<template>
    <view class="page-root">
        <lqj-ocr-live :params="liveParams" @onEvent="handleLiveEvent"></lqj-ocr-live>
    </view>
</template>

<script setup lang="uts">
const liveParams = ref('{"businessArray":[{"business":"startScan","params":{"type":"TextDetectorChinese"}}]}')

function handleLiveEvent(event : any) : void {
    const detail = event != null && event.detail != null ? event.detail as UTSJSONObject : null
    if (detail == null) {
        return
    }
    console.log(detail)
}
</script>

<style>
.page-root {
    display: flex;
    flex-direction: column;
    flex: 1;
}
</style>

错误码

错误码 含义
8801 当前平台暂未开放这项能力
8802 图片路径不能为空
8803 无法读取图片数据
8804 文本识别执行失败
8805 分析会话不存在
8806 分析会话当前不可用
8807 当前运行环境缺少 OCR 引擎
8808 文档导出失败
8809 文档整理失败
8810 参数不合法
8811 读取 Base64 失败
8812 当前格式暂不支持导出
8813 当前语言配置暂不支持
8814 文档字段提取失败
8815 图片增强失败

使用建议

1. 图片路径建议

  • 推荐优先使用 uni.chooseImage 获取本地图片路径
  • Android 某些环境下可能返回 content:// 路径,若业务现场遇到读取失败,可先复制到应用可访问目录后再传入插件
  • imagePath 不能为空,否则会直接触发 8802

2. 文档场景建议

  • 普通文本建议使用 scanPlainTextinspectDocumentImage({ documentHint : "plainText" })
  • 证件类场景建议直接使用对应快捷方法,例如 scanIdCardscanBankCard
  • 当文档边界清晰时,开启 polishBeforeRead 往往更容易获得稳定结果

3. Web 端建议

  • 在页面启动阶段先调用 describeOcrRuntime() 判断是否已注入 Tesseract
  • supportsOcrfalse,应在业务层提示当前 Web 环境缺少 OCR 引擎
  • Web 端不要把 pdf 作为默认导出格式

4. 会话使用建议

  • sessionId 建议由业务侧显式传入,便于多实例隔离
  • 推帧前先确保会话处于 running 状态
  • 会话结束后主动调用 closeSmartSession 释放状态

目录说明

路径 说明
pages/index.uvue 插件演示页面
components/lqj-ocr-live/ 实时扫描组件
utssdk/index.uts 统一导出入口
utssdk/interface.uts 类型声明与接口声明

建议验证方式

集成后建议至少验证以下流程:

  • 选择图片并执行全文 OCR
  • 执行一个结构化场景识别,例如身份证或银行卡
  • 执行一次文档整理增强
  • 分别验证 jpeg 与目标平台可用的导出格式
  • 在业务页启动时打印 describeOcrRuntime() 结果确认平台能力

隐私、权限声明

1. 本插件需要申请的系统权限列表:

Android 需要相机、相册读取权限;iOS 需要相机、相册读取与写入权限。

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

所有图片分析与文本提取均在本地执行,不内置远程上传逻辑。

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

暂无用户评论。