Computer vision con le reti neurali: ml5.js

// height=240 lines=auto
let capture;  // fotogrammi catturati dalla webcam
let poseNet;  // oggetto che gestisce il riconoscimento
let poses;    // array delle pose rilevate

function setup() {
    createCanvas(320, 240);
    strokeWeight(3);
    fill(255,128);

    capture = createCapture(VIDEO);
    capture.size( width, height );
    capture.hide();

    poseNet = ml5.poseNet(capture);   
    poseNet.on('pose', gotPoses);
}

function gotPoses(results) {  
    poses = results;
}

function draw() {
    image(capture, 0, 0);

    if (poses && poses.length > 0) {
        let occhioSxPos = poses[0].pose.keypoints[1].position;
        circle(occhioSxPos.x, occhioSxPos.y, 30);
        let occhioDxPos = poses[0].pose.keypoints[2].position;
        circle(occhioDxPos.x, occhioDxPos.y, 30);
    }
}
poseNet = ml5.poseNet(capture);  
poseNet.on('pose', gotPoses);   

Inizializzazione della libreria e caricamento del modello di rete neurale "addestrato" per stimare le pose delle persone eventualmente inquadrate.
Per gestire correttamente l'array delle pose (poses) è necessario indicare la funzione da chiamare ogni volta che le pose vengono riconosciute.

function gotPoses(results) {  
    poses = results;
}

Quando le pose vengono riconosciute memorizza i dati ottenuti nell'array poses.

if (poses && poses.length > 0) {
    let occhioSxPos = poses[0].pose.keypoints[1].position;
    circle(occhioSxPos.x, occhioSxPos.y, 30);
    let occhioDxPos = poses[0].pose.keypoints[2].position;
    circle(occhioDxPos.x, occhioDxPos.y, 30);
}

Se l'array poses è valido e se contiene almeno una posa, leggi le posizioni degli occhi e visualizza i cerchi. Nel caso specifico viene considerata solo la prima posa (poses[0]).
Le corrispondenze con gli indici dell'array keypoints si trovano nella tabella dei nodi chiave.


Strutturazione dei file: