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

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

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