Come usare una posenet con tensorflow.js per valutare il movimento del corpo

AI, INTELLIGENZA ARTIFICIALE

In questo articolo voglio lasciarvi un esempio su come sia possibile intercettare la posizione del corpo attraverso l’uso di una rete neurale preaddestrata chiamata posenet rilasciata da google. PoseNet è, infatti, un modello di visione che può essere utilizzato per stimare la posizione/postura di una persona. Ho riscritto un esempio in javascript nella sua forma più elementare/essenziale per una maggiore comprensione del contesto. Riporto l’esempio e lo commenterò di seguito. Potete, nel frattempo, osservare il risultato direttamente attraverso l’esempio live. Non vi preoccupate, non verrà conservata alcuna informazione provenientte  dalla webcam, potete,quindi, tranquillamente attivarla. Per comodità lascio qui il codice di esempio.

Live Demo

Array delle posizione del corpo ... Attendi un attimo

Il codice html  è veramente minimale, dovrete inserire le istruzioni per caricare il modello e tensorflow e preparare il canvas per la gestione delle immagini/frames catturate dalla webcam.

<html>
  <head>
    <!-- Load TensorFlow.js -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs"></script>che 
    <!-- Load Posenet -->
    <script src="https://cdn.jsdelivr.net/npm/@tensorflow-models/posenet"></script>
 </head>
  <body>
    <div id="Container">
            <video autoplay="true" width="640" height="480" id="videoElement"></video>
            <canvas id="myCanvas" width="640" height="480"></canvas>
            <p><span id ="poseElementId">Array delle posizione del corpo ... Attendi un attimo</span></p>
    </div>
  </body>
</html>
 var imageElement;
    var c;
    var ctx;
        setTimeout(function(){
         startVideo();
         c = document.getElementById("myCanvas");
         ctx = c.getContext("2d");
    }, 3000);

 

Questa funzione provvederà ad avviare le webcam ed a richiamare la funzione di inferenza (getSinglePose) per il calcolo delle posizione del corpo

 

   function startVideo() {
        var video = document.querySelector('video'),canvas;
        imageElement=video;
        console.log("navigator  " + navigator.mediaDevices)
        if (navigator.mediaDevices) {
            // access the web cam
            navigator.mediaDevices.getUserMedia({ video: true })
                // permission granted:
                .then(function(stream) {
                 //video.src = window.URL.createObjectURL(stream);
                     video.srcObject = stream;
                     getSinglePose(imageElement);
                })
                // permission denied:
                .catch(function(error) {
                    document.body.textContent = 'Could not access the camera.Error:' + error.name;
                });
        return imageElement;
    }

 

Lo script che esegue la prediction e la stima delle posizioni è altrettanto semplice da leggere:

 

function getSinglePose(imageElement) {
      posenet.load().then(function(net) {
            const pose = net.estimateSinglePose(imageElement);
            return pose;
          }).then(function(pose){
           var keypoints = new Array();
           keypoints=pose.keypoints;
           var poseElement = document.getElementById('poseElementId');
           poseElement.innerHTML="";
           for (index=0;index<17;index++)
           {
               poseElement.innerHTML += keypoints[index].part + " " + keypoints[index].position.x + " " 
                     + keypoints[index].position.y + "<br>";
           }
           getSinglePose(imageElement);
        })
}

La stima della posizione (estimateSinglePose) usa tecniche di visione artificiale in grado di rilevare  figure umane in immagini e video, in modo da poter determinare, ad esempio, dove si trovano il gomito, gli occhi, il naso etc. Per essere chiari, con questo modello non si fa riconoscimento della persona ma solo tracciamento dei movimenti posturali. L’algoritmo individua  semplicemente dove si trovano le articolazioni del corpo i punti chiave (keypoints) indicizzati ed identificabili con un id “ID”. Il risultato della stima  restituisce anche un punteggio di confidenza compreso tra  0,0 e 1,0, 1,0. Di seguito La label map utilizzata nella addestramento del modello :

Id Parte del corpo riconosciuta
0 nose
1 leftEye
2 rightEye
3 leftEar
4 rightEar
5 leftShoulder
6 rightShoulder
7 leftElbow
8 rightElbow
9 leftWrist
10 rightWrist
11 leftHip
12 rightHip
13 leftKnee
14 rightKnee
15 leftAnkle
16 rightAnkle
Se vuoi farmi qualche richiesta o contattarmi per un aiuto riempi il seguente form

    Comments