Библиотека ml5.js предоставляет высокоуровневый интерфейс для работы с моделями машинного обучения в браузере. Одним из удобных способов создания собственного классификатора является использование Teachable Machine, который позволяет обучать модели без глубоких знаний в области машинного обучения и экспортировать их для работы в JavaScript.
Для начала работы необходимо подключить библиотеку ml5.js через CDN:
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.7.0/p5.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ml5/2.3.0/ml5.min.js"></script>
p5.js используется для упрощения работы с графикой и
мультимедиа, что тесно связано с задачами классификации изображений,
звуков и видео.
После обучения модели в Teachable Machine необходимо экспортировать её в формате, подходящем для веб-приложений. В интерфейсе Teachable Machine доступна опция «Export Model → Upload», после чего появляется ссылка на JSON-модель и веса, которые можно подключить к ml5.js.
Пример структуры экспорта:
model.json
metadata.json
weights.bin
Эти файлы размещаются на сервере или локально для загрузки через JavaScript.
В ml5.js используется функция imageClassifier для работы
с изображениями. Поддерживается загрузка модели через URL:
let classifier;
function preload() {
classifier = ml5.imageClassifier('https://your-server.com/model/model.json');
}
Использование preload() из p5.js гарантирует, что модель
будет загружена до начала выполнения основного кода.
Для работы с камерой подключается объект
createCapture:
let video;
function setup() {
createCanvas(640, 480);
video = createCapture(VIDEO);
video.hide();
}
function draw() {
image(video, 0, 0);
classifier.classify(video, gotResult);
}
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
console.log(results);
}
Особенности работы:
classify асинхронный, возвращает результаты через
колбэк.results содержит массив объектов с полями
label и confidence, где label —
имя класса, confidence — вероятность принадлежности
изображения к классу.Для улучшения качества классификации полезно использовать порог уверенности:
const threshold = 0.8;
function gotResult(error, results) {
if (error) {
console.error(error);
return;
}
const topResult = results[0];
if (topResult.confidence > threshold) {
console.log(`Определён класс: ${topResult.label}`);
} else {
console.log('Неопределённый класс');
}
}
Такой подход позволяет игнорировать маловероятные предсказания и повышает надежность работы системы в реальном времени.
Классификатор можно использовать не только с видеопотоком, но и с загруженными изображениями:
const inputImage = document.getElementById('inputImage');
inputImage.addEventListener('change', (event) => {
const file = event.target.files[0];
const img = createImg(URL.createObjectURL(file), () => {
classifier.classify(img, (error, results) => {
if (error) console.error(error);
else console.log(results);
});
});
});
Ключевые моменты:
createImg из p5.js упрощает работу с
DOM-изображениями.URL.createObjectURL позволяет загружать
локальные файлы без сервера.Можно использовать результаты классификации для управления интерфейсом. Например, изменение цвета фона в зависимости от распознанного объекта:
function gotResult(error, results) {
if (error) return console.error(error);
const label = results[0].label;
switch (label) {
case 'Кошка':
background(255, 200, 200);
break;
case 'Собака':
background(200, 255, 200);
break;
default:
background(220);
}
}
Такой подход делает классификатор интерактивным и позволяет создавать визуальные или аудио реакции на распознанные объекты.
После обучения и настройки модель Teachable Machine может быть переиспользована в других проектах:
Для повышения скорости работы в браузере можно:
createCapture(VIDEO, { width: 320, height: 240 }).setInterval.Это особенно важно при интеграции с веб-страницами, где видеопоток и обработка изображений могут занимать значительные ресурсы.
ml5.js поддерживает классификацию не только изображений, но и аудио и
текста. Для аудиоклассификации используется
soundClassifier, а для текста —
textClassifier. Принцип работы аналогичен: загрузка модели,
асинхронное предсказание и обработка результатов.
Этот подход позволяет создавать полностью интерактивные приложения с собственными моделями классификации, используя Teachable Machine для обучения и ml5.js для интеграции в веб-среду.