【问题标题】:Can we use android ML Kit Image Labeling to detect a product我们可以使用 android ML Kit Image Labeling 来检测产品吗
【发布时间】:2021-04-02 10:51:21
【问题描述】:

我有客户的要求,我们需要在 cameraView 中检测我们的产品框。为此,我正在尝试使用 firebase ML Kit 对象检测。现在它可以检测门、沙发等一般物体。我希望能够检测到我的产品。有没有办法做到这一点?下面是我目前的实现

class DetectActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    setContentView(R.layout.activity_detect)
    cameraView.setLifecycleOwner(this)
    cameraView.addFrameProcessor {
        extractDataFromFrame(it) { result ->
            tvDetectedItem.text = result
        }
    }
}

private fun extractDataFromFrame(frame: Frame, callback: (String) -> Unit) {

    val options = FirebaseVisionObjectDetectorOptions.Builder()
            .setDetectorMode(FirebaseVisionObjectDetectorOptions.STREAM_MODE)
            .enableMultipleObjects()
            .enableClassification()  // Optional
            .build()

    val objectDetector = FirebaseVision.getInstance().getOnDeviceObjectDetector(options)

    objectDetector.processImage(getVisionImageFromFrame(frame))
            .addOnSuccessListener {
                var result = ""
                it.forEach { item ->
                    result += "${item.entityId}\n"  //TODO : Get the knowledge graph result for this entity
                    Log.e("TAG",item.classificationCategory.toString())
                }
                callback(result)
            }
            .addOnFailureListener {
                callback("Unable to detect an object")
            }
            .addOnCompleteListener {

            }

}

private fun getVisionImageFromFrame(frame : Frame) : FirebaseVisionImage{
    //ByteArray for the captured frame
    val data = frame.data

    //Metadata that gives more information on the image that is to be converted to FirebaseVisionImage
    val imageMetaData = FirebaseVisionImageMetadata.Builder()
            .setFormat(FirebaseVisionImageMetadata.IMAGE_FORMAT_NV21)
            .setRotation(FirebaseVisionImageMetadata.ROTATION_90)
            .setHeight(frame.size.height)
            .setWidth(frame.size.width)
            .build()

    val image = FirebaseVisionImage.fromByteArray(data, imageMetaData)

    return image
}

}

我还希望它完全脱机。为此,有设备 ML 套件实现。但是我该如何使用它呢?对不起我的英语不好。

【问题讨论】:

    标签: android google-mlkit firebase-machine-learning


    【解决方案1】:

    首先,firebase ML Kit 对象检测已弃用且不再受支持。请迁移到独立的 ML 套件(请参阅 migration guide)。其次,为了您的目的,您可以使用自定义模型查看 ML Kit 的对象检测和跟踪 (developer guide)。为了为您的产品训练您自己的图像分类模型,ML Kit 的custom models developer guide 讨论了几种方法。祝你好运!

    【讨论】:

      【解决方案2】:

      我们对 Firebase ML Kit 进行了一些更改,以更好地区分设备端 API 和基于云的 API。 “ML Kit”(没有 firebase 品牌)包含所有设备上的 API。 Here's 从 firebase mlkit 到 mlkit 的迁移指南。所有进一步的改进和新的 API 都将仅与新的 ML Kit 一起发布。

      物体检测sdk使用的默认模型非常简单。您现在可以使用独立的 ML Kit 向对象检测 API apply a custom model。 tfhub 中有一些free powerful model compatible by MLKit API there。我发现this one 非常强大,您可以尝试一下。

      【讨论】:

      猜你喜欢
      • 2020-03-08
      • 2020-12-26
      • 2019-10-12
      • 2020-11-25
      • 1970-01-01
      • 2019-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多