1.1. Based on background substraction: built-in Vibe (tracking::Motion_VIBE), SuBSENSE (tracking::Motion_SuBSENSE) and LOBSTER (tracking::Motion_LOBSTER); MOG2 (tracking::Motion_MOG2) from opencv; MOG (tracking::Motion_MOG), GMG (tracking::Motion_GMG) and CNT (tracking::Motion_CNT) from opencv_contrib. For foreground segmentation used contours from OpenCV with result as cv::RotatedRect
1.2. Haar face detector from OpenCV (tracking::Face_HAAR)
1.3. HOG pedestrian detector from OpenCV (tracking::Pedestrian_HOG) and C4 pedestrian detector from sturkmen72 (tracking::Pedestrian_C4)
1.7. You can to use custom detector with bounding or rotated rectangle as output.
2.1. Hungrian algorithm (tracking::MatchHungrian) with cubic time O(N^3) where N is objects count
2.2. Algorithm based on weighted bipartite graphs (tracking::MatchBipart) from rdmpage with time O(M * N^2) where N is objects count and M is connections count between detections on frame and tracking objects. It can be faster than Hungrian algorithm
2.3. Distance from detections and objects: euclidean distance in pixels between centers (tracking::DistCenters), euclidean distance in pixels between rectangles (tracking::DistRects), Jaccard or IoU distance from 0 to 1 (tracking::DistJaccard)
3.1. Linear Kalman filter from OpenCV (tracking::KalmanLinear)
3.2. Unscented Kalman filter from OpenCV (tracking::KalmanUnscented) with constant velocity or constant acceleration models
3.3. Kalman goal is only coordinates (tracking::FilterCenter) or coordinates and size (tracking::FilterRect)
3.4. Simple Abandoned detector
3.5. Line intersection counting
4.1. No search (tracking::TrackNone)
4.2. Built-in DAT (tracking::TrackDAT) from foolwood, STAPLE (tracking::TrackSTAPLE) from xuduo35 or LDES (tracking::TrackLDES) from yfji; KCF (tracking::TrackKCF), MIL (tracking::TrackMIL), MedianFlow (tracking::TrackMedianFlow), GOTURN (tracking::TrackGOTURN), MOSSE (tracking::TrackMOSSE) or CSRT (tracking::TrackCSRT) from opencv_contrib
With this option the tracking can work match slower but more accuracy.
5.1. Syncronous pipeline - SyncProcess:
This pipeline is good if all algorithms are fast and works faster than time between two frames (40 ms for device with 25 fps). Or it can be used if we have only 1 core for all (no parallelization).
5.2. Pipeline with 2 threads - AsyncProcess:
So we have a latency on 1 frame but on two free CPU cores we can increase performance on 2 times.
5.3. Fully acynchronous pipeline can be used if the objects detector works with low fps and we have a free 2 CPU cores. In this case we use 4 threads:
This pipeline can used with slow but accuracy DNN and track objects in intermediate frame in realtime without latency.
Also you can read Wiki in Russian.
git clone https://github.com/Smorodov/Multitarget-tracker.git cd Multitarget-tracker mkdir build cd build cmake . .. -DUSE_OCV_BGFG=ON -DUSE_OCV_KCF=ON -DUSE_OCV_UKF=ON -DBUILD_YOLO_LIB=ON -DBUILD_YOLO_TENSORRT=ON -DBUILD_ASYNC_DETECTOR=ON -DBUILD_CARS_COUNTING=ON make -j
How to run cmake on Windows for Visual Studio 15 2017 Win64: example. You need to add directory with cmake.exe to PATH and change build params in cmake.bat
Usage: ./MultitargetTracker <path to movie file> [--example]=<number of example 0..7> [--start_frame]=<start a video from this position> [--end_frame]=<play a video to this position> [--end_delay]=<delay in milliseconds after video ending> [--out]=<name of result video file> [--show_logs]=<show logs> [--gpu]=<use OpenCL> [--async]=<async pipeline> [--res]=<csv log file> [--settings]=<ini file> [--batch_size=<number of frames>] ./MultitargetTracker ../data/atrium.avi -e=1 -o=../data/atrium_motion.avi Press: * 'm' key for change mode: play|pause. When video is paused you can press any key for get next frame. * Press Esc to exit from video Params: 1. Movie file, for example ../data/atrium.avi 2. [Optional] Number of example: 0 - MouseTracking, 1 - MotionDetector, 2 - FaceDetector, 3 - PedestrianDetector, 4 - OpenCV dnn objects detector, 5 - Yolo Darknet detector, 6 - YOLO TensorRT Detector, Cars counting -e=0 or --example=1 3. [Optional] Frame number to start a video from this position -sf=0 or --start_frame==1500 4. [Optional] Play a video to this position (if 0 then played to the end of file) -ef=0 or --end_frame==200 5. [Optional] Delay in milliseconds after video ending -ed=0 or --end_delay=1000 6. [Optional] Name of result video file -o=out.avi or --out=result.mp4 7. [Optional] Show Trackers logs in terminal -sl=1 or --show_logs=0 8. [Optional] Use built-in OpenCL -g=1 or --gpu=0 9. [Optional] Use 2 threads for processing pipeline -a=1 or --async=0 10. [Optional] Path to the csv file with tracking result -r=res.csv or --res=res.csv 11. [Optional] Path to the ini file with tracker settings -s=settings.ini or --settings=settings.ini 12. [Optional] Batch size - simultaneous detection on several consecutive frames -bs=2 or --batch_size=1
More details here: How to run examples.
Apache 2.0: LICENSE text