我正在使用OPENCV内置跟踪器CSRT进行对象检测和跟踪,我发现它最适合使用,但是在这里我有一个问题,当目标脱离框架时,当目标返回框架时,它仍然在最后跟踪的位置上有一个边界框它不会跟踪。从OPENCV文档中,我知道这是短期跟踪器,但是有什么方法可以知道目标现在不在框架中,我使用了此命令
success, boxes = multiTracker.update(frame)
print("Success",success)
知道它是否会产生错误,但不会。我必须使用此算法进行实时跟踪。此外,我不愿意使用像yolo或TF这样的高级ML库,所以如果有人可以帮助它或使用一些更好的跟踪器,我将不愿意。
最佳答案
我也在使用来自openCV(C++)的CSRT跟踪器。
我认为您有两种选择:
1)您可以编写一种算法来检测对象是否仍在边界框中。为此,您可以从openCV的跟踪模块(cf CSRTImpl::estimate_new_position
)的trackerCSRT.cpp中实现的方法中获得启发。在此函数中,params.psr_threshold表示所跟踪对象丢失或未丢失的阈值。因此,如果编写类似的算法,则可以确定对象是否不在边界框内(在该算法上, psr_threshold
2)我建议的第二个选择是使用函数CSRT::create(const CSRT::Params&parameters)初始化CSRT跟踪器,然后将较高的值传递给psr_threshold(例如0.1),以使跟踪器具有更高的敏感。在这种情况下,您的跟踪器将不会继续跟踪空白区域,但会返回假(丢失目标),这已经是一个改进。
根据您的应用程序,您将需要实现一些措施才能在视频中再次找到目标。现在,这称为长期跟踪。
祝好运