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

如何对SVC进行超参数调优?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

如何在初始训练后向模型添加训练数据?

我想在我的scikit-learn模型已经训练完成后再…

使用Google Cloud Function并行运行带有不同用户参数的相同训练作业

我正在寻找一种方法来并行运行带有不同用户参数的相同训练…

加载Keras模型,TypeError: ‘module’ object is not callable

我已经在StackOverflow上搜索并阅读了文档,…

在计算KNN填补方法中特定列中NaN值的”距离平均值”时

当我从头开始实现KNN填补方法来处理缺失数据时,我遇到…

使用巨大的S3 CSV文件或直接从预处理的关系型或NoSQL数据库获取数据的机器学习训练/测试工作

已关闭。此问题需要更多细节或更清晰的说明。目前不接受回…

发表回复

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