更新记录

1.0.5(2026-09-15) 下载此版本

  1. 【功能增强】新增完整示例页面:
    • 新增 example/OcrDemo.vue:包含完整的 OCR 识别示例
    • 涵盖权限申请、引擎初始化、图片选择、文字识别、结果导出等完整流程
    • 提供美观的 UI 界面和详细的使用说明
    • 支持 Mock 模式和真实识别模式切换
  2. 【文档完善】新增快速使用指南:
    • 新增 example/QUICK_START.md:详细的快速开始文档
    • 提供两种集成方式(示例页面/API调用)
    • 详细说明模型配置步骤
    • 包含常见问题解答和调试技巧
  3. 【性能优化】修复 Harmony 引擎图片读取逻辑:
    • 优化 recognizeImage 方法中的 ArrayBuffer 分配策略
    • 动态计算文件大小,避免固定 10MB buffer 导致的内存浪费
    • 使用 fs.statSync 获取真实文件大小,合理分配 buffer
    • 确保大图片(超过 10MB)也能正确读取

1.0.4(2026-09-14) 下载此版本

  1. 修复 app-android/app-ios/app-harmony 三端 engine.uts 中读取 options.imagePath 的错误:官方 UniImageFile 类型的字段是 path,读取 imagePath 永远是 undefined,导致 OCR 无结果
  2. 修复 parseResult 输出 schema 与 UniOcrBlock 类型不一致的问题:统一改为 { text, score, box: { x, y, w, h } },与 DCloud 类型保持一致
  3. permission-manager 重写:移除返回 null 的 getActivity() 调用
  4. permission-manager 优先使用 uni.requestPermission / uni.openAppAuthorizeSetting
  5. openHarmonySettings 实现完整(之前为空函数)
  6. app-harmony 端增加 BusinessError 处理,避免 OCR 异常吞掉
  7. readme.md 更新为新版本 API 文档

1.0.3(2026-03-20) 下载此版本

-修复:ios打包路径问题

查看更多

平台兼容性

uni-app(4.45)

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

鸿蒙Next+Android+iOS 离线OCR文字识别 UTS插件

离线 OCR UTS 插件:鸿蒙 Next 通过系统内置 Core Vision Kit 文字识别;Android/iOS 基于 MNN 3.2.0 + PaddleOCR ch_PP-OCRv4_light。统一 API、自动模型下载、断点续传、相机/相册/存储权限引导,无网无广告无数据采集。

核心特性

  • 三端完整支持:鸿蒙Next、Android、iOS 全平台
  • 离线识别:鸿蒙Next 通过 Core Vision Kit 系统内置能力;Android/iOS 基于 MNN 3.2.0 + PaddleOCR ch_PP-OCRv4_light 本地推理
  • 统一 API:三端相同接口
  • 权限引导:自动申请相机/相册/存储权限,拒绝后给出引导
  • 统一的返回结构UniOcrResult { text, blocks[{ text, score, box{x,y,w,h} }], raw }

安装

HBuilderX 中

工具 → 插件安装 → 市场 → 搜索「鸿蒙Next+Android+iOS 离线OCR文字识别 MNN3.2.0 UTS插件」并安装。

依赖要求

  • 鸿蒙 Next:依赖系统内置 Core Vision Kit
  • Android:libMNN.so(armeabi-v7a / arm64-v8a),来自 MNN-3.2.0-android.zip
  • iOS:MNN.framework(arm64 / x86_64),来自 MNN-3.2.0-ios.zip

API

init(options): Promise<void>

初始化 OCR 引擎。

字段 类型 说明
modelPath string MNN 模型本地路径(必填,鸿蒙可省略)
vocabPath string 可选,字典/标签文件
threads number 推理线程数(默认 2)
lowPower boolean 低功耗模式
mock boolean 是否启用 Mock(示例工程无需模型即可运行)

recognizeImage(options): Promise<UniOcrResult>

识别本地图片。options.path 为必填图片路径。

export(result, format): string

format 支持 'text' / 'json'

downloadModel(modelInfo, ): Promise<boolean>

模型下载,支持进度回调。

checkModelStatus(modelPath): Promise<boolean> / deleteModel(modelPath): Promise<boolean>

模型存在性检查与删除。

requestPermission(type): Promise<PermissionStatus>

权限类型:'camera' | 'album' | 'storage'

openAppSettings(): void

打开应用设置页面,用于权限被永久拒绝时的引导。

使用示例

