首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android ML Kit无法标记图像

Android ML Kit无法标记图像
EN

Stack Overflow用户
提问于 2020-07-20 12:28:06
回答 1查看 406关注 0票数 0

因此,我有一个Android应用程序,用户可以使用相机应用程序拍摄一只鸟的照片,它会对鸟进行分类。我遵循了label images with a custom model for Android的文档,但它不起作用。我的onActivityResult中有这段代码

代码语言:javascript
复制
val source = ImageDecoder.createSource(this.contentResolver, Uri.fromFile(photoFile))
val birdBitmap= ImageDecoder.decodeBitmap(source)

val image = InputImage.fromBitmap(birdBitmap, 0)
val localModel = LocalModel.Builder().setAssetFilePath("model.tflite").build()
val customImageLabelerOptions = CustomImageLabelerOptions.Builder(localModel)
    .setConfidenceThreshold(0.5f)
    .setMaxResultCount(5)
    .build()
val imageLabeler =
    ImageLabeling.getClient(customImageLabelerOptions)
imageLabeler.process(image)
    .addOnSuccessListener { labels ->
        var highConf = -1.0f
        var highText = ""
        for (label in labels) {
            val text = label.text
            val confidence = label.confidence
            val index = label.index

            if(confidence > highConf) {
                highConf = confidence
                highText = text
            }
        }
        Log.d("PREDICTION", "$highText, $highConf")
    }
    .addOnFailureListener { e ->
        Log.d("FAIL", "$e")
    }

当用户拍照时,addOnFailureListener被调用,这是我得到的错误:

代码语言:javascript
复制
com.google.mlkit.common.MlKitException: Internal error has occurred when executing ML Kit tasks
at com.google.mlkit.common.sdkinternal.ModelResource.zza(com.google.mlkit:common@@16.0.0:28)
at com.google.mlkit.common.sdkinternal.zzn.call(Unknown Source:6)
at com.google.mlkit.common.sdkinternal.zzm.run(com.google.mlkit:common@@16.0.0:5)
at com.google.mlkit.common.sdkinternal.zzq.run(com.google.mlkit:common@@16.0.0:3)
at com.google.mlkit.common.sdkinternal.MlKitThreadPool.zzd(com.google.mlkit:common@@16.0.0:24)
at com.google.mlkit.common.sdkinternal.MlKitThreadPool.zza(com.google.mlkit:common@@16.0.0:30)
at com.google.mlkit.common.sdkinternal.zzj.run(Unknown Source:2)
At java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:764)
Caused by: java.lang.IllegalArgumentException: Unsupported bitmap config HARDWARE
at com.google.android.libraries.vision.visionkit.pipeline.zzbb.zza(com.google.mlkit:vision-internal-vkp@@17.0.0:56)
at com.google.mlkit.vision.vkp.PipelineManager.process(com.google.mlkit:vision-internal-vkp@@17.0.0:150)
at com.google.mlkit.vision.label.custom.internal.zzd.zza(com.google.mlkit:image-labeling-custom@@16.1.0:19)
at com.google.mlkit.vision.label.custom.internal.zzd.run(com.google.mlkit:image-labeling-custom@@16.1.0:112)
at com.google.mlkit.vision.common.internal.MobileVisionBase.zza(com.google.mlkit:vision-common@@16.0.0:23)
at com.google.mlkit.vision.common.internal.zzb.call(Unknown Source:4)
at com.google.mlkit.common.sdkinternal.ModelResource.zza(com.google.mlkit:common@@16.0.0:26)

有人能告诉我怎么解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-22 03:55:59

看一下堆栈跟踪,似乎输入位图是直接从相机获取的,它驻留在内存(Bitmap.Config.HARDWARE)中。ML套件仅支持ARGB_8888格式的位图,请尝试:

代码语言:javascript
复制
val newBitmap = myBitmap.copy(Bitmap.Config.ARGB_8888, myBitmap.isMutable())

当我们开发它时,我们考虑的是保存在设备上的文件,并将其作为ARGB_8888加载,而不是从设备摄像头加载。我会提交一个增强请求,看看我们是否可以覆盖这个用例。感谢您的关注!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62988684

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档