var expressionNames = ['neutral', 'happy', 'sad', 'angry', 'surprised'];
var emojis = ['?', '?', '?', '?', '?'];
capture = createCapture(VIDEO, async () => {
await faceapi.loadSsdMobilenetv1Model('./');
await faceapi.loadFaceLandmarkModel('./');
await faceapi.loadFaceRecognitionModel('./');
await faceapi.loadFaceExpressionModel('./');
shockedEye = loadImage('surprise.png');
heartLeftEye = loadImage('happy.png');
angryLeftEye = loadImage('angry.png');
tearLeftEye = loadImage('tear.png');
heartRightEye = loadImage('happy_right.png');
angryRightEye = loadImage('angry_right.png');
tearRightEye = loadImage('tear_right.png');
async function getExpression(){
result = await faceapi.detectSingleFace(capture.elt).withFaceLandmarks().withFaceExpressions();
text('Wait for successful face detection...', 50, 550);
console.log(result.landmarks.getLeftEye());
image(capture, 0, 0, 640, 480);
text('Press m to show/hide landmarks', 50, 550);
var expressionNumber = detectExpression();
text(emojis[expressionNumber], 30, 70);
var leftEyeCenter = eyeCenter(result.landmarks.getLeftEye());
var rightEyeCenter = eyeCenter(result.landmarks.getRightEye());
if (expressionNumber == 1) {
image(heartLeftEye, leftEyeCenter._x - 25, leftEyeCenter._y - 25, 50, 50);
image(heartRightEye, rightEyeCenter._x - 25, rightEyeCenter._y - 25, 50, 50);
if (expressionNumber == 2) {
image(tearLeftEye, leftEyeCenter._x - 30, leftEyeCenter._y, 40, 100);
image(tearRightEye, rightEyeCenter._x - 10, rightEyeCenter._y, 40, 100);
if (expressionNumber == 3) {
image(angryLeftEye, leftEyeCenter._x - 125, leftEyeCenter._y - 40, 80, 80);
image(angryRightEye, rightEyeCenter._x + 45, rightEyeCenter._y - 40, 80, 80);
if (expressionNumber == 4) {
image(shockedEye, leftEyeCenter._x - 210, leftEyeCenter._y - 100, 240, 144);
image(shockedEye, rightEyeCenter._x - 210, rightEyeCenter._y - 100, 240, 144);
for (var i = 0; i < result.landmarks._positions.length; i++) {
var mark = result.landmarks._positions[i];
function detectExpression() {
var expressionNumber = 0;
for (var i = 0; i < 5; i++) {
if (result.expressions[expressionNames[i]] > probability) {
probability = result.expressions[expressionNames[i]];
function eyeCenter(eyeMarks) {
for (var i = 0; i < eyeMarks.length; i++) {
centerX += eyeMarks[i]._x;
centerY += eyeMarks[i]._y;
centerX /= eyeMarks.length;
centerY /= eyeMarks.length;
return {_x: centerX, _y: centerY};