Задача MediaPipe Image Embedder позволяет преобразовывать данные изображения в числовое представление для выполнения задач обработки изображений, связанных с машинным обучением, таких как сравнение сходства двух изображений. Эти инструкции покажут вам, как использовать Image Embedder с Python.
Дополнительные сведения о возможностях, моделях и параметрах конфигурации этой задачи см. в разделе Обзор .
Пример кода
В примере кода Image Embedder представлена полная реализация этой задачи на Python. Этот код поможет вам протестировать эту задачу и приступить к созданию собственного средства для внедрения изображений. Вы можете просматривать, запускать и редактировать пример кода Image Embedder, используя только веб-браузер с Google Colab. Посмотреть исходный код этого примера можно на GitHub .
Настраивать
В этом разделе описаны ключевые шаги по настройке среды разработки и проектов кода специально для использования Image Embedder. Общие сведения о настройке среды разработки для использования задач MediaPipe, включая требования к версии платформы, см. в руководстве по настройке Python .
Пакеты
Image Embedder задает пакет mediapipe pip. Вы можете установить зависимость следующим образом:
$ python -m pip install mediapipe
Импорт
Импортируйте следующие классы для доступа к функциям задачи Image Embedder:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Модель
Для задачи MediaPipe Image Embedder требуется обученная модель, совместимая с этой задачей. Дополнительную информацию о доступных обученных моделях для Image Embedder см. в разделе «Модели » обзора задач.
Выберите и загрузите модель, а затем сохраните ее в локальном каталоге. Вы можете использовать рекомендованную модель MobileNetV3 .
model_path = '/absolute/path/to/mobilenet_v3_small_075_224_embedder.tflite'
Укажите путь к модели в параметре model_asset_path
, как показано ниже:
base_options = BaseOptions(model_asset_path=model_path)
Создать задачу
Вы можете использовать функцию create_from_options
для создания задачи. Функция create_from_options
принимает параметры конфигурации для установки параметров внедрения. Дополнительные сведения о параметрах конфигурации см. в разделе Обзор конфигурации .
Задача Image Embedder поддерживает три типа входных данных: неподвижные изображения, видеофайлы и прямые видеопотоки. Выберите вкладку, соответствующую вашему типу входных данных, чтобы узнать, как создать задачу и выполнить вывод.
Изображение
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions ImageEmbedder = mp.tasks.vision.ImageEmbedder ImageEmbedderOptions = mp.tasks.vision.ImageEmbedderOptions VisionRunningMode = mp.tasks.vision.RunningMode options = ImageEmbedderOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), quantize=True, running_mode=VisionRunningMode.IMAGE) with ImageEmbedder.create_from_options(options) as embedder: # The embedder is initialized. Use it here. # ...
Видео
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions ImageEmbedder = mp.tasks.vision.ImageEmbedder ImageEmbedderOptions = mp.tasks.vision.ImageEmbedderOptions VisionRunningMode = mp.tasks.vision.RunningMode options = ImageEmbedderOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), quantize=True, running_mode=VisionRunningMode.VIDEO) with ImageEmbedder.create_from_options(options) as embedder: # The embedder is initialized. Use it here. # ...
Прямая трансляция
import mediapipe as mp BaseOptions = mp.tasks.BaseOptions ImageEmbedderResult = mp.tasks.vision.ImageEmbedder.ImageEmbedderResult ImageEmbedder = mp.tasks.vision.ImageEmbedder ImageEmbedderOptions = mp.tasks.vision.ImageEmbedderOptions VisionRunningMode = mp.tasks.vision.RunningMode def print_result(result: ImageEmbedderResult, output_image: mp.Image, timestamp_ms: int): print('ImageEmbedderResult result: {}'.format(result)) options = ImageEmbedderOptions( base_options=BaseOptions(model_asset_path='/path/to/model.tflite'), running_mode=VisionRunningMode.LIVE_STREAM, quantize=True, result_callback=print_result) with ImageEmbedder.create_from_options(options) as embedder: # The embedder is initialized. Use it here. # ...
Варианты конфигурации
Эта задача имеет следующие параметры конфигурации для приложений Python:
Название опции | Описание | Диапазон значений | Значение по умолчанию |
---|---|---|---|
running_mode | Устанавливает режим выполнения задачи. Есть три режима: ИЗОБРАЖЕНИЕ: Режим для ввода одного изображения. ВИДЕО: Режим декодированных кадров видео. LIVE_STREAM: режим прямой трансляции входных данных, например с камеры. В этом режиме необходимо вызвать resultListener, чтобы настроить прослушиватель на асинхронное получение результатов. | { IMAGE, VIDEO, LIVE_STREAM } | IMAGE |
l2_normalize | Нормализовать ли возвращенный вектор признаков по норме L2. Используйте эту опцию, только если модель еще не содержит встроенный L2_NORMALIZATION TFLite Op. В большинстве случаев это уже так, и нормализация L2, таким образом, достигается посредством вывода TFLite без необходимости использования этой опции. | Boolean | False |
quantize | Следует ли квантовать возвращенное внедрение в байты посредством скалярного квантования. Неявно предполагается, что вложения имеют единичную норму, и поэтому любое измерение гарантированно имеет значение в [-1.0, 1.0]. Если это не так, используйте опцию l2_normalize. | Boolean | False |
result_callback | Настраивает прослушиватель результатов на асинхронное получение результатов внедрения, когда Image Embedder находится в режиме прямого потока. Может использоваться только в том случае, если для режима работы установлено значение LIVE_STREAM | Н/Д | Не установлено |
Подготовьте данные
Подготовьте входные данные в виде файла изображения или массива numpy, а затем преобразуйте их в объект mediapipe.Image
. Если ваши входные данные представляют собой видеофайл или прямую трансляцию с веб-камеры, вы можете использовать внешнюю библиотеку, такую как OpenCV, для загрузки входных кадров в виде числовых массивов.
Изображение
import mediapipe as mp # Load the input image from an image file. mp_image = mp.Image.create_from_file('/path/to/image') # Load the input image from a numpy array. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_image)
Видео
import mediapipe as mp # Use OpenCV’s VideoCapture to load the input video. # Load the frame rate of the video using OpenCV’s CV_CAP_PROP_FPS # You’ll need it to calculate the timestamp for each frame. # Loop through each frame in the video using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Прямая трансляция
import mediapipe as mp # Use OpenCV’s VideoCapture to start capturing from the webcam. # Create a loop to read the latest frame from the camera using VideoCapture#read() # Convert the frame received from OpenCV to a MediaPipe’s Image object. mp_image = mp.Image(image_format=mp.ImageFormat.SRGB, data=numpy_frame_from_opencv)
Запустить задачу
Вы можете вызвать функцию внедрения, соответствующую вашему режиму работы, чтобы инициировать выводы. API Image Embedder вернет векторы внедрения для входного изображения или кадра.
Изображение
# Perform image embedding on the provided single image. embedding_result = embedder.embed(mp_image)
Видео
# Calculate the timestamp of the current frame frame_timestamp_ms = 1000 * frame_index / video_file_fps # Perform image embedding on the video frame. embedding_result = embedder.embed_for_video(mp_image, frame_timestamp_ms)
Прямая трансляция
# Send the latest frame to perform image embedding. # Results are sent to the `result_callback` provided in the `ImageEmbedderOptions`. embedder.embed_async(mp_image, frame_timestamp_ms)
Обратите внимание на следующее:
- При работе в режиме видео или режиме прямой трансляции вы также должны предоставить задаче Image Embedder временную метку входного кадра.
- При запуске изображения или видеомодели задача Image Embedder блокирует текущий поток до тех пор, пока он не завершит обработку входного изображения или кадра.
- При работе в режиме прямой трансляции задача Image Embedder не блокирует текущий поток, а немедленно возвращается. Он будет вызывать прослушиватель результатов с результатом внедрения каждый раз, когда завершает обработку входного кадра. Если функция
embedAsync
вызывается, когда задача Image Embedder занята обработкой другого кадра, задача игнорирует новый входной кадр.
Обработка и отображение результатов
После выполнения вывода задача 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.cosine_similarity
. См. следующий код для примера.
# Compute cosine similarity.
similarity = ImageEmbedder.cosine_similarity(
embedding_result.embeddings[0],
other_embedding_result.embeddings[0])