// // Import TFJS runtime with side effects. // import '@tensorflow/tfjs-backend-webgl'; // import * as poseDetection from '@tensorflow-models/pose-detection'; // // import 'https://cdn.jsdelivr.net/npm/@tensorflow/tfjs-backend-webgl'; // // import * as poseDetection from 'https://cdn.jsdelivr.net/npm/@tensorflow-models/pose-detection'; /* ============= Params ============= */ let capture; let font; let detector; let poses; let angle = 0.0; /* ============= Function ============= */ function preload() { } function setup() { createCanvas(640, 480); capture = createCapture(VIDEO, captureLoaded); background(255); } function captureLoaded() { console.log("capture loaded..."); initModel(); } async function initModel() { const _model = poseDetection.SupportedModels.MoveNet; console.log("model:", _model); const detectorConfig = { runtime: "tfjs", // 'mediapipe', 'tfjs' //modelType: "lite", // 'lite', 'full', 'heavy' }; detector = await poseDetection.createDetector(_model, detectorConfig); } async function getPose() { poses = await detector.estimatePoses(capture.elt); } function draw() { background(0,1); if (detector) { getPose(); } drawPoseInfo(); } function drawPoseInfo() { noStroke(); fill(255, 0, 0, 128); if (poses && poses.length > 0) { for (var i = 0; i < poses.length; i++) { for (var j = 0; j 0.1) { let posX = width-int(poses[i].keypoints[j].x); let posY = height-int(poses[i].keypoints[j].y); //circle(posX, posY, 10); } } } stroke(255); if (poses.length > 0) { let l = poses[0].keypoints.length; for (var j = 4; j 150){ line( int(poses[0].keypoints[i].x), int(poses[0].keypoints[i].y), int(poses[0].keypoints[j].x), int(poses[0].keypoints[j].y)); } } } } } } function keyPressed() { noLoop(); }