图像标注(ImageLabeler)使用指导:拍照识物

« 返回

机器学习套件(ML Kit)组件在在线版和教育版中提供,离线版(含机房版)不包含。

它能做什么

图像标注识别一张照片里有什么:花、食物、天空、建筑、猫、狗等 400 多种通用类别,每个标签带置信度,并同时给出英文原名和中文名。常用于「拍照识物」。

准备工作

  • 置信度阈值:默认 0.5,低于阈值的标签不返回;调低能看到更多但更不确定的结果。
  • 实时识别:在设计器里放一个垂直布局当「预览容器」,「打开实时摄像头」后对准东西就显示它是什么。
  • 联机调试:安卓上用 AI 伴侣调试需要安装 MLKit 版 AI 伴侣(应用宝,包名 cn.fun123.appinventor);普通版伴侣不含识别引擎,调用时会触发「屏幕.出现错误时」(错误码 4722)。直接打包 APK 安装测试不受影响。
  • 安装包体积:只有用到本组件的 App 才会打包它的识别引擎与模型,体积以编译结果为准。
  • 鸿蒙:暂不支持:鸿蒙系统没有开放通用图像分类接口,图片识别与实时摄像头都会触发「标注失败」。

案例一:拍照识物

「获得标签」事件直接给出最可能的标签(英文和中文):

procedure 标注(路径) {
  图像_预览.Picture = 路径
  图像标注1.LabelFromFile(路径)
}
when 图像选择器_相册.AfterPicking() { 标注(图像选择器_相册.Selection) }
when 照相机1.AfterPicture(图像位址) { 标注(图像位址) }
when 图像标注1.GotLabels(最佳标签, 最佳中文名, 标签列表, 中文名列表, 结果JSON) {
  标签_结果.Text = join("最可能是:", 最佳中文名, "(", 最佳标签, ")")
}
when 图像标注1.NoLabelFound(操作) {
  标签_状态.Text = "没有高于阈值的标签,调低阈值再试"
}

案例二:调节阈值并列出全部标签

滑块改「置信度阈值」,结果 JSON 逐项列出中文名和百分比:

when 滑动条_阈值.PositionChanged(滑块位置) {
  图像标注1.ConfidenceThreshold = round(滑块位置 * 10) / 10
}
when 图像标注1.GotLabels(最佳标签, 最佳中文名, 标签列表, 中文名列表, 结果JSON) {
  var 行 = list()
  foreach 项 in Web客户端1.JsonTextDecodeWithDictionaries(结果JSON) {
    listAdd(行, join(dictget(项, "name", ""), "  ", round(dictget(项, "confidence", 0) * 100), "%"))
  }
  列表显示框_标签.Elements = 行
}

案例三:对准就认:实时识别画面里的东西

「打开实时摄像头」后预览区左上角直接显示最可能的中文名和置信度;「实时获得标签」的参数与「获得标签」相同,没认出东西时最佳标签为空、列表为空:

when 按钮_实时.Click() {
  图像标注1.PreviewContainer = 垂直布局_预览
  图像标注1.StartLiveCamera()
}
when 按钮_停止.Click() { 图像标注1.StopLiveCamera() }
when 图像标注1.LiveLabels(最佳标签, 最佳中文名, 标签列表, 中文名列表, 结果JSON) {
  标签_状态.Text = choose(最佳中文名 == "", "没认出来", join("实时:", 最佳中文名))
  列表显示框_标签.Elements = 中文名列表
}

结果数据说明

「标签列表」「中文名列表」按置信度从高到低排列;「结果JSON」每项含 label、name、confidence、index。「标签中文名」方法可以把英文标签转成中文。

常见问题

现象 原因与处理
只返回很泛的标签 基础模型只有通用类别;要认具体品种请用「自定义图像分类」
什么都没识别出 阈值太高,调低滑块
实时预览黑屏、看不到画面 「预览容器」要选布局组件并给明确宽高(如宽度充满、高度 300 像素);第一次打开要允许摄像头权限
实时检测时界面卡 调大「实时事件间隔」,事件里少做事;画面上的标注不受间隔影响

完整 .aia 源码与操作指导

下载 .aia 源码

导入 ImageLabelerDemo.aia 后可以直接打包 APK 运行;用 AI 伴侣联机调试请安装 MLKit 版 AI 伴侣。源码文件已通过正式编辑器载入、后台导入和 APK 编译校验;真机识别效果请以实际设备为准。

功能 操作 预期结果
识别照片 选一张食物或宠物照片 显示最可能的标签和全部候选
调低阈值 把滑块拖到 0.2 再识别 候选标签变多
无结果 阈值拖到 0.9 识别普通照片 提示没有高于阈值的标签
实时识别 点「实时识别」,把摄像头对准杯子、键盘、宠物等 预览区左上角显示中文名和置信度,候选列表实时刷新

案例界面与积木源码在仓库 docs/markdown/reference/components/guide/examples/ImageLabelerDemo/,SHA-256:3d218ba0a4814b023a0399430e6b1862abd28df0c188e2a6c4813468e26fc0f9。

文档反馈