Android 机器学习组件-图像标签初探

前言

学习和了解使用 Android 官方提供的机器学习相关组件,给图片打标签,进行图片内容的识别。

以机器学习或者说深度学习为理念,通过神经网络训练的模型,可以变得像人一样具有智慧。可以用于处理各种学习任务,如语音识别、图像识别、自然语言处理等。Android 官方提供了很多机器学习的组件可以使用,比如文字识别、人脸检测、姿势检测、图像标签、对象检测和跟踪等功能的组件。下面通过图片标签这个组件了解一下使用官方提供的机器学习组件可以做什么。

图像标签

图像标签说白了就是检测和提取图片中各种类别的实体的相关信息。默认的图片标签模型可以识别一般对象、地点、活动、动物物种、商品等。

读取图像标签

使用基础模型

Android 官方提供的 com.google.mlkit:image-labeling 组件可以读取图像标签。

  • 官方提供的机器学习组件,可以和模型绑定使用,需要把模型打包到 apk 中,也可以和 Google Play 服务绑定使用,模型首次使用时会自动下载;相对来说比较灵活和方便。
  • image-labeling 组件可以通过相机、图片文件 URL、图片内存信息的方式读取图片信息。

com.google.mlkit:image-labeling 的组件集成比较简单,可以直接参考 图片标签 文档。

下面通过核心代码了解一下 image-labeling 组件的实际效果。

kotlin 复制代码
    fun getLabel(context: Context, uri: Uri) {
        val labeler = ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
        val image: InputImage
        try {
            image = InputImage.fromFilePath(context, uri)
            labeler?.process(image)?.addOnSuccessListener { labels ->
                for (label in labels) {
                    val text = label.text
                    val confidence = label.confidence
                    val index = label.index
                    Log.i(TAG, "text=$text,confidence=$confidence,index=$index ,uri=$uri")
                }

            }?.addOnFailureListener { e ->
               
                Log.e(TAG, e.stackTraceToString())
            }

        } catch (e: Exception) {
            e.printStackTrace()
        }
    }

我们通过图片 URI 创建 InputImage 对象,通过调用 ImageLabeling 的 process 方法异步获取图片标签信息。比如以下面这张元宵节灯笼的图片为例

可以看一下输出

shell 复制代码
11:31:12.839 ImageLabelHelper         I  text=Crowd     ,confidence=0.968574  ,index=218 ,uri=content://media/external/images/media/101508
11:31:12.839 ImageLabelHelper         I  text=Product   ,confidence=0.943360  ,index=78  ,uri=content://media/external/images/media/101508
11:31:12.840 ImageLabelHelper         I  text=Stadium   ,confidence=0.893257  ,index=43  ,uri=content://media/external/images/media/101508
11:31:12.840 ImageLabelHelper         I  text=Event     ,confidence=0.803580  ,index=319 ,uri=content://media/external/images/media/101508
11:31:12.840 ImageLabelHelper         I  text=Fun       ,confidence=0.631223  ,index=386 ,uri=content://media/external/images/media/101508
11:31:12.841 ImageLabelHelper         I  text=Leisure   ,confidence=0.612061  ,index=239 ,uri=content://media/external/images/media/101508
11:31:12.841 ImageLabelHelper         I  text=Race      ,confidence=0.511048  ,index=285 ,uri=content://media/external/images/media/101508

可以看到针对这张图片,image-labeling 组件推理出了 Crowd,Product,Stadium,Event,Fun,Leisure,Race 这几个标签。

我们再看一张图片

shell 复制代码
11:32:42.062 ImageLabelHelper         I  text=Event     ,confidence=0.742820  ,index=319 ,uri=content://media/external/images/media/101507
11:32:42.063 ImageLabelHelper         I  text=Team      ,confidence=0.716490  ,index=0   ,uri=content://media/external/images/media/101507
11:32:42.063 ImageLabelHelper         I  text=Leisure   ,confidence=0.674395  ,index=239 ,uri=content://media/external/images/media/101507
11:32:42.064 ImageLabelHelper         I  text=Fun       ,confidence=0.612567  ,index=386 ,uri=content://media/external/images/media/101507
11:32:42.064 ImageLabelHelper         I  text=Sports    ,confidence=0.538094  ,index=292 ,uri=content://media/external/images/media/101507

image-labeling 组件从这张图片推理出了 Event,Team,Leisure,Fun,Sports 这几个标签。

