Thank you for the useful project! I have some misunderstanding of tracker parameters from the API. From the description of initialization_delay:
From there, my understanding was the following. Let's say we have a static object which we get during the next 10 shots, and then it disappears. If we set hit_inertia_min = 5, hit_inertia_max = 10, initialization_delay = 3, then the tracker will wait till it gets 5 matches (hits), then it considers the object as a potential object (which is not clear what it is). Then we wait till the counter exceed hit_inertia_min + initialization_delay = 8, and on the 9th hit, we will get a real object.
At the same time, I did a test run with a fixed detection that I feed to the tracker during 10 shots. After 20 updates, the outputs of tracker.update(detections=detections) looks like this:
Update number: 0
Tracked objects: []
____________
Update number: 1
Tracked objects: []
____________
Update number: 2
Tracked objects: []
____________
Update number: 3
Tracked objects: [Object_1(age: 3, hit_counter: 9, last_distance: 0.00, init_id: 33)]
____________
Update number: 4
Tracked objects: [Object_1(age: 4, hit_counter: 10, last_distance: 0.00, init_id: 33)]
____________
Update number: 5
Tracked objects: [Object_1(age: 5, hit_counter: 11, last_distance: 0.00, init_id: 33)]
____________
Update number: 6
Tracked objects: [Object_1(age: 6, hit_counter: 10, last_distance: 0.00, init_id: 33)]
____________
Update number: 7
Tracked objects: [Object_1(age: 7, hit_counter: 11, last_distance: 0.00, init_id: 33)]
____________
Update number: 8
Tracked objects: [Object_1(age: 8, hit_counter: 10, last_distance: 0.00, init_id: 33)]
____________
Update number: 9
Tracked objects: [Object_1(age: 9, hit_counter: 11, last_distance: 0.00, init_id: 33)]
____________
Update number: 10
Tracked objects: [Object_1(age: 10, hit_counter: 10, last_distance: 0.00, init_id: 33)]
____________
Update number: 11
Tracked objects: [Object_1(age: 11, hit_counter: 9, last_distance: 0.00, init_id: 33)]
____________
Update number: 12
Tracked objects: [Object_1(age: 12, hit_counter: 8, last_distance: 0.00, init_id: 33)]
____________
Update number: 13
Tracked objects: [Object_1(age: 13, hit_counter: 7, last_distance: 0.00, init_id: 33)]
____________
Update number: 14
Tracked objects: [Object_1(age: 14, hit_counter: 6, last_distance: 0.00, init_id: 33)]
____________
Update number: 15
Tracked objects: [Object_1(age: 15, hit_counter: 5, last_distance: 0.00, init_id: 33)]
____________
Update number: 16
Tracked objects: [Object_1(age: 16, hit_counter: 4, last_distance: 0.00, init_id: 33)]
____________
Update number: 17
Tracked objects: []
____________
Update number: 18
Tracked objects: []
____________
Update number: 19
Tracked objects: []
____________
Which means that when hits (age) exceed initialization_delay, we already have Object_1 in the list of object. At age value 9, nothing happens (change from potential to real object). Also, we see that when age exceeds initialization_delay, hit_counter start from the value 9 (what means this number?). Then the disappearance of an object at hit_counter value 3 is expected as well as max hit_counter value = 10 (but it's fluctuating from 10 to 11).
I would be glad for some clarifications on params meaning.