更新记录

1.0.3(2026-06-03)

  • 初始版本。
  • 支持本地图片 OCR 识别。
  • 支持相册选图后识别、拍照后识别。
  • 支持返回全文、文本块、文本行与坐标信息。

平台兼容性

uni-app(4.81)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本
- - - - - - 5.0 1.0.3 13 1.0.3 12 1.0.3
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
- - - - - - - - - - - -

uni-app x(4.82)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - -

hl-local-ocr

hl-local-ocr 是一个纯端侧 OCR UTS 插件,统一封装 Android、iOS、HarmonyOS 三端本地文字识别能力,适用于 uni-app / uni-app x 的相册识别、拍照识别和本地图片路径识别。

平台支持

平台 识别引擎 状态 说明
Android Google ML Kit 可用 支持中文、英文、中英混合,返回全文与坐标
iOS Apple Vision 可用 支持中文、英文、中英混合,返回全文与坐标
HarmonyOS Core Vision Kit 可用 支持系统端侧 OCR,支持相册返回的 file://media/... 路径

功能特性

  • 纯端侧识别,不依赖后端服务
  • 不需要第三方云 OCR API
  • 支持相册图片识别
  • 支持拍照后识别
  • 支持直接传本地图片路径识别
  • 支持返回全文文本
  • 支持返回文本块坐标
  • 支持返回文本行坐标
  • 支持中文、英文、中英混合
  • 支持 fast / accurate 模式
  • 统一 uni-app / uni-app x 调用方式

典型场景

  • 图片文字提取
  • 拍照录单
  • 文档拍照录入
  • 快递单号、订单号、设备编号识别
  • 设备铭牌、标签、票据识别
  • OCR 文本高亮与定位展示

Demo 页面

项目内已提供前端调用示例:

pages/local-ocr-demo/index

Demo 包含:

  • 相册识别
  • 拍照识别
  • 语言 / 模式 / 场景切换
  • 全文展示
  • 文本块坐标展示
  • 文本行坐标展示
  • 路径自动兼容处理

快速开始

推荐使用命名空间导入:

import * as LocalOcr from '@/uni_modules/hl-local-ocr'

相册识别示例:

import * as LocalOcr from '@/uni_modules/hl-local-ocr'

uni.chooseImage({
  count: 1,
  sourceType: ['album'],
  success: (res) => {
    const path = res.tempFilePaths[0]

    LocalOcr.recognizeImage({
      path,
      language: 'zh-en',
      mode: 'accurate',
      scene: 'general',
      returnLines: true,
      autoRotate: true,
      normalizeWhitespace: true,
      mergeLineBreaks: false,
      maxSide: 0,
      cropRect: null,
      extractTypes: null
    }, (result) => {
      if (result.code === 0 && result.data != null) {
        console.log('全文', result.data.text)
        console.log('文本块', result.data.blocks)
      } else {
        console.log('识别失败', result.message)
      }
    })
  }
})

API

isSupported()

判断当前平台是否支持本地 OCR。

const supported = LocalOcr.isSupported()

getEngineInfo()

获取当前平台 OCR 引擎信息。

const info = LocalOcr.getEngineInfo()

返回示例:

{
  platform: 'android',
  engine: 'Google ML Kit',
  onDevice: true,
  languages: ['zh', 'en', 'zh-en'],
  modes: ['fast', 'accurate'],
  features: ['fullText', 'blockBounds', 'lineBounds', 'autoRotate', 'cropRect']
}

recognizeImage(options, callback)

识别指定本地图片路径。

LocalOcr.recognizeImage(options, callback)

options 参数:

字段 类型 默认值 说明
path string 必填 本地图片路径
language 'zh' \| 'en' \| 'zh-en' zh-en 识别语言
mode 'fast' \| 'accurate' accurate 识别模式
scene 'general' \| 'express' \| 'document' \| 'device' general 业务场景标识
returnLines boolean true 是否返回文本行坐标
autoRotate boolean true 是否启用方向处理
normalizeWhitespace boolean true 保留参数,便于前端后处理
mergeLineBreaks boolean false 保留参数,便于前端后处理
maxSide number 0 最大边长,0 表示平台默认
cropRect LocalOcrRect \| null null 裁剪区域
extractTypes Array<string> \| null null 保留参数,便于结构化提取扩展

chooseImageAndRecognize(options, callback)

兼容导出接口。当前推荐前端自行调用 uni.chooseImage 后,再调用 recognizeImage

takePhotoAndRecognize(options, callback)

兼容导出接口。当前推荐前端自行调用拍照后,再调用 recognizeImage

返回结构

回调返回 LocalOcrResult

{
  code: 0,
  message: '识别成功',
  data: {
    rawText: '...',
    text: '...',
    blocks: [],
    lines: [],
    matches: [],
    hasText: true,
    blockCount: 3,
    lineCount: 8,
    imageWidth: 1080,
    imageHeight: 1920,
    processedWidth: 1080,
    processedHeight: 1920,
    duration: 120,
    language: 'zh-en',
    mode: 'accurate',
    source: 'direct',
    engine: 'Google ML Kit',
    path: '...',
    scene: 'general',
    autoRotated: false,
    scaleApplied: 1,
    cropRect: null
  }
}

code 约定:

code 说明
0 识别成功
-2 图片路径为空
-3 图片读取或处理失败
-4 OCR 引擎识别失败
-5 OCR 引擎初始化或系统能力不可用
-20 兼容接口提示,请改用前端选图后调用 recognizeImage

blocks 文本块字段:

字段 说明
text 文本块内容
rect 文本块外接矩形
cornerPoints 文本块角点
lines 文本行数组

lines 文本行字段:

字段 说明
text 文本行内容
rect 文本行外接矩形
cornerPoints 文本行角点
blockIndex 所属文本块索引
lineIndex 所属文本行索引

rect 坐标字段:

{
  left: 0,
  top: 0,
  right: 100,
  bottom: 40,
  width: 100,
  height: 40
}

路径说明

推荐直接传 uni.chooseImage 或拍照返回的本地路径。

支持路径类型:

  • Android content://...
  • Android / iOS / HarmonyOS file://...
  • HarmonyOS 相册 file://media/...
  • 原生绝对路径,例如 /storage/emulated/0/.../a.jpg
  • 5+ 临时路径,例如 _doc/...,建议前端先用 plus.io.convertLocalFileSystemURL 转换

不建议直接传:

  • 网络 URL
  • base64
  • 前端相对路径
  • @/static/... 这类源码资源路径

5+ 路径转换示例:

const absolutePath = plus.io.convertLocalFileSystemURL('_doc/ocr/test.jpg')

注意事项

  • OCR 为端侧能力,不会上传图片或识别文本。
  • 首次调用系统 OCR 能力可能略慢。
  • 大图识别建议使用 fast 模式或设置合理 maxSide
  • 做文本高亮时,请使用 imageWidth / imageHeightrect 按比例换算到前端图片展示尺寸。
  • 若前端展示图片使用了 widthFix、裁剪或等比缩放,需要同步处理坐标映射比例。

隐私、权限声明

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

Android 需相机/图片读取权限;iOS 需相机与相册访问权限。

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

所有 OCR 识别均在本地端侧完成,图片与文本结果不会上传到第三方云端。

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

暂无用户评论。