更新记录

0.1.0(2026-10-30) 下载此版本

  • 首个版本:基于 Tesseract OCR 的文字识别 uasm 插件
  • 提供 init() / recognizeSync() / recognize() / version() 接口
  • 支持中英文识别,返回文本、置信度与单词边界框
  • App 平台通过 uni-gyp(Node-API)编译,web/小程序通过 WebAssembly
  • web(uni-ocr.js + uni-ocr.wasm)、微信(uni-ocr.wasm.br)、支付宝(worker 桥接 + uni-ocr.wasm.br)wasm 产物:emscripten 6.0.13 全量自编,与 App 平台同一套 Tesseract 源码
  • Node 端到端识别验证通过(uasm-ocr/test-wasm-node.js)

平台兼容性

uni-app x(5.0)

Chrome Safari Android Android插件版本 iOS iOS插件版本 鸿蒙 鸿蒙插件版本 微信小程序
- - √ 0.1.0 √ 0.1.0 √ 0.1.0 -

其他

多语言 暗黑模式 宽屏模式 蒸汽模式
× × × √

da-ocr-uasm

基于 Tesseract OCR 的文字识别 uasm 插件(uni-app x)。

uasm(UniAssembly)是 uni-app x 蒸汽模式提供的统一二进制加载方案:App 平台(Android / iOS / HarmonyOS)通过 Node-API 让 JS 直通 C/C++ 二进制,web / 小程序平台通过 WebAssembly 运行,全平台使用统一的 uni.loadUasm() / uni.loadUasmSync() 调用。

功能

  • 图片文字识别(OCR),支持中英文(chi_sim / eng)等 100+ 语言
  • 返回完整文本、平均置信度、单词级结果(含边界框)
  • 支持 PNG / JPEG / BMP 图片输入

目录结构

uni_modules/da-ocr-uasm
├── package.json              # 插件配置
├── readme.md
├── changelog.md
└── uasm
    ├── index.d.ts            # IDE 类型声明
    ├── app-android/libs/     # libUasmUniOcr.so (arm64-v8a / x86_64)
    ├── app-harmony/libs/     # libUasmUniOcr.so (arm64-v8a / x86_64)
    ├── app-ios/frameworks/   # UasmUniOcr.xcframework (真机 arm64 + 模拟器)
    ├── web/                  # da-ocr-uasm.js + da-ocr-uasm.wasm (WebAssembly)
    ├── mp-weixin/            # da-ocr-uasm.js + da-ocr-uasm.wasm.br
    └── mp-alipay/            # da-ocr-uasm.js(worker 桥接) + da-ocr-uasm.wasm.br
        workers/mp-alipay/    # alipay worker:da-ocr-uasm.js + da-ocr-uasm-worker-index.js

当前已验证产物:

  • app-android/libs/:arm64-v8a / x86_64 libUasmUniOcr.so ✅(编译 + 架构/符号校验通过)
  • app-harmony/libs/:arm64-v8a / x86_64 libUasmUniOcr.so ✅(同上)
  • app-ios/frameworks/:UasmUniOcr.xcframework ✅(真机 arm64 + 模拟器双架构,导出 _napi_register_module_v1)
  • web/、mp-weixin/、mp-alipay/(workers/mp-alipay/):由 scripts/build-wasm.js 生成,Node 环境验证见下文 ✅
  • 各目录中的 *.md 为说明文件,可随产物一同保留或删除

快速使用

// 1. 初始化引擎(指定 tessdata 目录,其中需包含 eng.traineddata / chi_sim.traineddata)
const ocr = uni.loadUasmSync("uni_modules/da-ocr-uasm")
const ok = ocr.init({ dataPath: "/path/to/tessdata/..", lang: "chi_sim+eng" })
if (!ok) {
  console.error("OCR 引擎初始化失败,请检查 traineddata 模型路径")
}

// 2. 同步识别(App 平台)
const result = ocr.recognizeSync("/absolute/path/to/image.png", {
  lang: "chi_sim+eng",
  psm: 3,
})
console.log(result.text)      // 识别文本
console.log(result.confidence) // 平均置信度

