更新记录
2.0.3(2026-10-14)
- 新增 Android UTS API 插件,支持在 uni-app 项目中通过 import 调用。
- 支持 PP-OCRv4、ML Kit 和 auto 双引擎自动复核。
- 新增
getEngineInfo、initEngine、identify、releaseAPI。 - 支持本地图片、网络图片、相册图片识别和进度回调。
- 更新示例工程、使用说明和效果截图。
平台兼容性
离线 OCR 文字识别 UTS 版
ysh-ocr-uts 是 Android 离线 OCR UTS API 插件,支持中文、英文、数字和常用符号识别,内置 PP-OCRv4、Google ML Kit 双引擎,并支持 Auto 模式自动复核。
平台与兼容性
| 项目 | 值 |
|---|---|
| 类型 | uni-app UTS API 插件 |
| 平台 | Android |
| minSdkVersion | 21 |
| Android 最低版本 | Android 5.0 |
| ABI | armeabi-v7a、arm64-v8a、x86 |
| HBuilderX 最低版本 | ^3.91.0 |
| uni-app | 支持 uni-app,暂不支持 uni-app x |
| iOS / HarmonyOS | 暂不支持 |
| 离线能力 | OCR 引擎和模型离线运行;网络图片识别需要应用联网 |
依赖:
com.microsoft.onnxruntime:onnxruntime-android:1.17.1
com.google.mlkit:text-recognition:16.0.0
com.google.mlkit:text-recognition-chinese:16.0.0
集成方式
- 从插件市场安装本插件,或将
uni_modules/ysh-ocr-uts放入 uni-app 项目。 - 如使用网络图片,请在
manifest.json中声明android.permission.INTERNET。 - 修改 UTS、AAR 或依赖后,请重新制作包含 UTS 插件的自定义调试基座,或重新云打包。
- 页面中直接 import:
import { getEngineInfo, initEngine, identify, release } from '@/uni_modules/ysh-ocr-uts';
三种识别模式
1. auto:自动复核模式(推荐)
auto 是默认模式。插件先使用 PP-OCRv4 识别,并根据结果质量分判断是否足够可靠;当 PP-OCRv4 质量不足时,会调用 ML Kit 进行复核和结果比较,最终返回质量更优的文本。
适合场景:
- 普通中文、英文、数字、日期、短文本识别。
- 开发者不想手动选择引擎。
- 对稳定性要求高于极致速度的场景。
特点:
- 中文短文本表现较好。
- 对低质量、小字、符号结果会尝试 ML Kit 复核。
- 速度比单引擎慢,因为可能触发第二次 ML Kit 推理。
2. paddle / pp-ocrv4:PP-OCRv4 单引擎模式
直接调用 PP-OCRv4 OCR 引擎,不进入 ML Kit 复核流程。
适合场景:
- 中文、数字、常见标点识别。
- 图片较清晰、文字较大。
- 不需要双引擎复核,追求可预测耗时。
特点:
- 中文短文本识别效果较好。
- 对部分英文空格、标点、复杂密集文段仍可能误识别。
- 速度通常优于
auto,因为不会自动触发 ML Kit 第二次识别。
3. mlkit:Google ML Kit 单引擎模式
直接调用 Google ML Kit 文本识别能力,当前使用 text-recognition-chinese 中文识别模型。
适合场景:
- 英文、数字、常见符号。
- 不希望使用 PP-OCRv4 的机型或场景。
- 作为
auto复核链路的单独测试模式。
特点:
- 英文、数字和常见符号较稳定。
- 中文标点、密集小字、特殊符号容易漏识别或替换。
- 部分样本速度优于 PP-OCRv4,但耗时受机型影响较大。
技术实现
插件识别链路如下:
UTS API -> Android AAR -> ImageLoader -> AutoOcrEngine -> PP-OCRv4 / ML Kit -> 质量评分 -> 返回文本
主要技术:
| 模块 | 技术 |
|---|---|
| UTS 接口层 | getEngineInfo、initEngine、identify、release,使用 UTS Android 调度器异步执行 |
| OCR 主引擎 | PP-OCRv4 文字检测 + PP-OCRv4 文字识别 |
| 推理运行时 | ONNX Runtime Android 1.17.1 |
| 备用复核引擎 | Google ML Kit Text Recognition Chinese 16.0.0 |
| 自动模式 | PP-OCRv4 先识别,低质量时 ML Kit 复核,并按质量分选择结果 |
| 质量评分 | 根据识别区域、检测分数、文本长度、中英标点、疑似乱码等规则计算 qualityScore |
| 图片来源 | 本地文件路径、应用沙箱路径、网络 URL |
| 图片处理 | ImageLoader 加载 Bitmap、recycle 释放、异常回调 |
| 进度回调 | queued、engine、image、recognize、result、done、error 等阶段 |
API
getEngineInfo(): EngineInfo
同步返回插件版本、默认引擎、支持引擎列表等信息。
const info = getEngineInfo();
console.log(info.version, info.defaultEngine, info.engines);
initEngine(options)
初始化或切换 OCR 引擎。
initEngine({
engine: 'auto',
success(res) {
console.log(res.engine, res.version);
},
fail(err) {
console.error(err);
}
});
engine 可选值:
| 值 | 说明 |
|---|---|
auto |
默认,PP-OCRv4 优先,低质量时 ML Kit 复核 |
paddle / pp-ocrv4 |
PP-OCRv4 引擎 |
mlkit |
Google ML Kit 中文识别引擎 |
identify(options)
识别本地图片或网络图片。
identify({
url: 'https://example.com/demo.png',
engine: 'auto',
speed: 'balanced',
fallback: true,
progress(res) {
console.log(res.stage, res.percent, res.message);
},
success(res) {
console.log(res.text, res.processTime, res.selectedEngine, res.qualityScore);
},
fail(err) {
console.error(err);
}
});
参数:
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
path |
string | 否 | Android 可读取的图片文件路径,与 url 二选一 |
url |
string | 否 | 网络图片地址,与 path 二选一 |
engine |
string | 否 | auto、paddle、mlkit,默认 auto |
speed |
string | 否 | fast、balanced、accurate,默认 balanced |
fallback |
boolean | 否 | Auto 模式是否允许双引擎复核,默认 true |
progress |
function | 否 | 进度回调 |
success |
function | 否 | 成功回调 |
fail |
function | 否 | 失败回调 |
返回字段:
type IdentifyResult = {
text: string,
processTime: number,
imageWidth: number,
imageHeight: number,
engine: string,
selectedEngine: string,
confidence: number,
qualityScore: number,
comparisonInfo: string
}
release()
释放 OCR 引擎资源。建议在页面 onUnload 中调用。
onUnload() {
release();
}
快速示例
完整示例以 pages/native-plugin/ocr-test-uts.vue 为基础,包含批量测试、本地图片、网络图片、相册和识别日志。
<template>
<view>
<button :disabled="loading" @click="run">识别网络图片</button>
<text v-if="loading">识别中 {{ progress }}%</text>
<text v-else>{{ text }}</text>
<text v-if="selectedEngine">实际引擎:{{ selectedEngine }}</text>
<text v-if="qualityScore">质量分:{{ qualityScore }}</text>
</view>
</template>
<script>
import { initEngine, identify, release } from '@/uni_modules/ysh-ocr-uts';
export default {
data() {
return {
loading: false,
progress: 0,
text: '',
selectedEngine: '',
qualityScore: ''
};
},
onUnload() {
release();
},
methods: {
run() {
this.loading = true;
initEngine({
engine: 'auto',
success: () => {
identify({
url: 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png',
engine: 'auto',
speed: 'balanced',
progress: (p) => {
this.progress = p.percent || 0;
},
success: (res) => {
this.loading = false;
this.text = res.text || '';
this.selectedEngine = res.selectedEngine || '';
this.qualityScore = res.qualityScore || '';
},
fail: (err) => {
this.loading = false;
console.error(err);
}
});
},
fail: (err) => {
this.loading = false;
console.error(err);
}
});
}
}
};
</script>
识别率与实测数据
1. 测试口径
本次测试使用项目内置 60 张本地图片,覆盖:
- 中文短句、中文产品名、中文段落。
- 英文单词、英文句子、英文邮箱、URL。
- 日期、时间、手机号、身份证、订单号、价格、比例、重量。
- 符号、大小写、字体颜色、手写风格。
- 密集文段和多行长文本。
测试判定规则:
- 短文本样本:按识别文本与期望文本的相似度判定。
- 长文段样本:按关键片段命中率判定。
- 只有达到业务阈值才计为通过,因此该通过率不是“字符级 OCR 准确率”,而是“业务样本通过率”。
2. 最近一次实测结果
测试模式:engine=auto,speed=balanced。
| 指标 | 结果 |
|---|---|
| 样本数 | 60 |
| 通过 | 53 |
| 失败 | 7 |
| 业务通过率 | 88.33% |
| 平均识别率/匹配度 | 88.37% |
| 平均单张耗时 | 534ms |
| 最近一次总耗时 | 50684ms |
| FATAL EXCEPTION | 0 |
补充性能参考:
| 引擎日志 | 平均单次耗时 |
|---|---|
PP-OCRv4 total |
540ms |
ML Kit OCR completed |
681ms |
3. 分类表现
| 类型 | 表现 | 说明 |
|---|---|---|
| 中文短文本 | 较好 | 如“这是一个测试句子”“你好世界”“智能手机显示器”等多数通过 |
| 英文短文本 | 较好 | 如 Hello、Practice makes perfect、www.example.com |
| 数字与日期 | 较好 | 日期、时间、手机号、身份证、金额等多数通过 |
| 常用符号 | 一般 | @#$%&* 可识别,复杂符号组合易错 |
| 中英标点混排 | 一般 | 中英文逗号、冒号、感叹号容易混淆 |
| 密集文段 | 一般 | 单行清晰文段表现较好,多行长文本容易漏行/串字 |
| 小字/低质量图片 | 不稳定 | 需要更高分辨率或预处理 |
4. 失败样本说明
本次失败的 7 个样本:
| 样本 | 主要问题 |
|---|---|
paragraph_04.png |
多行混合内容,片段命中率 40.51% |
paragraph_06.png |
密集中文段落,片段命中率 12.06% |
paragraph_07.png |
复杂版面,片段命中率 3.79% |
paragraph_08.png |
小字和密集医疗字段,片段命中率 5.43% |
price.png |
价格符号/冒号附近误识别,相似度 75% |
punctuation.png |
中英文标点混淆,相似度 66.67% |
symbol2.png |
符号组合误识别,相似度 57.14% |
隐私与权限
插件本身不主动采集或上传识别文本。
| 权限 | 使用场景 |
|---|---|
android.permission.INTERNET |
使用 identify({url}) 下载网络图片 |
android.permission.READ_EXTERNAL_STORAGE |
读取用户选择的本地图片 |
android.permission.CAMERA |
调用拍照能力获取图片 |
注意事项
- iOS 和 HarmonyOS 暂不提供原生实现。
- 修改 UTS 原生代码、AAR 或远程依赖后,必须重新制作自定义调试基座。
- 图片路径必须是 Android 可读取路径;Android 10+ 分区存储下建议先复制到应用私有目录。
- 识别率与图片分辨率、字体、拍摄角度、背景、压缩噪声、机型性能强相关,复杂场景请结合
qualityScore和业务规则做二次校验。 - 本插件不承诺完全替代商业 OCR 服务。

收藏人数:
购买源码授权版(
试用
使用 HBuilderX 导入示例项目
赞赏(0)
下载 12828
赞赏 2
下载 12679940
赞赏 1956
赞赏
京公网安备:11010802035340号