You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于Google Vision QuickStart的目标检测器:按置信度过滤显示对象

自定义MLKit目标检测器:过滤低置信度对象不显示

需求

基于Google vision-quickstart示例修改目标检测器,实现置信度未达0.5的检测对象完全不显示(含边框、标签)。

原检测效果:
原检测效果

已做修改及当前问题

已修改ObjectGraphic.java移除低置信度标签文本:

// ObjectGraphic.java
private static final float CONFIDENCE_THRESHOLD = 0.50f;
...
for (Label label : object.getLabels()) {
  if (label.getConfidence() < CONFIDENCE_THRESHOLD) {continue;}
  canvas.drawText...
}

但仅隐藏了标签文字,对象的边框和标签背景框仍会显示:
当前效果

解决方案

方案1:添加前过滤(推荐,性能更优)

直接在ObjectDetectorProcessor.java的onSuccess方法中,先过滤掉无有效标签的检测对象,再添加到Overlay:

// 可复用ObjectGraphic中的阈值常量,或单独定义
private static final float CONFIDENCE_THRESHOLD = 0.50f;

@Override
protected void onSuccess(
    @NonNull List<DetectedObject> results, @NonNull GraphicOverlay graphicOverlay) {
  for (DetectedObject object : results) {
    // 检查当前对象是否存在符合置信度要求的标签
    boolean hasValidLabel = false;
    for (Label label : object.getLabels()) {
      if (label.getConfidence() >= CONFIDENCE_THRESHOLD) {
        hasValidLabel = true;
        break;
      }
    }
    // 仅当存在有效标签时,才添加绘制图形
    if (hasValidLabel) {
      graphicOverlay.add(new ObjectGraphic(graphicOverlay, object));
    }
  }
}

方案2:在绘制时跳过

修改ObjectGraphic.java的draw方法,若无有效标签则直接返回,不执行任何绘制逻辑:

@Override
public void draw(Canvas canvas) {
  // 检查是否有符合置信度的标签
  boolean hasValidLabel = false;
  for (Label label : object.getLabels()) {
    if (label.getConfidence() >= CONFIDENCE_THRESHOLD) {
      hasValidLabel = true;
      break;
    }
  }
  // 无有效标签则不绘制任何内容
  if (!hasValidLabel) {
    return;
  }
  
  // 原有的绘制边框、标签文本代码...
}

两种方案都能实现需求,方案1避免了创建不必要的ObjectGraphic实例,更推荐使用。

内容的提问来源于stack exchange,提问作者jw-smc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 10:55:14