【问题标题】:Count cars using bboxes使用 bbox 计数汽车
【发布时间】:2021-12-02 00:13:31
【问题描述】:

我已经训练了一个 s2anet 检测器来检测无人机视频中的汽车。检测器的视觉输出如下图所示:

我想计算有多少汽车穿过某条线,例如从 A 点 (766,642) 到 B 点 (766,676) 的线。有没有办法使用创建的边界框来计算它们,还是我必须使用背景减法方法来尝试重新检测它们?另外作为输出,我有一个 CSV 文件,其中包含每个边界框的坐标。也许我可以用它来数汽车。有什么想法吗?

【问题讨论】:

  • 首先,通过关联跟踪:将每个框分配到与前一帧最接近的轨道(在合理的距离内,假设汽车的速度不超过速度限制或其他东西)。当汽车离开时结束轨道,当汽车进入时创建轨道——然后,建立两条线而不是一条,用于滞后。 -- 然后,确定轨道是否从第一行的前面发展到第二行的后面。如果一条轨道位于两条线之间,则状态不会发生变化——追踪 (1) 需要一个内部和外部区域来实现相同的滞后

标签: python opencv image-processing count object-detection


【解决方案1】:

如果您只需要知道线和 bbox 何时相交,您可以使用 cv2.intersectConvexConvex:

import cv2
import numpy as np

line = np.array([(100, 100), (200, 100)], dtype=np.int32)
bboxes = np.array([[(350, 80), (370, 80), (370, 120), (350, 120)], [(150, 80), (170, 80), (170, 120), (150, 120)]], dtype=np.int32)
for i in range(len(bboxes)):
    intersect_area, intersect_contour = cv2.intersectConvexConvex(line, bboxes[i])
    if intersect_contour is not None:
        print(F"line intersection with bbox {i} detected")

【讨论】:

  • 我使用了 shapely.geometry 中的 Point,Polygon 并使用 .within() 计算了一个点与多边形相交的次数。然后我打印了所有的真假,但还有很长的路要走,因为我的结果高于汽车的实际数量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-07-15
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-12
相关资源
最近更新 更多