Python中的多目标跟踪器
简单易用的多目标跟踪算法实现。
可用的多目标跟踪器
- CentroidTracker
- IOUTracker
- CentroidKF_Tracker
- SORT
基于OpenCV的可用物体检测器:
- detector.TF_SSDMobileNetV2
- detector.Caffe_SSDMobileNet
- detector.YOLOv3
安装
可以使用以下命令通过Pip安装OpenCV(3.4.3或更高版本),地址在这里:
pip install motrackers
此外,你也可以通过GitHub安装该包:
git clone https://github.com/adipandas/multi-object-tracker
cd multi-object-tracker
pip install [-e] .
注意 - 使用GPU进行神经网络模型
若要在此仓库中使用基于opencv dnn
的GPU物体检测模块,可能需要从源码编译带有CUDA支持的OpenCV版本。
如何使用?:示例
每个跟踪器的接口简单而相似。请参见下面的示例模板。
from motrackers import CentroidTracker # 或 IOUTracker, CentroidKF_Tracker, SORT
input_data = ...
detector = ...
tracker = CentroidTracker(...) # 或 IOUTracker(...), CentroidKF_Tracker(...), SORT(...)
while True:
done, image = <read(input_data)>
if done:
break
detection_bboxes, detection_confidences, detection_class_ids = detector.detect(image)
# 注意:
# * `detection_bboxes` 是形状为 (n, 4) 的 numpy.ndarray,每行包含 (bb_left, bb_top, bb_width, bb_height)
# * `detection_confidences` 是形状为 (n,) 的 numpy.ndarray;
# * `detection_class_ids` 是形状为 (n,) 的 numpy.ndarray。
output_tracks = tracker.update(detection_bboxes, detection_confidences, detection_class_ids)
# `output_tracks` 是一个列表,每个元素包含一个元组
# (<frame>, <id>, <bb_left>, <bb_top>, <bb_width>, <bb_height>, <conf>, <x>, <y>, <z>)
for track in output_tracks:
frame, id, bb_left, bb_top, bb_width, bb_height, confidence, x, y, z = track
assert len(track) == 10
print(track)
请参见此仓库的examples文件夹获取更多详细信息。你可以克隆并运行示例。
预训练的物体检测模型
你将需要下载神经网络模型的预训练权重。用于下载它们的shell脚本在这里的相应文件夹下提供。 请参见DOWNLOAD_WEIGHTS.md获取更多详细信息。
注意
- 相较于
SORT
和IoU Tracker
论文中的内容,实现上有些许差异。 - 如果你在算法中发现了任何问题,我很乐意接受你的pull request,或者你也可以创建一个issue指出问题。
参考文献,致谢与贡献
请参见REFERENCES.md 和 CONTRIBUTING.md。
引用
如果你在工作中使用了这个库,请考虑使用以下方式引用:
@misc{multiobjtracker_amd2018,
author = {Deshpande, Aditya M.},
title = {Multi-object trackers in Python},
year = {2020},
publisher = {GitHub},
journal = {GitHub repository},
howpublished = {\url{https://github.com/adipandas/multi-object-tracker}},
}