xxxxxxxxxx
52
// BodyPoseCamera (c) 2024 kouichi.matsuda@gmail.com
let bodyPose; // 姿勢推定器
let camera; // カメラ
let skelton;
function setup() {
createCanvas(640, 480);
camera = createCapture(VIDEO);
bodyPose = ml5.bodyPose(modelLoaded); // (1) 推定器の用意
camera.hide(); // 描画領域に表示するので隠す
}
function draw() {
}
function modelLoaded() {
bodyPose.detectStart(camera, onPose);
skelton = bodyPose.getSkeleton(); // 骨格情報の取り出し
}
function onPose(r) {
image(camera, 0, 0, width, height); // カメラ画像の表示
drawKeypoints(r); // キーポイントの描画
drawSkeleton(r); // 骨格の描画
}
function drawKeypoints(r){
for (let i = 0; i < r.length; i++) {
let pose = r[i];
for (let j = 0; j < pose.keypoints.length; j++) {
let kp = pose.keypoints[j];
if (kp.score < 0.1) continue;
ellipse(kp.x, kp.y, 8, 8);
}
}
}
function drawSkeleton(r) {
for (let i = 0; i < r.length; i += 1) {
let pose = r[i];
for (let j = 0; j < skelton.length; j += 1) {
let index_a = skelton[j][0]
let index_b = skelton[j][1]
let a = pose.keypoints[index_a]
let b = pose.keypoints[index_b]
if (a.score < 0.1 || a.score < 0.1) continue;
line(a.x, a.y, b.x, b.y);
}
}
}