开发者

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

开发者 https://www.devze.com 2024-08-10 11:19 出处:网络 作者: 青蛙娃娃
目录ML Kit 项目描述开发工具代码设计界面设计物体检测处理标记物体项目演示ML Kit
目录
  • ML Kit
  •  项目描述
  • 开发工具
  • 代码设计
    • 界面设计
    • 物体检测处理
    • 标记物体
  • 项目演示

    ML Kit

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

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

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

     项目描述

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

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

    开发工具

    • Android Studio Koala
    • Kotlin
    • Gradle 8.7

    代码设计

    界面设计

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

    界面上方是一个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, txtOutpu编程客栈t)
                            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 = InputImajsge.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中。

    项目演示

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

    到此这篇关于基于Google ML模型开发Android物体检测应用的文章就介绍python到这了,更多相关Android AI应用python开发:物体检测内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号