// 3. 异步识别(全平台)
const result2 = await ocr.recognize("/absolute/path/to/image.png", {
  lang: "chi_sim+eng",
})
console.log(result2.text)

获取图片绝对路径

App 平台可用 uni.getFileSystemManager 或 plus.io.convertLocalFileSystemURL 将 _doc / static 等相对路径转为绝对路径后传入。

模型文件(traineddata)

  1. 使用 uasm-ocr/scripts/fetch-tessdata.js 下载模型(eng、chi_sim、osd),或从 tessdata_fast 下载。
  2. 将 *.traineddata 放入应用可访问目录(如 static/tessdata/)。
  3. 调用 init({ dataPath: <tessdata 父目录> })。

web / 小程序平台使用(writeFile 流程)

wasm 运行在内存文件系统(MEMFS)中,没有本地文件;识别前需先用 writeFile() 把模型与图片写入,再把写入路径传给 init() / recognize():

const ocr = await uni.loadUasm("uni_modules/da-ocr-uasm")

// 1. 写入模型(eng.traineddata 约 4.1MB;可打包进 static/ 或按需下载缓存)
//    traineddata: 从 static/tessdata/eng.traineddata 读取的 ArrayBuffer
ocr.writeFile("/tessdata/eng.traineddata", new Uint8Array(traineddata))

// 2. 初始化(全平台统一的 init 选项)
ocr.init({ dataPath: "/tessdata", lang: "eng", oem: 1 })

// 3. 写入待识别图片并识别(img: 用户图片的字节数据)
ocr.writeFile("/img/1.png", new Uint8Array(img))
const result = await ocr.recognize("/img/1.png") // 整行文字的截图建议 psm: 13

微信端 .wasm.br 会由 HBuilderX 编译器自动解压并用 WXWebAssembly 实例化;支付宝端 wasm 限定在 worker 中运行,插件已完成 worker 桥接,页面侧 API 与其他平台一致。

编译说明

uasm 插件需自行编译二进制产物,本仓库提供完整可编译源码工程(uasm-ocr/ 目录),遵循 uni-gyp 规范。

环境要求

  • Node.js 22+、Python 3.9+、CMake 3.22+
  • Android:Android NDK(配置 ANDROID_NDK_HOME)
  • HarmonyOS:OpenHarmony NDK(配置 OHOS_NDK_HOME)
  • iOS:Xcode(仅 macOS,需 cmake 在 PATH)
  • web / 小程序:emscripten(Emscripten SDK)

编译 App 平台(Android / iOS / HarmonyOS)

cd uasm-ocr

# 1. 安装依赖工具
npm install
npm i -D @dcloudio/uni-gyp node-addon-api

# 2. 下载 Tesseract / leptonica / libpng / libjpeg / zlib 源码到 third_party/
node scripts/fetch-deps.js

# 3. 编译并生成 uni-module(产物写入 uni_modules/da-ocr-uasm)
npm run build:uni-ocr:all

iOS 的 xcframework 仅在 macOS 上可编译;Android/HarmonyOS 的 so 库需对应 NDK 环境。

编译 web / 小程序(WebAssembly)

web / mp 平台的 wasm 产物由 emscripten 全量自编(与 App 平台同一套源码):brew install emscripten 后执行:

npm run build:uni-ocr:wasm   # 编译并自动组装到 uasm/web、uasm/mp-weixin、uasm/mp-alipay(workers/mp-alipay)
npm run test:uni-ocr:wasm    # Node 端到端识别验证

详细编译契约、链接参数与已知要点见 uasm-ocr/README.md「编译 web / 小程序」。

注意事项

  • App 平台当前同步执行:Node-API 暂不支持 worker / thread-safe 异步,recognize() 内部为同步识别后包装为 Promise。识别耗时图片会短暂阻塞 JS 线程,建议在后台/提示 Loading 中调用。
  • 模型加载耗时:首次 init() 需加载 traineddata(数 MB),建议在应用启动或识别前预初始化。
  • 二进制产物较大(含 Tesseract + leptonica),建议只保留目标 ABI 以减小包体。

License

MIT

隐私、权限声明

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

无

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

无

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

无

许可协议

MIT协议

暂无用户评论。