Задача MediaPipe Image Embedder позволяет преобразовывать данные изображения в числовое представление для выполнения задач обработки изображений, связанных с машинным обучением, например, для сравнения сходства двух изображений. В этих инструкциях показано, как использовать Image Embedder для Node и веб-приложений.
Для получения более подробной информации о возможностях, моделях и параметрах конфигурации этой задачи см. раздел «Обзор» .
Пример кода
Пример кода для Image Embedder представляет собой полную реализацию этой задачи на JavaScript для вашего ознакомления. Этот код поможет вам протестировать задачу и начать создавать собственное приложение для встраивания изображений. Вы можете просматривать, запускать и редактировать пример Image Embedder, используя только веб-браузер.
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования Image Embedder. Общую информацию о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке для веб-версии .
пакеты JavaScript
Код для встраивания изображений доступен через NPM- пакет MediaPipe @mediapipe/tasks-vision . Вы можете найти и загрузить эти библиотеки по ссылкам, указанным в руководстве по настройке платформы.
Для локальной установки необходимых пакетов используйте следующий код, выполнив следующую команду:
npm install @mediapipe/tasks-vision
Если вы хотите импортировать код задачи через службу сети доставки контента (CDN), добавьте следующий код в файл.
тег в вашем HTML-файле:<!-- You can replace jsDelivr with your preferred CDN -->
<head>
<script src="https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision/vision_bundle.mjs"
crossorigin="anonymous"></script>
</head>
Модель
Для выполнения задачи MediaPipe Image Embedder требуется обученная модель, совместимая с данной задачей. Дополнительную информацию о доступных обученных моделях для Image Embedder см. в разделе «Модели» обзора задачи.
Выберите и скачайте модель, а затем сохраните её в каталоге вашего проекта:
<dev-project-root>/app/shared/models/
Создайте задачу
Укажите путь к модели
Вы можете создать задачу с параметрами по умолчанию, используя метод createFromModelPath() :
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = await ImageEmbedder.createFromOptions(vision, {
baseOptions: {
modelAssetPath: `https://storage.googleapis.com/mediapipe-models/image_embedder/mobilenet_v3_small/float32/1/mobilenet_v3_small.tflite`
},
});
Укажите буфер модели
Если ваша модель уже загружена в память, вы можете использовать метод createFromModelBuffer() :
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = ImageEmbedder.createFromModelBuffer(
vision,
new Uint8Array(...)
);
Укажите пользовательские параметры
Задача MediaPipe Image Embedder использует функцию createFromOptions для настройки задачи. Функция createFromOptions принимает значения для параметров конфигурации. Дополнительную информацию о параметрах конфигурации см. в разделе «Параметры конфигурации» .
Приведенный ниже код демонстрирует, как создать и настроить задачу с пользовательскими параметрами:
const vision = await FilesetResolver.forVisionTasks(
// path/to/wasm/root
"https://cdn.jsdelivr.net/npm/@mediapipe/tasks-vision@latest/wasm"
);
const imageEmbedder = await ImageEmbedder.createFromOptions(
vision,
{
baseOptions: {
modelAssetPath: "model.tflite"
},
quantize: true
});
Параметры конфигурации
Данная задача имеет следующие параметры конфигурации для веб-приложений:
| Название варианта | Описание | Диапазон значений | Значение по умолчанию |
|---|---|---|---|
running_mode | Задает режим выполнения задачи. Доступны два режима: ИЗОБРАЖЕНИЕ: Режим для ввода одного изображения. ВИДЕО: Режим декодирования кадров видео или потока входных данных в реальном времени, например, с камеры. | { IMAGE, VIDEO } | IMAGE |
l2Normalize | Следует ли нормализовать возвращаемый вектор признаков с помощью L2-нормы. Используйте этот параметр только в том случае, если модель еще не содержит встроенную операцию TFLite L2_NORMALIZATION. В большинстве случаев это уже так, и L2-нормализация, таким образом, достигается посредством вывода TFLite без необходимости использования этого параметра. | Boolean | False |
quantize | Следует ли квантовать возвращаемое векторное представление в байты с помощью скалярного квантования. Предполагается, что векторные представления имеют единичную норму, поэтому гарантируется, что любое измерение будет иметь значение в диапазоне [-1.0, 1.0]. Если это не так, используйте опцию l2Normalize. | Boolean | False |
Подготовка данных
Image Embedder может встраивать изображения в любом формате, поддерживаемом браузером. Задача также обрабатывает предварительную обработку входных данных, включая изменение размера, поворот и нормализацию значений.
Вызовы методов embed() и embedForVideo() модуля Image Embedder выполняются синхронно и блокируют поток пользовательского интерфейса. Если вы хотите извлечь векторные признаки из видеокадров, каждое встраивание будет блокировать основной поток. Этого можно избежать, реализовав веб-воркеры для выполнения методов embed() и embedForVideo() в отдельном потоке.
Запустите задачу
Компонент Image Embedder использует методы embed() (для image в режиме реального времени) и embedForVideo() (для video в режиме реального времени) для запуска вывода данных. API Image Embedder возвращает векторы встраивания для входного изображения.
Следующий код демонстрирует, как выполнить обработку с использованием модели задач:
Изображение
const image = document.getElementById("image") as HTMLImageElement; const imageEmbedderResult = imageEmbedder.embed(image);
Видео
const video = document.getElementById("webcam"); const startTimeMs = performance.now(); const embedderResult = await imageEmbedder.embedForVideo(video, startTimeMs);
Обработка и отображение результатов
После выполнения операции вывода задача Image Embedder возвращает объект ImageEmbedderResult , содержащий векторы встраивания для входного изображения или кадра.
Ниже приведён пример выходных данных, полученных в результате выполнения этой задачи:
ImageEmbedderResult:
Embedding #0 (sole embedding head):
float_embedding: {0.0, 0.0, ..., 0.0, 1.0, 0.0, 0.0, 2.0}
head_index: 0
Этот результат был получен путем встраивания следующего изображения:

Вы можете сравнить семантическое сходство двух векторных представлений, используя функцию ImageEmbedder.cosineSimilarity . Пример приведен в следующем коде.
// Compute cosine similarity.
const similarity = ImageEmbedder.cosineSimilarity(
imageEmbedderResult.embeddings[0],
otherEmbedderResult.embeddings[0]);
Пример кода Image Embedder демонстрирует, как отобразить результаты встраивания изображений, полученные в результате выполнения задачи; подробности см. в примере .