更新记录
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_64libUasmUniOcr.so✅(编译 + 架构/符号校验通过)app-harmony/libs/:arm64-v8a / x86_64libUasmUniOcr.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)
- 使用
uasm-ocr/scripts/fetch-tessdata.js下载模型(eng、chi_sim、osd),或从 tessdata_fast 下载。 - 将
*.traineddata放入应用可访问目录(如static/tessdata/)。 - 调用
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

收藏人数:
下载插件并导入HBuilder
下载插件ZIP
赞赏(0)
下载 108
赞赏 0
下载 12731195
赞赏 1959
赞赏
京公网安备:11010802035340号