Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 23 additions & 4 deletions ItemTracked.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ var computeVelocityVector = require('./utils').computeVelocityVector
// "name": "car"
// }

/** The maximum length of the item history. */
exports.ITEM_HISTORY_MAX_LENGTH = 15;

// Use a simple incremental unique id for the display
var idDisplay = 0;

Expand Down Expand Up @@ -48,6 +51,9 @@ exports.ItemTracked = function(properties, frameNb, unMatchedFramesTolerance, fa
h: properties.h,
confidence: properties.confidence
});
if(itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) {
itemTracked.itemHistory.shift();
}
itemTracked.velocity = {
dx: 0,
dy: 0
Expand Down Expand Up @@ -79,6 +85,9 @@ exports.ItemTracked = function(properties, frameNb, unMatchedFramesTolerance, fa
h: this.h,
confidence: this.confidence
});
if(itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) {
itemTracked.itemHistory.shift();
}
this.name = properties.name;
if(this.nameCount[properties.name]) {
this.nameCount[properties.name]++;
Expand Down Expand Up @@ -124,6 +133,9 @@ exports.ItemTracked = function(properties, frameNb, unMatchedFramesTolerance, fa
h: this.h,
confidence: this.confidence
});
if(itemTracked.itemHistory.length >= exports.ITEM_HISTORY_MAX_LENGTH) {
itemTracked.itemHistory.shift();
}
this.x = this.x + this.velocity.dx
this.y = this.y + this.velocity.dy
}
Expand All @@ -142,11 +154,18 @@ exports.ItemTracked = function(properties, frameNb, unMatchedFramesTolerance, fa
}
// Velocity vector based on the last 15 frames
itemTracked.updateVelocityVector = function() {
var AVERAGE_NBFRAME = 15;
if(this.itemHistory.length <= AVERAGE_NBFRAME) {
return computeVelocityVector(this.itemHistory[0], this.itemHistory[this.itemHistory.length - 1], this.itemHistory.length);
if(exports.ITEM_HISTORY_MAX_LENGTH <= 2) {
return { dx: undefined, dy: undefined, }
}

if(this.itemHistory.length <= exports.ITEM_HISTORY_MAX_LENGTH) {
const start = this.itemHistory[0];
const end = this.itemHistory[this.itemHistory.length - 1];
return computeVelocityVector(start, end, this.itemHistory.length);
} else {
return computeVelocityVector(this.itemHistory[this.itemHistory.length - AVERAGE_NBFRAME], this.itemHistory[this.itemHistory.length - 1], AVERAGE_NBFRAME);
const start = this.itemHistory[this.itemHistory.length - exports.ITEM_HISTORY_MAX_LENGTH];
const end = this.itemHistory[this.itemHistory.length - 1];
return computeVelocityVector(start, end, exports.ITEM_HISTORY_MAX_LENGTH);
}
}

Expand Down
54 changes: 39 additions & 15 deletions spec/ItemTracked.spec.js
Original file line number Diff line number Diff line change
@@ -1,30 +1,54 @@
const ItemTracked = require('../ItemTracked');

describe("ItemTracked", function () {
const properties = {
x: null,
y: null,
w: null,
h: null,
name: "dummy",
confidence: null
};

describe("idDisplay", function () {
const properties = {
x: null,
y: null,
w: null,
h: null,
name: "dummy",
confidence: null
};
const item1 = ItemTracked.ItemTracked(properties);
const item2 = ItemTracked.ItemTracked(properties);

it('starts at 0', function() {
expect(item1.idDisplay).toBe(0);
it('starts at 0', function () {
expect(item1.idDisplay).toBe(0);
});

it('icrements IDs', function() {
it('icrements IDs', function () {
expect(item1.idDisplay).toBeLessThan(item2.idDisplay);
});

it('resets IDs', function() {
ItemTracked.reset();
const item3 = ItemTracked.ItemTracked(properties);
expect(item3.idDisplay).toBe(0);
it('resets IDs', function () {
ItemTracked.reset();
const item3 = ItemTracked.ItemTracked(properties);
expect(item3.idDisplay).toBe(0);
});
});

describe('itemHistory', () => {
it('stops at max length', () => {
const item1 = ItemTracked.ItemTracked(properties);
for (var i = 0; i < ItemTracked.ITEM_HISTORY_MAX_LENGTH + 2; i++) {
item1.update(properties, i);
expect(item1.itemHistory.length).toBeLessThanOrEqual(ItemTracked.ITEM_HISTORY_MAX_LENGTH);
}
});

it('does not store history', () => {
const originalItemHistoryMaxLen = ItemTracked.ITEM_HISTORY_MAX_LENGTH;
ItemTracked.ITEM_HISTORY_MAX_LENGTH = 0;
const item1 = ItemTracked.ItemTracked(properties);

for (var i = 0; i < ItemTracked.ITEM_HISTORY_MAX_LENGTH + 2; i++) {
item1.update(properties, i);
expect(item1.itemHistory.length).toBe(ItemTracked.ITEM_HISTORY_MAX_LENGTH);
}

ItemTracked.ITEM_HISTORY_MAX_LENGTH = originalItemHistoryMaxLen;
});
});
});