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

人脸Bounding Box放大函数异常:基于face_recognition的坐标处理问题

问题分析与修正方案

你的代码逻辑完全搞反了,当前计算是在缩小Bounding Box,而非放大。要按比例放大框,得基于原框的宽高计算扩展量,而非直接对坐标乘因子。

正确思路

原框高度为 b - t,宽度为 r - l。要实现对称放大(保持框中心不变):

  • top 向上移动:t - 扩展高度
  • bottom 向下移动:b + 扩展高度
  • left 向左移动:l - 扩展宽度
  • right 向右移动:r + 扩展宽度

其中扩展高度 = (b - t) * EXPANDING_FACTOR / 2,扩展宽度 = (r - l) * EXPANDING_FACTOR / 2,确保上下左右均匀扩展。

修正后的代码

EXPANDING_FACTOR = 0.75  # 扩展比例,0.75表示在原框基础上向外扩展75%的宽高
def enlarge_bounding_box(t, r, b, l):
    """
    按比例放大人脸Bounding Box,保持中心不变
    """
    # 计算原框的宽高
    height = b - t
    width = r - l
    
    # 计算上下左右的对称扩展量
    expand_top_bottom = int(height * EXPANDING_FACTOR / 2)
    expand_left_right = int(width * EXPANDING_FACTOR / 2)
    
    # 计算新坐标
    new_t = t - expand_top_bottom
    new_r = r + expand_left_right
    new_b = b + expand_top_bottom
    new_l = l - expand_left_right
    
    # 防止坐标超出图像左/上边界(若需限制右/下边界,可传入图像宽高后补充判断)
    new_t = max(0, new_t)
    new_l = max(0, new_l)
    
    return new_t, new_r, new_b, new_l

原代码错误原因

原代码中 t = int(t - EXPANDING_FACTOR * t) 等价于 t = t * 0.25,这会让top坐标向上偏移但幅度基于原坐标值而非框高;right坐标计算为 r * 0.25 会直接向左收缩,最终结果是把框大幅缩小,完全不符合放大需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 10:55:13