2017-04-13 3 views
0

tracking.js permet de détecter facilement un visage sur un <img>. Ils ont un wonderful hello world example pour cela, mais je me demandais si quelqu'un savait encore comment détecter un visage sur un élément <canvas>.Suivi du visage sur la toile via tracking.js

J'ai essayé:

var canvas = document.getElementById('canvas'), 
context = canvas.getContext('2d'), 
img = img = context.getImageData(0, 0, canvas.width, canvas.height); 

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

tracking.track('#canvas', tracker); 

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

window.plot = function(x, y, w, h) { 
    var rect = document.createElement('div'); 
    document.querySelector('#preview').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'; 
    rect.style.borderColor = '#ff0000'; 
}; 

Rien ne se passe: -/

+0

Jetez un oeil à leur code source. J'ai trouvé 'tracking.trackCanvas_ = fonction (élément, tracker) {' ligne 166 dans le fichier 'src/tracker.js' – Blindman67

+0

Merci pour votre vérification! Grâce à votre commentaire, j'ai réalisé qu'ils poussent chaque image ou vidéo dans une toile pour la détection des caractéristiques. Selon le code, une image provenant d'un 'canvas' devrait fonctionner correctement, mais je ne comprends pas. Voici un violon basé sur l'exemple de ** hello world ** en utilisant 'canvas' au lieu de' img'. Qu'est-ce qui ne va pas? https://jsfiddle.net/atv6w3g8/5/ – zaph0t

Répondre

0

J'ai eu le même problème. Changez juste l'ordre. Mettez tracking.track('#canvas', tracker) derrière la section tracker.on et cela devrait fonctionner. Mais si vous voulez le "mettre en surbrillance" sur une toile, vous devez dessiner sur le contexte au lieu de tracer. Vous pouvez également passer le imageData directement tracker.track(imgData, width, height) ... Amusez-vous.