Руководство по классификации изображений для Интернета

Задача классификации изображений 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

Этот результат был получен путем запуска классификатора птиц на следующих объектах:

Фотография домового воробья крупным планом.

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