Для работы с библиотекой ml5.js в проекте необходимо подключить саму библиотеку. Самый простой способ — использовать CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/ml5/0.12.2/ml5.min.js"></script>
Библиотека ml5.js строится поверх TensorFlow.js, поэтому её возможности тесно связаны с ней. Для корректной работы не требуется отдельная установка TensorFlow.js, так как ml5.js автоматически включает необходимый функционал.
В ml5.js используется модель FaceApi, которая позволяет работать с распознаванием лиц, определением эмоций, пола и возраста. Основные возможности модели:
Для загрузки модели используется следующий синтаксис:
const faceApiOptions = {
withLandmarks: true,
withDescriptors: false,
withExpressions: true
};
const faceapi = ml5.faceApi(videoElement, faceApiOptions, modelReady);
Здесь videoElement — элемент <video>
на странице, через который будет поступать изображение. Функция
modelReady вызывается после успешной загрузки модели.
Для определения возраста и пола модель может работать с:
Пример подключения камеры:
const video = document.getElementById('videoInput');
navigator.mediaDevices.getUserMedia({ video: {} })
.then(stream => {
video.srcObject = stream;
video.play();
});
После начала воспроизведения видео можно передавать кадры в модель FaceApi для анализа.
Для получения данных о возрасте и поле используется метод
detectSingle или detect, в зависимости от
того, обрабатывается одно лицо или несколько:
function detectFace() {
faceapi.detectSingle(video, (err, result) => {
if (err) {
console.error(err);
return;
}
if (result) {
const { age, gender, genderProbability } = result;
console.log(`Возраст: ${age.toFixed(0)}, Пол: ${gender}, Уверенность: ${genderProbability.toFixed(2)}`);
}
requestAnimationFrame(detectFace);
});
}
Ключевые моменты:
age возвращается в виде числа с десятичной частью,
рекомендуется округлять.gender принимает значения "male" или
"female".genderProbability показывает уверенность модели в
предсказании пола (от 0 до 1).FaceApi позволяет гибко настраивать параметры для улучшения точности:
withLandmarks — определяет наличие точек лица (для
дальнейшей визуализации).withExpressions — включает предсказание эмоций.inputSize — размер входного изображения, влияет на
скорость и точность. Большие изображения дают более точные результаты,
но требуют больше ресурсов.Пример:
const options = {
withLandmarks: true,
withExpressions: false,
inputSize: 224
};
const faceapi = ml5.faceApi(video, options, modelReady);
Для отображения результатов на экране используется
<canvas>, совмещённый с видео:
function drawBox(result) {
const canvas = document.getElementById('overlay');
const context = canvas.getContext('2d');
canvas.width = video.width;
canvas.height = video.height;
context.clearRect(0, 0, canvas.width, canvas.height);
if (result) {
const { alignedRect, age, gender } = result;
const { _x, _y, _width, _height } = alignedRect._box;
context.strokeStyle = 'red';
context.lineWidth = 2;
context.strokeRect(_x, _y, _width, _height);
context.fillStyle = 'red';
context.font = '16px Arial';
context.fillText(`Возраст: ${age.toFixed(0)}`, _x, _y - 20);
context.fillText(`Пол: ${gender}`, _x, _y - 5);
}
}
video.width
и video.height) для ускорения обработки.requestAnimationFrame вместо таймера для
синхронизации с рендерингом браузера.Для распознавания нескольких лиц используется метод
detect:
faceapi.detect(video, (err, results) => {
if (results) {
results.forEach(result => drawBox(result));
}
requestAnimationFrame(() => faceapi.detect(video, arguments.callee));
});
В results содержится массив объектов с информацией о
возрасте, поле, эмоциях и расположении каждого лица.
FaceApi в ml5.js требует браузеры с поддержкой:
getUserMedia)const,
let)Для мобильных устройств рекомендуется уменьшать
inputSize для ускорения анализа без значительной потери
точности.
genderProbability) стоит
использовать для фильтрации сомнительных результатов.ml5.js позволяет комбинировать FaceApi с другими моделями, например:
Такое сочетание открывает возможности для интерактивных приложений, например, динамическая адаптация интерфейса по возрасту или полу пользователя.