Android ML Kit无法标记图像

我有一个Android应用程序,用户可以使用相机拍摄鸟类的照片,然后对鸟类进行分类。我按照为Android使用自定义模型标记图像的文档进行了操作,但它不起作用。我在onActivityResult中有以下代码:

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,我得到的错误是:

com.google.mlkit.common.MlKitException: Internal error has occurred when executing ML Kit tasksat 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 HARDWAREat 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)

谁能告诉我如何解决这个问题?


回答:

查看堆栈跟踪,似乎输入的Bitmap直接来自相机,并且存储在内存中(Bitmap.Config.HARDWARE)。ML Kit仅支持ARGB_8888格式的位图,请尝试以下方法:

val newBitmap = myBitmap.copy(Bitmap.Config.ARGB_8888, myBitmap.isMutable())

在开发这个功能时,我们考虑的是从设备上加载保存为ARGB_8888格式的文件,而不是直接从设备相机获取。我将提交一个增强请求,看看我们是否能覆盖这种用例。感谢您指出这个问题!

Related Posts

神经网络反向传播代码不工作

我需要编写一个简单的由1个输出节点、1个包含3个节点的…

值错误:y 包含先前未见过的标签:

我使用了 决策树分类器,我想将我的 输入 作为 字符串…

使用不平衡数据集进行特征选择时遇到的问题

我正在使用不平衡数据集(54:38:7%)进行特征选择…

广义随机森林/因果森林在Python上的应用

我在寻找Python上的广义随机森林/因果森林算法,但…

如何用PyTorch仅用标量损失来训练神经网络?

假设我们有一个神经网络,我们希望它能根据输入预测三个值…

什么是RNN中间隐藏状态的良好用途?

我已经以三种不同的方式使用了RNN/LSTM: 多对多…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注