Библиотека ml5.js предоставляет высокоуровневый доступ к моделям машинного обучения в браузере, включая работу с распознаванием лиц и анализом их структуры. Один из ключевых компонентов — обнаружение и отслеживание ключевых точек лица (facial landmarks). Эти точки представляют собой координаты основных элементов лица: глаз, носа, рта, бровей и контуров лица.
В ml5.js для определения ключевых точек лица используется модель FaceApi, основанная на MediaPipe и TensorFlow.js. Она позволяет:
Пример подключения модели:
let faceapi;
let video;
let detections = [];
const detectionOptions = {
withLandmarks: true,
withDescriptors: false
};
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.size(width, height);
video.hide();
faceapi = ml5.faceApi(video, detectionOptions, modelReady);
}
function modelReady() {
console.log('FaceAPI модель загружена');
faceapi.detect(gotResults);
}
function gotResults(err, result) {
if (err) {
console.error(err);
return;
}
detections = result;
faceapi.detect(gotResults);
}
Результат обнаружения лица представляет собой массив объектов, каждый из которых содержит:
alignedRect — координаты ограничивающего прямоугольника лица.
landmarks — координаты ключевых точек лица:
positions — массив объектов { _x, _y },
каждая точка соответствует элементу лица.expressions (если включено) — вероятности различных эмоций (улыбка, грусть, удивление и др.).
Пример получения координат ключевых точек:
if (detections.length > 0) {
const points = detections[0].landmarks.positions;
points.forEach(pt => {
ellipse(pt._x, pt._y, 4, 4);
});
}
Ключевые точки удобно визуализировать для анализа положения и выражения лица. Можно выделять отдельные группы точек:
function drawLandmarks(points) {
noFill();
stroke(0, 255, 0);
strokeWeight(2);
// Рисуем контур лица
beginShape();
for (let i = 0; i <= 16; i++) {
vertex(points[i]._x, points[i]._y);
}
endShape();
// Рисуем глаза
beginShape();
for (let i = 36; i <= 41; i++) {
vertex(points[i]._x, points[i]._y);
}
endShape(CLOSE);
}
requestAnimationFrame для синхронизации
детекции с рендерингом.Ключевые точки лица в ml5.js открывают широкие возможности для интерактивных веб-приложений, анализа поведения и создания эффектов дополненной реальности, при этом оставаясь удобным инструментом для разработчиков, работающих напрямую в браузере.