机器学习套件(ML Kit)组件在在线版和教育版中提供,离线版(含机房版)不包含。
暂未开放:该组件暂未上架组件面板,本页保留供了解(原因与恢复进度见 组件参考)。
它能做什么
目标检测找出图片里有哪些物体,并给出每个物体的位置矩形框。可以只找最显眼的一个,也可以找出多个;可选同时给出粗分类(时尚商品、食物、家居用品、地点、植物 5 大类)。先触发一次汇总事件,再逐个物体触发一次,方便画框。
准备工作
- 多个物体 / 分类:两个开关都打开最全;都关最快。要细分类别请用「自定义目标检测」。
- 画框换算:坐标是原图像素,在画布上画要乘以「画布宽度 ÷ 原图宽度」。
- 联机调试:安卓上用 AI 伴侣调试需要安装 MLKit 版 AI 伴侣(应用宝,包名 cn.fun123.appinventor);普通版伴侣不含识别引擎,调用时会触发「屏幕.出现错误时」(错误码 4722)。直接打包 APK 安装测试不受影响。
- 安装包体积:只有用到本组件的 App 才会打包它的识别引擎与模型,体积以编译结果为准。
- 鸿蒙:完整支持图片检测:调用系统目标检测;类别名为鸿蒙系统的类别(Animal、Plant、Food、Car、Person 等);实时摄像头检测暂不支持,「打开实时摄像头」会触发「检测失败时」。
案例一:检测并统计物体
画布背景设成原图,检测汇总事件里记下换算比例:
global 横向比例 = 1
global 纵向比例 = 1
procedure 检测(路径) {
画布_结果.BackgroundImage = 路径
画布_结果.Clear()
目标检测1.DetectFromFile(路径)
}
when 图像选择器_相册.AfterPicking() { 检测(图像选择器_相册.Selection) }
when 目标检测1.GotObjects(数量, 图片宽度, 图片高度, 结果JSON) {
横向比例 = 画布_结果.Width / 图片宽度
纵向比例 = 画布_结果.Height / 图片高度
标签_状态.Text = join("找到 ", 数量, " 个物体")
}
案例二:逐个物体画框并编号
每个物体触发一次「获得物体」,按比例画出四条边和编号:
when 目标检测1.GotObject(索引, x坐标, y坐标, 宽度, 高度, 标签文字, 置信度, 跟踪编号) {
var 左 = x坐标 * 横向比例
var 上 = y坐标 * 纵向比例
var 右 = (x坐标 + 宽度) * 横向比例
var 下 = (y坐标 + 高度) * 纵向比例
画布_结果.DrawLine(左, 上, 右, 上)
画布_结果.DrawLine(右, 上, 右, 下)
画布_结果.DrawLine(右, 下, 左, 下)
画布_结果.DrawLine(左, 下, 左, 上)
画布_结果.DrawText(join(索引), 左 + 6, 上 + 24)
}
案例三:打开摄像头实时检测,物体带跟踪编号
实时检测用的是视频流模式:更快,而且同一个物体在连续画面里保持同一个「跟踪编号」,适合计数、跟随。画面上直接框出物体并标出类别,不用自己在画布上画;事件里只刷新列表:
when 按钮_实时.Click() {
目标检测1.PreviewContainer = 垂直布局_预览
目标检测1.StartLiveCamera()
}
when 按钮_停止.Click() { 目标检测1.StopLiveCamera() }
when 目标检测1.LiveObjects(数量, 图片宽度, 图片高度, 结果JSON) {
var 名单 = list()
foreach 物体 in Web客户端1.JsonTextDecodeWithDictionaries(结果JSON) {
var 标签表 = dictget(物体, "labels", list())
var 类别 = "(未分类)"
if length(标签表) > 0 {
类别 = dictget(select(标签表, 1), "label", "")
}
listAdd(名单, join("#", dictget(物体, "trackingId", -1), " ", 类别))
}
标签_状态.Text = join("实时:", 数量, " 个物体")
列表显示框_物体.Elements = 名单
}
结果数据说明
「获得物体」的序号从 1 开始;不分类时「标签文字」为空、置信度为 0;单张图片没有跟踪,「跟踪编号」为 -1。「结果JSON」是数组,每项含 bounds(left/top/right/bottom/width/height)、trackingId、labels。
常见问题
| 现象 | 原因与处理 |
|---|---|
| 框画歪了 | 画布宽高比与原图不同会拉伸;横纵分别按比例换算即可对上 |
| 类别不准 | 基础模型只有 5 大类;细分类用「自定义目标检测」 |
| 只找到一个 | 「多个物体」被关掉了 |
| 实时预览黑屏、看不到画面 | 「预览容器」要选布局组件并给明确宽高(如宽度充满、高度 300 像素);第一次打开要允许摄像头权限 |
| 实时检测时界面卡 | 调大「实时事件间隔」,事件里少做事;画面上的标注不受间隔影响 |
完整 .aia 源码与操作指导
导入 ObjectDetectorDemo.aia 后可以直接打包 APK 运行;用 AI 伴侣联机调试请安装 MLKit 版 AI 伴侣。源码文件已通过正式编辑器载入、后台导入和 APK 编译校验;真机识别效果请以实际设备为准。
| 功能 | 操作 | 预期结果 |
|---|---|---|
| 检测照片 | 选一张有几样东西的照片 | 画布上画出编号框,列表列出类别和置信度 |
| 只找一个 | 取消「多个物体」再检测 | 只画出最显眼的一个框 |
| 不分类 | 取消「给出类别」再检测 | 只有位置框,列表显示「未分类」 |
| 实时检测 | 点「实时检测」,对准桌上的东西 | 预览区直接框出物体,列表按跟踪编号实时刷新 |
案例界面与积木源码在仓库 docs/markdown/reference/components/guide/examples/ObjectDetectorDemo/,SHA-256:602d657931ac089cbd3b47cbb60b6690a36b5f4b63cc3497170abb99cb2e2cc4。
扫码添加客服咨询