Задача MediaPipe Object Detector позволяет определять наличие и местоположение объектов различных классов. Эта задача принимает данные изображения и выдает список результатов обнаружения, каждый из которых представляет собой объект, идентифицированный на изображении. Вы можете просмотреть, запустить и отредактировать пример Object Detector, используя только веб-браузер.
Для получения более подробной информации о возможностях, моделях и параметрах конфигурации этой задачи см. раздел «Обзор» .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки специально для использования Object Detector. Общую информацию о настройке среды разработки веб-приложений и JavaScript, включая требования к версиям платформы, см. в руководстве по настройке веб-приложений .
пакеты JavaScript
Код детектора объектов доступен через NPM- пакет MediaPipe @mediapipe/tasks-vision . Вы можете найти и загрузить эти библиотеки, следуя инструкциям в руководстве по настройке платформы.
Необходимые пакеты можно установить через NPM, используя следующую команду:
npm install @mediapipe/tasks-vision
Если вы хотите импортировать код задачи через службу сети доставки контента (CDN), добавьте следующий код в тег <head> вашего 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/
Создайте задачу
Используйте одну из функций ObjectDetector.createFrom...() из библиотеки ObjectDetector для подготовки задачи к выполнению выводов. Используйте функцию createFromModelPath() с относительным или абсолютным путем к файлу обученной модели. Если ваша модель уже загружена в память, вы можете использовать метод createFromModelBuffer() . Приведенный ниже пример кода демонстрирует использование функции createFromOptions() , которая позволяет задать дополнительные параметры конфигурации. Для получения дополнительной информации о доступных параметрах конфигурации см. раздел «Параметры конфигурации» .
Следующий код демонстрирует, как собрать и настроить эту задачу:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
objectDetector = await ObjectDetector.createFromOptions(vision, {
baseOptions: {
modelAssetPath: `https://storage.googleapis.com/mediapipe-tasks/object_detector/efficientdet_lite0_uint8.tflite`
},
scoreThreshold: 0.5,
runningMode: runningMode
});
Более подробную информацию о создании задачи обнаружения объектов см. в примере кода .
Параметры конфигурации
Данная задача имеет следующие параметры конфигурации для веб-приложений:
| Название варианта | Описание | Диапазон значений | Значение по умолчанию |
|---|---|---|---|
runningMode | Задает режим выполнения задачи. Доступны два режима: ИЗОБРАЖЕНИЕ: Режим для ввода одного изображения. ВИДЕО: Режим декодирования кадров видео или потока входных данных в реальном времени, например, с камеры. | { IMAGE, VIDEO } | IMAGE |
displayNamesLocale | Задает язык меток, используемых для отображаемых имен, указанных в метаданных модели задачи, если таковые имеются. По умолчанию используется английский en ). Вы можете добавить локализованные метки в метаданные пользовательской модели, используя API TensorFlow Lite Metadata Writer. | Код локали | эн |
maxResults | Устанавливает необязательное максимальное количество возвращаемых результатов обнаружения с наивысшим баллом. | Любые положительные числа | -1 (возвращаются все результаты) |
scoreThreshold | Устанавливает пороговое значение прогнозируемой оценки, которое переопределяет значение, указанное в метаданных модели (если таковые имеются). Результаты ниже этого значения отклоняются. | Любой плавучий объект | Не задано |
categoryAllowlist | Задает необязательный список разрешенных названий категорий. Если список не пуст, результаты обнаружения, названия категорий которых отсутствуют в этом наборе, будут отфильтрованы. Дублирующиеся или неизвестные названия категорий игнорируются. Этот параметр взаимоисключающий с categoryDenylist , и использование обоих приводит к ошибке. | Любые строки | Не задано |
categoryDenylist | Задает необязательный список запрещенных названий категорий. Если список не пуст, результаты обнаружения, названия категорий которых присутствуют в этом наборе, будут отфильтрованы. Повторяющиеся или неизвестные названия категорий игнорируются. Этот параметр взаимоисключающий с categoryAllowlist , и использование обоих приводит к ошибке. | Любые строки | Не задано |
Подготовка данных
Object Detector может обнаруживать объекты на изображениях любого формата, поддерживаемого браузером. Задача также обрабатывает входные данные, включая изменение размера, поворот и нормализацию значений. Для обнаружения объектов в видео можно использовать API для быстрой обработки каждого кадра по отдельности, используя метку времени кадра для определения момента появления жестов в видео.
Запустите задачу
Детектор объектов использует detect() для работы с отдельными изображениями, а функцию detectForVideo() — для обнаружения объектов в видеокадрах. Задача обрабатывает данные, пытается распознать объекты, а затем сообщает о результатах.
Вызовы методов detect() и detectForVideo() выполняются синхронно и блокируют поток пользовательского интерфейса. Если вы распознаете объекты в видеокадрах с камеры устройства, каждая классификация блокирует основной поток. Этого можно избежать, реализовав веб-воркеры для выполнения обнаружения в отдельном потоке.
Следующий код демонстрирует, как выполнить обработку с использованием модели задач:
Изображение
const image = document.getElementById("image") as HTMLImageElement; const detections = objectDetector.detect(image);
Видео
await objectDetector.setOptions({ runningMode: "video" }); let lastVideoTime = -1; function renderLoop(): void { const video = document.getElementById("video"); if (video.currentTime !== lastVideoTime) { const detections = detector.detectForVideo(video); processResults(detections); lastVideoTime = video.currentTime; } requestAnimationFrame(() => { renderLoop(); }); }
Более подробную информацию о реализации задачи обнаружения объектов см. в примере кода .
Обработка и отображение результатов
Детектор объектов генерирует объект результатов обнаружения для каждого запуска обнаружения. Объект результатов содержит список обнаруженных объектов, где каждое обнаружение включает ограничивающую рамку и информацию о категории обнаруженного объекта, включая название объекта и оценку достоверности.
Ниже приведён пример выходных данных, полученных в результате выполнения этой задачи:
ObjectDetectorResult:
Detection #0:
Box: (x: 355, y: 133, w: 190, h: 206)
Categories:
index : 17
score : 0.73828
class name : dog
Detection #1:
Box: (x: 103, y: 15, w: 138, h: 369)
Categories:
index : 17
score : 0.73047
class name : dog
На следующем изображении представлена визуализация результатов выполнения задачи:

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