机器学习套件(ML Kit)组件在在线版和教育版中提供,离线版(含机房版)不包含。
它能做什么
文字识别把图片里的文字读出来(OCR):支持拉丁字母(英文、法文、西班牙文等)、中文(简繁,也能认夹杂的英文)、日文、韩文和天城文(印地语、马拉地语、尼泊尔语等)五种脚本。识别在手机本地完成,不联网、不上传图片。结果除了全文,还给出「文字块 → 行 → 单词」三级结构和每一级的坐标框,可以用来做文字定位、只取某一块内容、在图上高亮等。
准备工作
- 识别脚本:认中文选
chinese(中英混排也用它),只认英文选latin(默认),日文、韩文、天城文分别选japanese、korean、devanagari。五套模型都随 App 打包,不用联网下载。 - 图片来源:素材文件名、「图像选择器」的选中项、「照相机」拍照返回的路径都可以直接传给「识别图片文件」。
- 实时识别:在设计器里放一个垂直布局当「预览容器」,「打开实时摄像头」后对准文字就能读,不用先拍照。
- 联机调试:安卓上用 AI 伴侣调试需要安装 MLKit 版 AI 伴侣(应用宝,包名 cn.fun123.appinventor);普通版伴侣不含识别引擎,调用时会触发「屏幕.出现错误时」(错误码 4722)。直接打包 APK 安装测试不受影响。
- 安装包体积:只有用到本组件的 App 才会打包它的识别引擎与模型,体积以编译结果为准。
- 鸿蒙:完整支持图片识别:调用系统文字识别,语种由系统决定(中英文为主),「识别脚本」只保存取值、不影响结果;实时摄像头识别暂不支持,「打开实时摄像头」会触发「识别失败」。
案例一:识别示例图、相册图片和拍照
界面放三个入口:识别示例图(工程自带 ocr_sample.png)、图像选择器、拍照按钮。三个入口都调同一个过程「开始识别」,识别前先看「正在识别」属性,避免连续点击时重复调用:
procedure 开始识别(路径) {
图像_预览.Picture = 路径
if 文字识别1.Busy {
标签_状态.Text = "上一张还在识别,请稍等"
} else {
标签_状态.Text = "正在识别…"
文字识别1.RecognizeFromFile(路径)
}
}
when 按钮_示例图.Click() { 开始识别("ocr_sample.png") }
when 图像选择器_相册.AfterPicking() { 开始识别(图像选择器_相册.Selection) }
when 照相机1.AfterPicture(图像位址) { 开始识别(图像位址) }
when 文字识别1.RecognitionSuccess(文本, 结果JSON) {
标签_全文.Text = 文本
}
when 文字识别1.RecognitionFailed(操作, 错误信息) {
标签_错误.Text = join(操作, ":", 错误信息)
}
案例二:切换识别脚本并统计文字块和行数
下拉框选 chinese 或 latin 时同步改「识别脚本」。识别成功后用 Web 组件的「解码 JSON 为字典」解析结果,逐块累加行数,并取出第一块的坐标:
when 下拉框_脚本.AfterSelecting(选择项) {
文字识别1.Script = 选择项
}
when 文字识别1.RecognitionSuccess(文本, 结果JSON) {
var 结果 = Web客户端1.JsonTextDecodeWithDictionaries(结果JSON)
var 文字块 = dictget(结果, "blocks", list())
var 行数 = 0
foreach 块 in 文字块 {
行数 = 行数 + length(dictget(块, "lines", list()))
}
标签_详情.Text = join("共 ", length(文字块), " 个文字块、", 行数, " 行")
}
案例三:对准就读:实时识别文字
实时识别不用先拍照:放一个黑底垂直布局当预览区,「打开实时摄像头」后画面上框出每一行文字;「实时识别到文字」的参数与「识别成功」相同,按「实时事件间隔」(默认 200 毫秒)触发,里面只刷新标签:
when 按钮_实时.Click() {
文字识别1.PreviewContainer = 垂直布局_预览
文字识别1.StartLiveCamera()
}
when 按钮_停止.Click() { 文字识别1.StopLiveCamera() }
when 文字识别1.LiveText(文本, 结果JSON) {
标签_状态.Text = choose(文本 == "", "画面里没有文字", "实时识别中")
标签_全文.Text = 文本
}
结果数据说明
结果JSON 结构:{"text":"全文","blockCount":2,"script":"chinese","blocks":[{"text":"…","bounds":{"left":10,"top":20,"right":300,"bottom":80},"cornerPoints":[…],"lines":[{"text":"…","bounds":{…},"elements":[{"text":"…","bounds":{…}}]}]}]}。坐标是原图像素。图片里没有文字时「文本」为空。
常见问题
| 现象 | 原因与处理 |
|---|---|
| 中文识别出来是乱码或空 | 「识别脚本」还是 latin,中文必须设成 chinese |
| 识别率不高 | 文字高度建议不小于 16 像素;避免大角度倾斜、阴影和反光;手写字请用「手写识别」 |
| AI 伴侣里提示不含识别引擎 | 安装 MLKit 版 AI 伴侣,或打包 APK 测试 |
| 实时预览黑屏、看不到画面 | 「预览容器」要选布局组件并给明确宽高(如宽度充满、高度 300 像素);第一次打开要允许摄像头权限 |
| 实时检测时界面卡 | 调大「实时事件间隔」,事件里少做事;画面上的标注不受间隔影响 |
完整 .aia 源码与操作指导
导入 TextRecognizerDemo.aia 后可以直接打包 APK 运行;用 AI 伴侣联机调试请安装 MLKit 版 AI 伴侣。源码文件已通过正式编辑器载入、后台导入和 APK 编译校验;真机识别效果请以实际设备为准。
| 功能 | 操作 | 预期结果 |
|---|---|---|
| 识别示例图 | 点「识别示例图」 | 识别出工程自带图片里的中英文和电话号码 |
| 从相册选图 / 拍照 | 选一张有文字的图片,或拍一张 | 显示全文,详情区给出文字块数、行数和第一块坐标 |
| 切换识别脚本 | 下拉框改成 latin 后识别中文图 | 中文认不出,再切回 chinese 即可识别 |
| 日文 / 韩文 | 下拉框选 japanese 或 korean,识别对应文字的图片 | 识别出日文假名汉字或韩文 |
| 连续点击 | 识别尚未结束时再点 | 提示上一张还在识别,不会重复调用 |
| 实时识别 | 点「实时识别」,把摄像头对准书本或屏幕上的文字 | 预览区框出每一行文字,全文区实时刷新 |
案例界面与积木源码在仓库 docs/markdown/reference/components/guide/examples/TextRecognizerDemo/,SHA-256:b4651c08ddcce2524c24c056d924259c8f3de648b1bbdb439c10e741972666df。
扫码添加客服咨询