Задача классификации изображений MediaPipe позволяет выполнять классификацию изображений. С помощью этой задачи можно определить, что представляет собой изображение, используя набор категорий, заданных во время обучения. В этих инструкциях показано, как использовать классификатор изображений для Node.js и веб-приложений.
Вы можете увидеть эту задачу в действии, посмотрев демонстрацию . Для получения дополнительной информации о возможностях, моделях и параметрах конфигурации этой задачи см. раздел «Обзор» .
Пример кода
Пример кода для классификатора изображений представляет собой полную реализацию этой задачи на JavaScript для вашего ознакомления. Этот код поможет вам протестировать задачу и начать создавать собственное приложение для классификации изображений. Вы можете просматривать, запускать и редактировать пример классификатора изображений, используя только веб-браузер.
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования Image Classifier. Общую информацию о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для веб-версии .
пакеты JavaScript
Код классификатора изображений доступен через NPM- пакет MediaPipe @mediapipe/tasks-vision . Вы можете найти и загрузить эти библиотеки по ссылкам, указанным в руководстве по настройке платформы.
Для локальной установки необходимых пакетов используйте следующий код, выполнив следующую команду:
npm install @mediapipe/tasks-vision
Если вы хотите импортировать код задачи через службу сети доставки контента (CDN), добавьте следующий код в файл.
тег в вашем HTML-файле:<!-- You can replace JSDeliver with another CDN if you prefer to -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
crossorigin="anonymous"></script>
</head>
Модель
Для решения задачи классификации изображений MediaPipe требуется обученная модель, совместимая с данной задачей. Дополнительную информацию о доступных обученных моделях для классификации изображений см. в разделе «Модели» обзора задачи.
Выберите и скачайте модель, а затем сохраните её в каталоге вашего проекта:
<dev-project-root>/app/shared/models/
Создайте задачу
Используйте одну из функций createFrom...() класса Image Classifier для подготовки задачи к выполнению выводов. Используйте функцию createFromModelPath() с относительным или абсолютным путем к файлу обученной модели. Если ваша модель уже загружена в память, вы можете использовать метод createFromModelBuffer() .
Приведённый ниже пример кода демонстрирует использование функции createFromOptions() для настройки задачи. Функция createFromOptions позволяет настраивать классификатор изображений с помощью параметров конфигурации. Дополнительную информацию о параметрах конфигурации см. в разделе «Параметры конфигурации» .
Приведенный ниже код демонстрирует, как создать и настроить задачу с пользовательскими параметрами:
async function createImageClassifier {
const vision = await FilesetResolver.forVisionTasks(
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@0.10.0/wasm"
);
imageClassifier = await ImageClassifier.createFromOptions(vision, {
baseOptions: {
modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_classifier/efficientnet_lite0/float32/1/efficientnet_lite0.tflite`
},
});
}
Параметры конфигурации
Данная задача имеет следующие параметры конфигурации для веб-приложений:
| Название варианта | Описание | Диапазон значений | Значение по умолчанию |
|---|---|---|---|
runningMode | Задает режим выполнения задачи. Доступны два режима: ИЗОБРАЖЕНИЕ: Режим для ввода одного изображения. ВИДЕО: Режим декодирования кадров видео или потока входных данных в реальном времени, например, с камеры. | { IMAGE, VIDEO } | IMAGE |
displayNamesLocale | Задает язык меток, используемых для отображаемых имен, указанных в метаданных модели задачи, если таковые имеются. По умолчанию используется английский en ). Вы можете добавить локализованные метки в метаданные пользовательской модели, используя API TensorFlow Lite Metadata Writer. | Код локали | эн |
maxResults | Задает необязательное максимальное количество возвращаемых результатов классификации с наивысшим баллом. Если < 0, будут возвращены все доступные результаты. | Любые положительные числа | -1 |
scoreThreshold | Устанавливает пороговое значение прогнозируемой оценки, которое переопределяет значение, указанное в метаданных модели (если таковые имеются). Результаты ниже этого значения отклоняются. | Любой плавучий объект | Не задано |
categoryAllowlist | Задает необязательный список разрешенных названий категорий. Если список не пуст, результаты классификации, названия категорий которых отсутствуют в этом наборе, будут отфильтрованы. Дублирующиеся или неизвестные названия категорий игнорируются. Этот параметр взаимоисключающий с categoryDenylist , и использование обоих приводит к ошибке. | Любые строки | Не задано |
categoryDenylist | Задает необязательный список запрещенных названий категорий. Если список не пуст, результаты классификации, названия категорий которых присутствуют в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Этот параметр взаимоисключающий с categoryAllowlist , и использование обоих приводит к ошибке. | Любые строки | Не задано |
resultListener | Настраивает обработчик результатов для асинхронного получения результатов классификации, когда классификатор изображений находится в режиме прямой трансляции. Может использоваться только в том случае, если для параметра режима работы установлено значение LIVE_STREAM | Н/Д | Не задано |
Подготовка данных
Классификатор изображений может классифицировать объекты на изображениях в любом формате, поддерживаемом браузером. Задача также включает предварительную обработку входных данных, включая изменение размера, поворот и нормализацию значений.
Вызовы методов classify() и classifyForVideo() класса Image Classifier выполняются синхронно и блокируют поток пользовательского интерфейса. Если вы классифицируете объекты в видеокадрах с камеры устройства, каждая классификация будет блокировать основной поток. Этого можно избежать, реализовав веб-воркеры, которые будут запускать classify() и classifyForVideo() в отдельном потоке.
Запустите задачу
Классификатор изображений использует метод classify() в режиме изображения и метод classifyForVideo() в режиме video для запуска вывода результатов. API классификатора изображений возвращает возможные категории для объектов на входном изображении.
Следующий код демонстрирует, как выполнить обработку с использованием модели задач:
Изображение
const image = document.getElementById("image") as HTMLImageElement; const imageClassifierResult = imageClassifier.classify(image);
Видео
const video = document.getElementById("video"); await imageClassifier.setOptions({ runningMode: "VIDEO" }); const timestamp = performance.now(); const classificationResult = await imageClassifier.classifyForVideo( video, timestamp );
Более полную реализацию задачи классификации изображений см. в примере .
Обработка и отображение результатов
После выполнения процедуры распознавания объектов задача классификации изображений возвращает объект ImageClassifierResult , содержащий список возможных категорий для объектов на входном изображении или в кадре.
Ниже приведён пример выходных данных, полученных в результате выполнения этой задачи:
ImageClassifierResult:
Classifications #0 (single classification head):
head index: 0
category #0:
category name: "/m/01bwb9"
display name: "Passer domesticus"
score: 0.91406
index: 671
category #1:
category name: "/m/01bwbt"
display name: "Passer montanus"
score: 0.00391
index: 670
Этот результат был получен путем запуска классификатора птиц на следующих объектах:

Пример кода классификатора изображений демонстрирует, как отобразить результаты классификации, полученные в результате выполнения задачи; подробности см. в примере .