Android 华为图像分割不适用于发布版本
Android Huawei image segmentation not working on release build
我正在使用华为图像分割从图像中去除背景。此代码在 调试版本 上运行良好,但在 发布版本 上不起作用。我不明白这是怎么回事。
代码:
private fun imageSegmentation(bitmap: Bitmap?) {
if (bitmap == null) {
dialog.dismiss()
Toast.makeText(requireContext(), "Something went wrong. Try again!", Toast.LENGTH_LONG).show()
return
}
val setting =
MLImageSegmentationSetting.Factory()
.setAnalyzerType(MLImageSegmentationSetting.BODY_SEG)
.setExact(true)
.create()
val analyzer = MLAnalyzerFactory.getInstance().getImageSegmentationAnalyzer(setting)
val mlFrame = MLFrame.Creator().setBitmap(bitmap).create()
val task = analyzer?.asyncAnalyseFrame(mlFrame)
task?.addOnSuccessListener { mlImageSegmentationResults ->
if (mlImageSegmentationResults != null) {
removalFlag = true
removalBitmap = mlImageSegmentationResults.foreground
} else
Toast.makeText(context, "No human body is detected!", Toast.LENGTH_LONG).show()
dialog.dismiss()
}?.addOnFailureListener {
Toast.makeText(context, "No human body is detected!", Toast.LENGTH_LONG).show()
dialog.dismiss()
}
}
依赖关系:
implementation 'com.huawei.hms:ml-computer-vision-segmentation:2.2.0.300'
implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-body-model:2.2.0.300'
注意:根据我的理解调用了task?.addOnSuccessListener
但是mlImageSegmentationResults
return的null.
当您启用了 ProGuard 但未正确配置时,通常会发生这种情况。确保向 proguard-rules.pro
文件添加适当的规则,以防止它混淆相关的 类.
这方面的信息通常由库开发人员提供。经过快速搜索后,我找到了 this example。来源似乎有足够的记录,因此找到正确的设置应该不是问题。
请记住,您可能需要为多个库添加规则。
我正在使用华为图像分割从图像中去除背景。此代码在 调试版本 上运行良好,但在 发布版本 上不起作用。我不明白这是怎么回事。
代码:
private fun imageSegmentation(bitmap: Bitmap?) {
if (bitmap == null) {
dialog.dismiss()
Toast.makeText(requireContext(), "Something went wrong. Try again!", Toast.LENGTH_LONG).show()
return
}
val setting =
MLImageSegmentationSetting.Factory()
.setAnalyzerType(MLImageSegmentationSetting.BODY_SEG)
.setExact(true)
.create()
val analyzer = MLAnalyzerFactory.getInstance().getImageSegmentationAnalyzer(setting)
val mlFrame = MLFrame.Creator().setBitmap(bitmap).create()
val task = analyzer?.asyncAnalyseFrame(mlFrame)
task?.addOnSuccessListener { mlImageSegmentationResults ->
if (mlImageSegmentationResults != null) {
removalFlag = true
removalBitmap = mlImageSegmentationResults.foreground
} else
Toast.makeText(context, "No human body is detected!", Toast.LENGTH_LONG).show()
dialog.dismiss()
}?.addOnFailureListener {
Toast.makeText(context, "No human body is detected!", Toast.LENGTH_LONG).show()
dialog.dismiss()
}
}
依赖关系:
implementation 'com.huawei.hms:ml-computer-vision-segmentation:2.2.0.300'
implementation 'com.huawei.hms:ml-computer-vision-image-segmentation-body-model:2.2.0.300'
注意:根据我的理解调用了task?.addOnSuccessListener
但是mlImageSegmentationResults
return的null.
当您启用了 ProGuard 但未正确配置时,通常会发生这种情况。确保向 proguard-rules.pro
文件添加适当的规则,以防止它混淆相关的 类.
这方面的信息通常由库开发人员提供。经过快速搜索后,我找到了 this example。来源似乎有足够的记录,因此找到正确的设置应该不是问题。
请记住,您可能需要为多个库添加规则。