import { uniOcrOfflineHarmony } from '@/uni_modules/zy-ocr-tool/utssdk/index.uts';

// 1. 申请权限
const camera = await uniOcrOfflineHarmony.requestPermission('camera');
if (!camera.granted) {
  uniOcrOfflineHarmony.openAppSettings();
  return;
}

// 2. 初始化引擎
await uniOcrOfflineHarmony.init({
  modelPath: '_doc/models/ch_PP-OCRv4_light.mnn',
  threads: 2,
  // mock: true, // 示例工程可开启,省去模型准备
});

// 3. 下载模型(首次)
const ok = await uniOcrOfflineHarmony.downloadModel(
  {
    name: 'ch_PP-OCRv4_light',
    url: 'https://your.cdn.com/ch_PP-OCRv4_light.mnn',
    localPath: '_doc/models/ch_PP-OCRv4_light.mnn',
  },
  (progress) => console.log('下载进度:', progress + '%')
);

// 4. 识别
const result = await uniOcrOfflineHarmony.recognizeImage({
  path: '_doc/photo.jpg',
  structured: false,
});

console.log('全文:', result.text);
console.log('文字块:', result.blocks);

// 5. 导出
const json = uniOcrOfflineHarmony.export(result, 'json');

三端适配说明

鸿蒙Next

  • 通过 Core Vision Kit 的 textRecognition 系统能力,无需模型
  • 利用 NPU 硬件加速

Android

  • 封装 libMNN.so(armeabi-v7a / arm64-v8a)
  • 图片预处理:缩放 640×480 + 灰度化

iOS

  • 封装 MNN.framework(arm64 / x86_64)
  • 图片预处理:缩放 640×480 + 灰度化(Core Image)

模型转换

./mnnconvert --framework Paddle --modelFile ch_PP-OCRv4_det_infer/model.pdmodel --paramFile ch_PP-OCRv4_det_infer/model.pdiparams --MNNModel det.mnn --bizCode MNN
./mnnconvert --framework Paddle --modelFile ch_PP-OCRv4_rec_infer/model.pdmodel --paramFile ch_PP-OCRv4_rec_infer/model.pdiparams --MNNModel rec.mnn --bizCode MNN
./mnnmerge det.mnn rec.mnn ch_PP-OCRv4_light.mnn

权限说明

插件运行时申请相机 / 相册 / 存储权限,被永久拒绝时调用 openAppSettings() 引导用户手动开启。

许可证

  • 插件本身:MIT
  • MNN:MIT
  • PaddleOCR:Apache 2.0

更新日志

1.0.4(2026-09-13)

  1. 完善 displayName/description/keywords
  2. 三端引擎 recognizeImage 改为读取 options.path(之前错误读取 options.imagePath,调用方传 path 会被作为 undefined,导致识别必定失败)
  3. 统一三端 parseResult 输出 schema:blocks 使用 { text, score, box{x,y,w,h} },与 UniOcrBlock 类型保持一致
  4. UniOcrResult 增加 raw 字段透传原始输出,便于调试与二次处理
  5. 重写 permission-manager.uts:优先使用 uni.requestPermission/uni.openAppAuthorizeSetting,避免依赖不存在的 getActivity() 兜底函数
  6. 修复 openHarmonySettings 之前为空实现的问题
  7. 错误信息容错:所有 catch 分支统一处理 ErrorBusinessError,避免 (error as Error).message 在 unknown 异常上 NPE
  8. 模型下载 iOS 路径明确进度回调尚不支持(注释说明)
  9. 鸿蒙引擎使用 BusinessError 提取友好错误信息

隐私、权限声明

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

需要相机/相册/存储权限,插件会自动申请并在拒绝后给出引导提示。

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

不采集任何用户数据;不联网;不含第三方统计/广告 SDK。

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

许可协议

License / 许可证说明

本插件源码由作者原创编写,按 Apache-2.0 许可证开源(便于商业项目使用、修改与再分发)。

第三方依赖

本插件的离线推理设计基于 MNN(轻量级 AI 推理框架,开源许可证 Apache-2.0)。

  • MNN 项目地址(仅用于许可证溯源说明):https://github.com/alibaba/MNN
  • 许可证:Apache-2.0

注意:为了避免版权/合规风险,本插件 不内置任何来自第三方的 OCR 模型文件。你可以根据自身业务选择符合开源协议的模型(例如 Apache-2.0 许可的 OCR 模型),并按 README 指引放入指定目录离线使用。


Apache License 2.0

Copyright 2026

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.