自定义图像分类(CustomImageLabeler)使用指导:用自己的 TFLite 模型分类

« 返回

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

暂未开放:该组件暂未上架组件面板,本页保留供了解(原因与恢复进度见 组件参考)。

它能做什么

自定义图像分类用你自己训练的 TFLite 模型识别图片,可以认具体品类(花的品种、菜名、零件型号……),突破通用模型只有 400 个类别的限制。案例工程自带 Google ML Kit 官方示例里的鸟类分类模型 bird_classifier.tflite(Apache-2.0 许可),能识别数百种鸟。

准备工作

  • 模型文件:先把 .tflite 上传为素材,「模型文件」填素材文件名;也可以填设备上的绝对路径。
  • 模型要求:TFLite 图像分类模型。带元数据的模型自带类别名;不带元数据的模型(如 Teachable Machine 导出的)要另外设「标签文件」,否则结果只有编号、类别名为空。
  • 用 Teachable Machine 训练自己的模型:在 teachablemachine.withgoogle.com 新建「图片项目」→ 每个类别拍几十张样本 → 训练 →「导出模型」选「TensorFlow Lite」→「浮点」→ 下载得到 model_unquant.tflite 和 labels.txt。两个文件都上传为素材,「模型文件」填 model_unquant.tflite,「标签文件」填 labels.txt(行首的「0 」「1 」序号会自动去掉),就能离线识别。
  • Teachable Machine 打不开怎么办:这个网站国内需要访问国外网络。只想让 App 认出几类自己的东西,可以改用即教即识:在手机上对着摄像头拍样本直接教,不需要电脑和外网,教好的结果还能保存。几种方案的区别看图像分类方案对比。
  • 实时识别:在设计器里放一个垂直布局当「预览容器」,「打开实时摄像头」后左上角显示最可能的类别。
  • 联机调试:安卓上用 AI 伴侣调试需要安装 MLKit 版 AI 伴侣(应用宝,包名 cn.fun123.appinventor);普通版伴侣不含识别引擎,调用时会触发「屏幕.出现错误时」(错误码 4722)。直接打包 APK 安装测试不受影响。
  • 安装包体积:只有用到本组件的 App 才会打包它的识别引擎与模型,体积以编译结果为准。
  • 鸿蒙:暂不支持:鸿蒙需要 MindSpore 格式的模型,暂不支持 TFLite 模型(含 Teachable Machine 导出的模型),调用会触发「标注失败」。

案例一:用自带模型认鸟

设计器里已把「模型文件」设成 bird_classifier.tflite;选图或拍照即可识别:

procedure 识别(路径) {
  图像_预览.Picture = 路径
  自定义图像分类1.LabelFromFile(路径)
}
when 图像选择器_相册.AfterPicking() { 识别(图像选择器_相册.Selection) }
when 照相机1.AfterPicture(图像位址) { 识别(图像位址) }
when 自定义图像分类1.GotLabels(最佳标签, 最佳置信度, 标签列表, 结果JSON) {
  标签_结果.Text = join("最可能:", 最佳标签, "(", round(最佳置信度 * 100), "%)")
  列表显示框_结果.Elements = 标签列表
}

案例二:换成自己的模型

模型文件可以随时改,改完下次识别时生效;没有高于阈值的结果会触发「未识别出标签」:

when Screen1.Initialize() {
  自定义图像分类1.ModelFile = "bird_classifier.tflite"
  自定义图像分类1.ConfidenceThreshold = 0.3
  自定义图像分类1.MaxResultCount = 5
}
when 自定义图像分类1.NoLabelFound(操作) {
  标签_状态.Text = "没有高于阈值的结果"
}
when 自定义图像分类1.LabelFailed(操作, 错误信息) {
  标签_错误.Text = join(操作, ":", 错误信息)
}

案例三:实时识别:用自己的模型认东西

自己训练的模型(包括 Teachable Machine 导出的)同样可以实时识别:「打开实时摄像头」后左上角显示最可能的类别;「实时获得标签」的参数与「获得标签」相同,类别名来自「标签文件」或模型元数据:

when 按钮_实时.Click() {
  自定义图像分类1.PreviewContainer = 垂直布局_预览
  自定义图像分类1.StartLiveCamera()
}
when 按钮_停止.Click() { 自定义图像分类1.StopLiveCamera() }
when 自定义图像分类1.LiveLabels(最佳标签, 最佳置信度, 标签列表, 结果JSON) {
  标签_状态.Text = choose(最佳标签 == "", "没认出来", join("实时:", 最佳标签, "  ", round(最佳置信度 * 100), "%"))
  列表显示框_结果.Elements = 标签列表
}

结果数据说明

「标签列表」按置信度从高到低;「结果JSON」每项含 label、confidence、index。标签文字来自模型元数据,中文模型直接就是中文。

常见问题

现象 原因与处理
提示没设模型文件 「模型文件」为空或素材没上传
类别名为空、只有编号 模型没有元数据(Teachable Machine 导出的就没有),设「标签文件」为配套的 labels.txt
类别名对不上 标签文件与模型不配套,或行的顺序被改过;用和模型一起导出的 labels.txt
认不出 示例模型只认鸟,换一张鸟的照片
实时预览黑屏、看不到画面 「预览容器」要选布局组件并给明确宽高(如宽度充满、高度 300 像素);第一次打开要允许摄像头权限
实时检测时界面卡 调大「实时事件间隔」,事件里少做事;画面上的标注不受间隔影响

完整 .aia 源码与操作指导

下载 .aia 源码

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

功能 操作 预期结果
识别鸟 选一张鸟的照片 显示最可能的鸟名与置信度,列表列出前 5 个候选
非鸟照片 选一张风景照 提示没有高于阈值的结果或给出低置信度的鸟名
拍照 对着鸟的图片拍照 同上
实时识别 点「实时识别」,把摄像头对准屏幕上的鸟图 预览区左上角显示鸟名和置信度,候选列表实时刷新

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

文档反馈