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

基于自定义数据集训练的YOLOv5如何计算两检测目标间的距离?

如何基于YOLOv5检测结果计算两个目标间的距离?

你已经通过以下命令完成YOLOv5自定义目标检测:

python detect.py --weights runs\train\exp2\weights\last.pt --img 640 --conf 0.25 --source 0

下面分两种场景给出具体实现方案:

一、计算图像上的像素距离

这是最直接的方式,仅需基于检测框坐标计算即可:

  • 提取目标框中心点:修改detect.py,在检测结果处理逻辑中,对每个检测到的目标(对应你的两个自定义类别),计算其bbox的中心点坐标(x_center, y_center) = ((x1+x2)/2, (y1+y2)/2),其中x1,y1,x2,y2是检测框的左上角和右下角坐标。
  • 计算欧几里得距离:对两个目标的中心点,用公式distance = √[(x2-x1)² + (y2-y1)²]计算像素距离。
  • 输出结果:可将距离标注在检测画面上,或打印到控制台。

代码修改示例

在detect.py中找到处理检测结果的循环部分,插入以下代码:

# 筛选出你的两个目标类别(替换成你数据集对应的类别索引,比如0和1)
target_centers = []
for *xyxy, conf, cls in reversed(pred):
    cls_idx = int(cls)
    if cls_idx in [0, 1]:
        x1, y1, x2, y2 = xyxy
        x_center = (x1 + x2) / 2
        y_center = (y1 + y2) / 2
        target_centers.append((x_center, y_center))

# 仅当检测到两个目标时计算距离
if len(target_centers) == 2:
    dx = target_centers[1][0] - target_centers[0][0]
    dy = target_centers[1][1] - target_centers[0][1]
    pixel_dist = (dx**2 + dy**2)**0.5
    # 在画面上标注距离
    cv2.putText(img, f"Pixel Distance: {pixel_dist:.2f}", (30, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
    # 控制台打印
    print(f"两目标像素距离: {pixel_dist:.2f}")

二、计算真实世界的实际距离

如果需要真实物理距离,需结合相机参数或参照物完成像素到真实尺寸的转换:

  • 确定像素比例:找一个已知真实尺寸的参照物(比如边长10cm的正方形),拍摄后测量其在图像中的像素尺寸,计算比例scale = 真实尺寸 / 像素尺寸(例如10cm对应200像素,则scale=0.05cm/像素)。
  • 转换真实距离:用计算出的像素距离乘以scale,得到真实物理距离。
  • 进阶优化:若目标不在同一平面,需结合深度信息(可通过双目相机、结构光或单目相机基于已知目标尺寸估算深度)计算3D空间距离。

代码示例(基于比例转换)

在上述像素距离计算的基础上,添加:

# 替换为你实际测量得到的比例
scale = 0.05  # 单位:cm/像素
real_dist = pixel_dist * scale
print(f"两目标实际距离: {real_dist:.2f} cm")
cv2.putText(img, f"Real Distance: {real_dist:.2f} cm", (30, 70), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)

注意事项

  • 确保自定义类别的索引匹配正确,避免筛选错误的目标框。
  • 真实距离计算时,尽量让目标和参照物处于同一拍摄平面,减少误差。
  • 动态场景中,若相机或目标移动,需重新校准比例或深度信息。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 22:41:27