eduardolundgren / tracking.js

A modern approach for Computer Vision on the web
http://trackingjs.com
Other
9.43k stars 1.44k forks source link

how to know which of the classifier was detected? #170

Open Jaylton opened 7 years ago

Jaylton commented 7 years ago

how to know which classifier was detected? I need these classifiers which violates jones / tracking this by detecting the image. how can I do to find out

Queria saber como descobrir qual dos classificadores esta sendo detectado, como posso fazer isso? `var img = document.getElementById('srcImage');

var tracker = new tracking.ObjectTracker(['face']); tracker.setStepSize(1.7);

tracking.track('#srcImage', tracker, {onFound:function(){ alert('re'); }});

tracker.on('track', function(event) { console.log(event) event.data.forEach(function(rect) { window.plot(rect.x, rect.y, rect.width, rect.height); alert(event.classifier); }); });

window.plot = function(x, y, w, h) { var rect = document.createElement('div'); document.querySelector('.image').appendChild(rect); rect.classList.add('rect'); rect.style.width = w + 'px'; rect.style.height = h + 'px'; rect.style.left = (img.offsetLeft + x) + 'px'; rect.style.top = (img.offsetTop + y) + 'px'; };

};`

Rouche commented 7 years ago

Edit: After thinking about it, i guess its better to do it manually by using

tracking.ViolaJones.detect(pixels, width, height, self.getInitialScale(), self.getScaleFactor(), self.getStepSize(), self.getEdgesDensity(), tracking.ViolaJones.classifiers['face'])

directly.

Hi, I need this too, reading the code, its not possible unless you do them separatelly. wich i guess should affect performance.

An idea for solution to not affect too much API would be in tracking.js to keep the type when you originally create the tracker. Them in rect add the type property.

  tracking.ObjectTracker = function(opt_classifiers) {
    tracking.ObjectTracker.base(this, 'constructor');

    if (opt_classifiers) {
      if (!Array.isArray(opt_classifiers)) {
        opt_classifiers = [opt_classifiers];
      }

      var classifiersMap = {};
      if (Array.isArray(opt_classifiers)) {
        opt_classifiers.forEach(function(classifier, i) {
          if (typeof classifier === 'string') {
            classifiersMap[classifier] = tracking.ViolaJones.classifiers[classifier];
          }
          if (!classifiersMap[classifier]) {
            throw new Error('Object classifier not valid, try `new tracking.ObjectTracker("face")`.');
          }
        });
      }
    }

    this.setClassifiers(classifiersMap);
  };
  tracking.ObjectTracker.prototype.track = function(pixels, width, height) {
    var self = this;
    var classifiers = this.getClassifiers();

    if (!classifiers) {
      throw new Error('Object classifier not specified, try `new tracking.ObjectTracker("face")`.');
    }

    var results = [];

    Object.keys(classifiers).forEach(function(classifier) {
      var rect = tracking.ViolaJones.detect(pixels, width, height, self.getInitialScale(), self.getScaleFactor(), self.getStepSize(), self.getEdgesDensity(), classifiers[classifier]);
      rect.type = classifier;
      results = results.concat(rect);
    });

    this.emit('track', {
      data: results
    });
  };