基于Google ML模型开发Android物体检测应用

 更新时间:2024年07月27日 15:12:17   作者:青蛙娃娃  
ML Kit是Google提供的机器学习SDK,包含了一系列预训练模型,可以在Android和iOS应用中快速添加机器学习功能,本项目基于Google ML模型开发Android物体检测应用,首先对图像中的物体进行分类检测,获取分类物体的位置区域,然后结合图像标记,逐个获取单个物体的标签

ML Kit

ML Kit是Google提供的机器学习SDK,包含了一系列预训练模型,可以在Android和iOS应用中快速添加机器学习功能。ML Kit工具包将谷歌在机器学习方面的专业知识带给了普通的移动应用开发者,可以借助ML Kit在几行代码中实现所需的功能。

ML Kit的功能非常全面且易于使用,提供了基于API的现有解决方案,如文字识别、条码识别、图像标签、人脸检测、对象检测等。同时,还提供了便利的API,允许在移动应用中使用自定义的TensorFlow Lite模型。

ML Kit针对移动设备进行了优化,使得机器学习套件的处理过程可以在设备上进行,保证了快速性,并解锁了处理相机输入等实时用例的能力。即使在离线状态下,也可以使用这项功能来处理需要保留在设备上的图片和文本。

 项目描述

ML Kit的默认模型在物体检测方面表现非常出色。当你将图像传递给物体检测器时,它会返回一个物体列表,其中包含边界框,这些边界框可用于确定图像中物体可能的位置。

本项目首先对图像中的物体进行分类检测,获取分类物体的位置区域,然后结合图像标记,逐个获取单个物体的标签。

开发工具

  • Android Studio Koala
  • Kotlin
  • Gradle 8.7

代码设计

界面设计

界面上方是一个ImageView,用于呈现示例图片;用户点击中间按钮,调用物体检测处理代码;待处理完毕,将结果展示在下方的 TextView 中。

物体检测处理

ML Kit物体检测器提供多种物体检测方法,这些方法由ObjectDetectorOptions对象控制。该检测器是一个强大的API,不仅可以检测物体,还能在视频流中跟踪它们,实现逐帧跟踪功能。

创建物体检测器,将Bitmap转换为InputImage,并使用物体检测器进行处理。 这将在成功时返回检测到的物体列表,或在失败时返回异常物体。

val objectDetector = ObjectDetection.getClient(options)
            var image = InputImage.fromBitmap(bitmap!!, 0)
            txtOutput.text = ""
            objectDetector.process(image)
                    .addOnSuccessListener { detectedObjects ->
                        // 任务执行成功
                        getLabels(bitmap, detectedObjects, txtOutput)
                        bitmap?.apply{
                            img.setImageBitmap(drawWithRectangle(detectedObjects))
                        }

                    }
                    .addOnFailureListener { e ->
                        // 任务执行失败
                        Log.e("MainActivity", e.toString())
                    }

用户点击按钮后,调用物体检测器以获取图像中物体的边界框。然后,使用这些边界框裁剪图像,得到定义的子图像,并将其传递给图像标记器。

标记物体

使用已有的边界框创建新的临时图像(croppedBitmap),将其传递给图像标记器,并返回结果。重复此操作以处理每个边界框(即每个物体),以获取每个检测到物体的详细标签!

val labeler =
        ImageLabeling.getClient(ImageLabelerOptions.DEFAULT_OPTIONS)
    for(obj in objects) {
        val bounds = obj.boundingBox
        val croppedBitmap = Bitmap.createBitmap(
            bitmap,
            bounds.left,
            bounds.top,
            bounds.width(),
            bounds.height()
        )
        var image = InputImage.fromBitmap(croppedBitmap!!, 0)
        labeler.process(image)
            .addOnSuccessListener { labels ->
                // 任务执行成功
                var labelText = ""
                if(labels.isNotEmpty()) {
                    labelText = txtOutput.text.toString()
                    for (thisLabel in labels){
                        labelText += thisLabel.text + " , "
                    }
                    labelText += "\n"
                } else {
                    labelText = "Not found." + "\n"
                }
                txtOutput.text = labelText.toString()
            }
    }

该代码遍历每个检测到的物体,使用边界框创建名为croppedBitmap的新位图。接下来,它使用一个设置了默认选项的图像标记器(称为labeler)处理新图像。处理成功后,从标签中获取多个结果,并将这些标签写入逗号分隔的字符串,最终呈现在TextView中。

项目演示

Android AI应用开发:物体检测_ML_02

到此这篇关于基于Google ML模型开发Android物体检测应用的文章就介绍到这了,更多相关Android AI应用开发:物体检测内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android仿优酷圆形菜单学习笔记分享

    Android仿优酷圆形菜单学习笔记分享

    这篇文章主要为大家分享了Android仿优酷圆形菜单学习笔记,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-05-05
  • Android利用SurfaceView实现简单计时器

    Android利用SurfaceView实现简单计时器

    这篇文章主要为大家详细介绍了Android利用SurfaceView实现一个简单计时器,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android文字匹配度算法及实际应用示例

    Android文字匹配度算法及实际应用示例

    本文介绍了Android应用中常用的文字匹配度算法Levenshtein Distance,并给出了实际应用示例,通过合理选择和应用文字匹配度算法,可以实现多种功能,提升用户体验,增强应用的实用性,需要的朋友可以参考下
    2024-05-05
  • Android实现左滑删除控件

    Android实现左滑删除控件

    这篇文章主要为大家详细介绍了Android实现左滑删除控件,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-09-09
  • Android 谷歌推荐的VR实现方式(分享)

    Android 谷歌推荐的VR实现方式(分享)

    下面小编就为大家分享一篇Android 谷歌推荐的VR实现方式。具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-01-01
  • Android Drawerlayout侧拉栏事件传递问题的解决方法

    Android Drawerlayout侧拉栏事件传递问题的解决方法

    这篇文章主要为大家详细介绍了Android Drawerlayout侧拉栏事件传递问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Android SQLite数据库加密的操作方法

    Android SQLite数据库加密的操作方法

    因为Android自带的SQLite数据库本身是没有实现加密的,那我们如何实现对数据库的加密呢?今天通过本文给大家介绍下Android SQLite数据库加密的操作方法,一起看看吧
    2021-09-09
  • Kotlin 挂起函数CPS转换原理解析

    Kotlin 挂起函数CPS转换原理解析

    这篇文章主要为大家介绍了Kotlin 挂起函数CPS转换原理解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • Android仿微信多人音视频通话界面

    Android仿微信多人音视频通话界面

    这篇文章主要为大家详细介绍了Android仿微信多人音视频通话界面,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-07-07
  • Android Lock锁实现原理详细分析

    Android Lock锁实现原理详细分析

    这篇文章主要介绍了Android Lock锁实现原理,Lock接口的实现类提供了比使用synchronized关键字更加灵活和广泛的锁定对象操作,而且是以面向对象的方式进行对象加锁
    2023-02-02

最新评论