拓展下载
-
.aix 最新拓展下载:
- 内置简体中文
chi_sim轻量模型,安装后即可离线识别
- 内置简体中文
注:本拓展包含原生库(.so),联机调试需 2026-07 之后的新版 AI 伴侣;打包 APK 不受影响,详见 常见问题。
简介
OCR(Optical Character Recognition,光学字符识别)拓展把 Tesseract 5 引擎带进 App Inventor:给一张图片,把图里的文字认出来变成文本。完全离线——不需要 API Key、不联网、不产生任何费用,识别在手机本地完成。
三种图片来源都支持:
| 来源 | 方法 |
|---|---|
| 图片文件(素材名 / 设备路径) | RecognizeImageFile |
| 界面上的图像组件 | RecognizeImageComponent |
| Base64 编码的图片数据 | RecognizeBase64 |
典型场景:拍答题卡取题、识别商品标签、从截图里抽文字、无障碍朗读前取词等。
技术原理与内部框架
拓展采用“输入适配 → 后台识别 → 事件回传”的处理框架:
- 模型管理:
Init首次运行时把语言模型释放到应用私有目录,并创建 Tesseract 识别实例;更换Language后可加载应用素材中的其它语言模型。 - 输入适配:文件路径、图像组件和 Base64 数据都会先统一解码为 Android Bitmap,再交给识别层处理。
- 任务调度:初始化和识别任务在单线程后台队列中顺序执行,避免阻塞界面;
Ready与Busy用于暴露当前状态并防止任务重入。 - 文字识别:底层通过 Tesseract 5 与 Leptonica 分析图像,使用
.traineddata语言模型输出 UTF-8 文本。 - 结果回传:识别完成后切回界面线程,通过
Initialized、GotText和ErrorOccurred事件把状态、文本或错误信息交给 App Inventor 积木。
快速上手
调用顺序固定三步:先 Init 初始化引擎 → 等 Initialized 事件 → 再调识别方法、在 GotText 里拿结果。识别是异步的,调完方法就返回,结果通过事件送回来。
属性
- Language
- 识别语言,对应 tessdata 里的模型名,默认
chi_sim(简体中文)。要用其它语言,把对应的.traineddata加进应用素材,再把本属性设成它的文件名(不含扩展名)。 - Ready
- 引擎是否已就绪(Init 成功后为真)。只读。
- Busy
- 是否正在识别中;识别期间再次调用识别方法会被忽略并触发
ErrorOccurred。只读。
事件
- Initialized(success,message)
- 初始化完成时触发;success 为真表示引擎已就绪。
- GotText(text)
- 识别成功时触发,text 为识别出的文字。
- ErrorOccurred(message)
- 出错时触发。
方法
- Init()
- 初始化识别引擎(首次会把模型解到应用私有目录)。异步执行,完成后触发 Initialized 事件。
- RecognizeImageFile(path)
- 识别图片文件里的文字。路径可以是素材名、/sdcard 路径或 file:// 地址。异步执行,成功后触发 GotText 事件。
- RecognizeImageComponent(imageComponent)
- 识别图像组件当前显示图片里的文字。
- RecognizeBase64(base64)
- 识别 Base64 编码图片里的文字(可带 data:image/…;base64, 前缀)。
- Release()
- 释放引擎占用的内存;之后需要重新 Init。
使用示例
一个最小的可运行流程:进屏幕就初始化引擎,点按钮识别图像组件里的图片,结果写进标签。组件:图像1(图像)、按钮1(按钮)、标签1(标签)、OCR1(本拓展,非可视)。
when Screen1.Initialize {
OCR1.Init();
}
when OCR1.Initialized(success, message) {
if (success) {
标签1.Text = "OCR 就绪,点按钮开始识别";
} else {
标签1.Text = "初始化失败:" + message;
}
}
when 按钮1.Click {
OCR1.RecognizeImageComponent(图像1);
}
when OCR1.GotText(text) {
标签1.Text = text;
}
识别 Base64 图片(比如从摄像头、网络组件拿到的数据):
when OCR1.GotText(text) {
标签1.Text = text;
}
when OCR1.ErrorOccurred(message) {
标签1.Text = "识别失败:" + message;
}
procedure 识别Base64(数据) {
if (OCR1.Ready) {
OCR1.RecognizeBase64(数据);
} else {
标签1.Text = "请先初始化 OCR";
}
}
常见问题
Q:联机调试有什么版本要求?
A:本拓展带原生库,需要使用 2026-07 之后的新版 AI 伴侣;打包 APK 不受影响。
Q:识别准确率不高,怎么调?
A:fast 模型追求速度与体积,准确率略低于标准模型。想换标准模型:从 tessdata 下载对应语言的 .traineddata(约 40MB)加进应用素材,Language 属性保持模型名不变即可(首次 Init 会从素材解出覆盖内置 fast 模型需要自行保证素材名与 Language 一致)。同时尽量提供清晰、端正、对比度高的图片,识别率会有明显提升。
Q:支持英文或其它语言吗?
A:支持。把对应语言的 .traineddata 加进应用素材,Language 设成模型名(如 eng)即可。拓展内置的只有 chi_sim。
Q:能识别手写字吗?
A:Tesseract 对印刷体效果最好,手写体识别率有限,不建议依赖。
扫码添加客服咨询