Библиотека ml5.js предоставляет высокоуровневый интерфейс для работы с машинным обучением в браузере на JavaScript. Одной из ключевых возможностей при работе с моделями распознавания изображений является фильтрация классов объектов, то есть выборка только тех категорий, которые интересуют для дальнейшего анализа или отображения.
В контексте ml5.js под классом объекта понимается
метка, присваиваемая модели распознавания изображения для конкретного
объекта на изображении. Модель, например ImageClassifier,
при обработке изображения возвращает массив объектов с информацией:
label — название класса (например, “кошка”, “стул”,
“машина”).confidence — вероятность принадлежности к данному
классу (число от 0 до 1).Пример структуры результата классификации:
[
{ label: "кошка", confidence: 0.92 },
{ label: "собака", confidence: 0.05 },
{ label: "стол", confidence: 0.03 }
]
Фильтрация классов позволяет ограничить работу только выбранными категориями, игнорируя все остальные.
Для начала работы создается экземпляр классификатора:
const classifier = ml5.imageClassifier('MobileNet', modelLoaded);
function modelLoaded() {
console.log('Модель загружена');
}
MobileNet — предобученная модель, способная распознавать
более 1000 категорий объектов.
Фильтрация классов объектов реализуется двумя основными способами:
Фильтрация по названию класса Позволяет оставить
только интересующие метки. Для этого используется метод
filter массива результатов:
classifier.classify(image, (err, results) => {
if (err) {
console.error(err);
return;
}
const filteredResults = results.filter(item =>
item.label === "кошка" || item.label === "собака"
);
console.log(filteredResults);
});
В данном примере сохраняются только объекты класса “кошка” и “собака”.
Фильтрация по порогу уверенности Иногда важно исключить объекты с низкой вероятностью распознавания:
const threshold = 0.7;
const confidentResults = results.filter(item => item.confidence >= threshold);
console.log(confidentResults);
Этот подход позволяет минимизировать ложные срабатывания и работать только с надежными предсказаниями.
На практике чаще используется комбинация фильтрации по классу и вероятности. Это позволяет создавать точные и надежные системы распознавания:
const selectedClasses = ["кошка", "собака"];
const confidenceThreshold = 0.8;
const finalResults = results.filter(item =>
selectedClasses.includes(item.label) && item.confidence >= confidenceThreshold
);
console.log(finalResults);
Для видео-потоков или камер фильтрация осуществляется в цикле
draw или при обработке кадра из видео:
function classifyVideoFrame() {
classifier.classify(video, (err, results) => {
if (err) {
console.error(err);
return;
}
const filtered = results.filter(item =>
item.label === "человек" && item.confidence >= 0.85
);
if (filtered.length > 0) {
console.log("Обнаружен человек:", filtered[0]);
}
requestAnimationFrame(classifyVideoFrame);
});
}
classifyVideoFrame();
Такой подход позволяет строить системы мониторинга объектов, где важны только определенные классы с высокой точностью распознавания.
requestAnimationFrame для плавной визуализации.Фильтрация классов объектов является фундаментальной техникой при построении систем распознавания изображений в браузере, позволяя управлять точностью, скоростью и направленностью анализа данных.