xxxxxxxxxx
142
// Based on https://kylemcdonald.github.io/cv-examples/
// original from Check https://github.com/auduno/clmtrackr
var capture;
var tracker;
var w = 640;
var h = 480;
var f1;
var f1_normal = 0.787886904501895;
var f1_smile = 1.0249522404310965;
var you_are_smiling = false;
function setup() {
capture = createCapture({
audio: false,
video: {
deviceId: '2dcd9cc7e0e39f10346178cd8d42ffcfd7c73fd05bb98d8562acba5c6b3e7ecf',
width: w,
height: h
}
}, function() {
console.log('success: capture ready.')
});
//capture.elt.setAttribute('playsinline', '');
createCanvas(w, h);
capture.size(w, h);
capture.hide();
tracker = new clm.tracker();
tracker.init();
tracker.start(capture.elt);
}
function draw() {
background(100);
if (you_are_smiling == true) {
image(capture, 0, 0, w, h);
} else {
}
var positions = tracker.getCurrentPosition();
noFill();
stroke(255);
strokeWeight(2);
if (positions.length > 0) {
// 輪郭
beginShape();
for (var i = 0; i <= 14; i++) {
vertex(positions[i][0], positions[i][1]);
}
endShape();
// 右の眉毛
beginShape();
for (var i = 15; i <= 18; i++) {
vertex(positions[i][0], positions[i][1]);
}
endShape();
// 左の眉毛
beginShape();
for (var i = 19; i <= 22; i++) {
vertex(positions[i][0], positions[i][1]);
}
endShape();
// 右目
var array = [28, 70, 31, 69, 30, 68, 29, 67];
beginShape();
for (var i = 0; i < array.length; i++) {
vertex(positions[array[i]][0], positions[array[i]][1]);
}
endShape(CLOSE);
// 左目
var array = [25, 65, 26, 66, 23, 63, 24, 64];
beginShape();
for (var i = 0; i < array.length; i++) {
vertex(positions[array[i]][0], positions[array[i]][1]);
}
endShape(CLOSE);
// 鼻筋
var array = [33, 41, 62];
beginShape();
for (var i = 0; i < array.length; i++) {
vertex(positions[array[i]][0], positions[array[i]][1]);
}
endShape(CLOSE);
// 鼻
var array = [34, 35, 36, 42, 37, 43, 38, 39, 40]
beginShape();
for (var i = 0; i < array.length; i++) {
vertex(positions[array[i]][0], positions[array[i]][1]);
}
endShape();
// 口
var array = [50, 49, 48, 47, 46, 45, 44, 61, 60, 59, 50, 58, 57, 56, 44, 55, 54, 53, 52, 51];
beginShape();
for (var i = 0; i < array.length; i++) {
vertex(positions[array[i]][0], positions[array[i]][1]);
}
endShape(CLOSE);
// 口の長さ
var length_mouth = dist(positions[44][0], positions[44][1],
positions[50][0], positions[50][1]);
var length_eyes = dist(positions[27][0], positions[27][1],
positions[32][0], positions[32][1]);
f1 = length_mouth / length_eyes;
var dn = sqrt(pow(f1 - f1_normal, 2));
var ds = sqrt(pow(f1 - f1_smile, 2));
if (ds < dn) {
textAlign(CENTER, CENTER);
textSize(48);
text("you are smiling!!", width / 2, height / 2);
you_are_smiling = true;
}
else{
you_are_smiling = false;
}
}
}