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

OpenVINO person-detection-asl-0001模型输出坐标错误,无法正常绘制cv2矩形

解决person-detection-asl-0001检测框坐标异常问题

问题根源

person-detection-asl-0001的输出坐标是基于模型固定输入尺寸(384×672,高×宽)的绝对像素值,并非归一化数值。你看到的29012、127753这类超出图像范围的坐标,是因为直接把模型输入尺寸下的坐标套用到了原始图像(960×1280)上,没有做正确的尺寸映射。

修正后处理逻辑

需要把模型输出的坐标先转换为归一化值,再映射到原始图像的尺寸上,步骤如下:

  • 取出模型固定输入尺寸:高度384,宽度672
  • 将模型输出的xmin、xmax除以输入宽度,得到横向归一化坐标
  • 将模型输出的ymin、ymax除以输入高度,得到纵向归一化坐标
  • 用归一化后的坐标分别乘以原始图像的宽度(1280)和高度(960),得到适配原始图像的绝对坐标
  • 最后做边界截断,确保坐标不超出图像范围

修正代码示例

替换你的postprocess函数为以下代码:

def postprocess(outputs, original_img_shape):
    # 模型固定输入尺寸
    input_h, input_w = 384, 672
    orig_h, orig_w = original_img_shape[:2]
    valid_detections = []
    
    # 提取检测结果(模型输出格式为[1,1,N,7],对应[image_id, label, conf, xmin, ymin, xmax, ymax])
    detections = outputs[0][0]
    for det in detections:
        _, label, conf, xmin, ymin, xmax, ymax = det
        # 过滤低置信度结果,阈值可按需调整
        if conf < 0.5:
            continue
        
        # 转换为归一化坐标
        norm_xmin = xmin / input_w
        norm_ymin = ymin / input_h
        norm_xmax = xmax / input_w
        norm_ymax = ymax / input_h
        
        # 映射到原始图像尺寸
        final_xmin = int(norm_xmin * orig_w)
        final_ymin = int(norm_ymin * orig_h)
        final_xmax = int(norm_xmax * orig_w)
        final_ymax = int(norm_ymax * orig_h)
        
        # 确保坐标在图像范围内
        final_xmin = max(0, final_xmin)
        final_ymin = max(0, final_ymin)
        final_xmax = min(orig_w - 1, final_xmax)
        final_ymax = min(orig_h - 1, final_ymax)
        
        valid_detections.append((label, conf, final_xmin, final_ymin, final_xmax, final_ymax))
    return valid_detections

额外验证项

  • 确认预处理阶段是否将原始图像正确缩放到384×672后输入模型,这是坐标映射准确的前提
  • 运行后检查输出的坐标值,应在0到1280(横向)、0到960(纵向)范围内

内容的提问来源于stack exchange,提问作者bbartling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:50:17