最后再看一张日常拍摄的照片

shell 复制代码
11:36:01.222 ImageLabelHelper         I  text=Infrastructure,confidence=0.919282  ,index=31  ,uri=content://media/external/images/media/3719
11:36:01.222 ImageLabelHelper         I  text=Vehicle   ,confidence=0.904313  ,index=316 ,uri=content://media/external/images/media/3719
11:36:01.223 ImageLabelHelper         I  text=Road      ,confidence=0.841021  ,index=287 ,uri=content://media/external/images/media/3719
11:36:01.223 ImageLabelHelper         I  text=Asphalt   ,confidence=0.781312  ,index=411 ,uri=content://media/external/images/media/3719
11:36:01.224 ImageLabelHelper         I  text=Car       ,confidence=0.762895  ,index=423 ,uri=content://media/external/images/media/3719
11:36:01.224 ImageLabelHelper         I  text=Plant     ,confidence=0.711713  ,index=266 ,uri=content://media/external/images/media/3719
11:36:01.224 ImageLabelHelper         I  text=Building  ,confidence=0.646049  ,index=366 ,uri=content://media/external/images/media/3719
11:36:01.225 ImageLabelHelper         I  text=Wheel     ,confidence=0.598548  ,index=322 ,uri=content://media/external/images/media/3719
11:36:01.225 ImageLabelHelper         I  text=Van       ,confidence=0.551206  ,index=404 ,uri=content://media/external/images/media/3719

这张图片输出的标签还挺多。

日志中输出的信息还是很好理解的,

  • text 就是图片中包含标签的文本描述,从这里的英文表述可以看到识别还是很准确的。
  • confidence 从 image-labeling 组件的角度出发就是对这个描述的信心,对使用者来说就是可信度,概率值,可以看到标签是按可信度的降序排列。如果你自己曾经做过模型训练的话,应该对 confidence 这个词不陌生。
  • index 这个 index 可以理解为标签索引,现实生活中同一个具体的物品在不同环境会有不同的表达,模型不可能基于不同的语言输出不同的文本描述,而是选择了输出标签索引,基于这个索引,我们可以去映射具体的含义。

标签映射

图片标签 API 提供的默认模型支持 400 多个不同的标签,比如对于上面出现的标签索引

标签索引 标签内容
0 团队
43 体育馆
239 休闲
287 道路
404 厢式车

通过这个标签索引,我们就可以获取图片中的标签信息了。

完整的标签索引列表可以参考官方提供的 标签索引

上述相关完整代码可以参考 Matisse

小结

Android 官方提供的机器学习组件,主要是视觉和自然语言两大类。视觉相关的组件除了图片标签还有文字识别、人脸检测、姿势检测。自然语言相关的组件包括语言识别、翻译、智能回复等组件。通过这些组件可以在移动设备(除了 Android、iOS 也有相应的版本)基于这些能力做一些相关的事情。

参考文档

相关推荐
久违 °4 小时前
【AI-Agent】TagMatrix 数据标注工具开发
人工智能·数据分析·go·agent·数据隐私
NiceCloud喜云4 小时前
Opus 4.8 的 Effort Control 怎么选:Low 到 Max 五档策略
android·java·大数据·前端·c++·python·spring
AI360labs_atyun4 小时前
腾讯推出电子牛马Marvis,好用吗?
人工智能·科技·ai
Dfreedom.4 小时前
Windows、虚拟机、开发板组网通信原理及调试通联步骤
人工智能·windows·部署·边缘计算·开发板·模型加速
3DVisionary4 小时前
蓝光三维扫描:医疗制造的精度焦虑怎么解
人工智能·算法·制造·蓝光三维扫描·医疗制造·三维检测·义齿检测
Are_You_Okkk_4 小时前
基于MonkeyCode解析AI研发新模式,根治开发低效痛点
大数据·人工智能·开源·ai编程
好评笔记4 小时前
机器学习面试八股——常用损失函数
人工智能·深度学习·算法·机器学习·校招
weixin_468466854 小时前
全局与局部注意力机制新手实战指南
人工智能·python·深度学习·算法·自然语言处理·transformer·注意力机制
weixin_468466855 小时前
工业相机成像原理新手入门指南
人工智能·自动化·机器视觉·工业相机·光学·光学系统·成像原理
回眸&啤酒鸭5 小时前
【回眸】CSDN新增功能测评——AI数字营销之内容创作
人工智能