机器学习套件(ML Kit)组件在在线版和教育版中提供,离线版(含机房版)不包含。
它能做什么
手写识别把用户在画布上写的字识别成文字,支持 300 多种语言,也能识别表情涂鸦和基本几何图形。把「书写画布」设成一块画布后,用户照常在画布上画线,笔迹会被自动记录,写完调用「开始识别」即可。
准备工作
- 语言包:每种语言第一次识别时自动下载(需联网,从 Google 服务器下载,国内网络可能失败),下载后离线可用。
- 语言代码:
zh-Hani中文(默认,简繁都认)、en-US英文、ja日文,emoji表情、shapes几何图形。 - 联机调试:安卓上用 AI 伴侣调试需要安装 MLKit 版 AI 伴侣(应用宝,包名 cn.fun123.appinventor);普通版伴侣不含识别引擎,调用时会触发「屏幕.出现错误时」(错误码 4722)。直接打包 APK 安装测试不受影响。
- 安装包体积:只有用到本组件的 App 才会打包它的识别引擎与模型,体积以编译结果为准。
- 鸿蒙:暂不支持:鸿蒙系统没有开放手写文字识别接口,调用会触发「识别失败时」并说明原因。
案例一:写字并识别
初始化时把画布交给手写识别;识别前用「笔画数」判断画布上有没有笔迹:
when Screen1.Initialize() {
手写识别1.DrawingCanvas = 画布_书写
}
when 按钮_识别.Click() {
if 手写识别1.StrokeCount == 0 {
标签_状态.Text = "画布上还没有笔迹,先写几个字"
} else {
手写识别1.Recognize()
}
}
when 按钮_清除.Click() {
手写识别1.Clear()
}
when 手写识别1.GotText(文本, 候选JSON) {
标签_结果.Text = 文本
}
案例二:候选结果与语言包管理
把候选 JSON 解析成列表,点选即可替换结果;「检查模型」异步返回当前语言包是否已下载:
when 手写识别1.GotText(文本, 候选JSON) {
var 候选 = list()
foreach 项 in Web客户端1.JsonTextDecodeWithDictionaries(候选JSON) {
listAdd(候选, dictget(项, "text", ""))
}
列表显示框_候选.Elements = 候选
}
when 列表显示框_候选.AfterPicking() {
标签_结果.Text = 列表显示框_候选.Selection
}
when 按钮_模型.Click() {
手写识别1.CheckModel()
}
when 手写识别1.GotModelState(已下载) {
标签_详情.Text = choose(已下载, "语言包已下载", "语言包还没下载")
}
结果数据说明
「候选JSON」是数组,每项含 text、score,按可能性从高到低排列,个数受「最多结果数」控制。「清除」同时清空已采集的笔迹和画布画面。
常见问题
| 现象 | 原因与处理 |
|---|---|
| 识别失败提示下载语言包 | 首次识别要联网下载;网络不通时换网络或提前用「下载模型」 |
| 识别结果总是空 | 没设「书写画布」,或写字时画布被其它组件挡住 |
| 切换语言后结果怪 | 切换语言后清除画布重写 |
完整 .aia 源码与操作指导
导入 HandwritingRecognizerDemo.aia 后可以直接打包 APK 运行;用 AI 伴侣联机调试请安装 MLKit 版 AI 伴侣。源码文件已通过正式编辑器载入、后台导入和 APK 编译校验;真机识别效果请以实际设备为准。
| 功能 | 操作 | 预期结果 |
|---|---|---|
| 写字识别 | 在白色画布上写「你好」,点「识别」 | 结果区显示识别文字,候选列表列出多个结果 |
| 选择候选 | 点候选列表中的一项 | 结果替换为所选文字 |
| 切换语言 | 下拉框选 en-US 后写英文 | 识别英文;首次会先下载英文语言包 |
| 检查语言包 | 点「检查语言包」 | 显示当前语言包是否已下载 |
| 清除 | 点「清除」 | 画布与笔迹都被清空 |
案例界面与积木源码在仓库 docs/markdown/reference/components/guide/examples/HandwritingRecognizerDemo/,SHA-256:0aaa94a154ed3e3415260c79f5f106d6ec26cf9baa2273b5c2a609062ddea153。
扫码添加客服咨询