Guida all'incorporamento di immagini per Python

L'attività Incorporatore di immagini MediaPipe consente di convertire i dati immagine in una rappresentazione numerica per svolgere attività di elaborazione delle immagini correlate all'ML, come il confronto la somiglianza tra due immagini. Queste istruzioni mostrano come utilizzare Image Embedder con Python.

Per ulteriori informazioni su funzionalità, modelli e opzioni di configurazione di questa attività, consulta la Panoramica.

Esempio di codice

Il codice di esempio per Image Embedder fornisce un'implementazione completa un'attività in Python come riferimento. Questo codice ti consente di testare l'attività e ottenere a creare un incorporatore di immagini personalizzato. Puoi visualizzare, eseguire e modificare Esempio di incorporamento di immagini codice usando solo il browser web con Google Colab. Puoi visualizzare il codice sorgente questo esempio GitHub.

Configurazione

Questa sezione descrive i passaggi chiave per configurare l'ambiente di sviluppo e per i progetti di codice specifici per l'uso di Image Embedder. Per informazioni generali su configurare l'ambiente di sviluppo per l'utilizzo delle attività di MediaPipe, tra cui: i requisiti di versione della piattaforma, consulta la Guida alla configurazione per Python.

Pacchetti

L'opzione Embedder di immagini esegue l'attività relativa al pacchetto pip mediapipe. Puoi installare la dipendenza con quanto segue:

$ python -m pip install mediapipe

Importazioni

Importa le classi seguenti per accedere alle funzioni dell'attività Embedder di immagini:

import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision

Modello

L'attività Embedder di immagini MediaPipe richiede un modello addestrato che sia compatibile con dell'attività. Per ulteriori informazioni sui modelli addestrati disponibili per l'incorporamento di immagini, consulta la panoramica delle attività nella sezione Modelli.

Seleziona e scarica un modello, quindi archivialo in una directory locale. Puoi utilizzare i valori consigliati MobileNetV3 un modello di machine learning.

model_path = '/absolute/path/to/mobilenet_v3_small_075_224_embedder.tflite'

Specifica il percorso del modello all'interno del parametro model_asset_path, come mostrato di seguito:

base_options = BaseOptions(model_asset_path=model_path)

Crea l'attività

Puoi utilizzare la funzione create_from_options per creare l'attività. La La funzione create_from_options accetta le opzioni di configurazione per impostare l'incorporamento le opzioni di CPU e memoria disponibili. Per ulteriori informazioni sulle opzioni di configurazione, vedi Configurazione Panoramica.

L'attività Incorporatore di immagini supporta tre tipi di dati di input: immagini fisse e file video e video stream in diretta. Scegli la scheda corrispondente al tipo di dati di input a vedremo come creare l'attività ed eseguire l'inferenza.

Immagine

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.
  # ...
    

Video

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.
  # ...
    

Live streaming

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.
  # ...
    

Opzioni di configurazione

Questa attività include le seguenti opzioni di configurazione per le applicazioni Python:

Nome opzione Descrizione Intervallo di valori Valore predefinito
running_mode Imposta la modalità di esecuzione per l'attività. Esistono tre tipi di modalità:

IMAGE: la modalità per gli input di immagini singole.

VIDEO: la modalità per i fotogrammi decodificati di un video.

LIVE_STREAM: la modalità per un live streaming di input dati, ad esempio quelli di una videocamera. In questa modalità, resultListener deve essere per impostare un listener in modo che riceva risultati in modo asincrono.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
l2_normalize Indica se normalizzare il vettore di caratteristiche restituito con la norma L2. Utilizza questa opzione solo se il modello non contiene già un L2_NORMALIZZAZIONE TFLite Op. Nella maggior parte dei casi, questo è già il caso. La normalizzazione L2 viene quindi ottenuta attraverso l'inferenza TFLite senza necessità per questa opzione. Boolean False
quantize Indica se l'incorporamento restituito deve essere quantizzato in byte tramite quantizzazione scalare. Gli incorporamenti sono implicitamente considerati come norma unitaria. pertanto è garantito che qualsiasi dimensione abbia un valore pari a [-1,0, 1,0]. Utilizza le funzionalità di in caso contrario l'opzione l2_normalize. Boolean False
result_callback Imposta il listener di risultati in modo che riceva i risultati dell'incorporamento in modo asincrono quando l'incorporamento di immagini è nel live streaming . Può essere utilizzato solo quando la modalità di corsa è impostata su LIVE_STREAM N/D Non impostato

Preparazione dei dati

Prepara l'input come file immagine o array numpy, quindi convertilo in un mediapipe.Image oggetto. Se l'input è un file video o un live streaming da un webcam, puoi utilizzare una libreria esterna come OpenCV per caricare i frame di input come numpy di grandi dimensioni.

Immagine

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)
    

Video

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)
    

Live streaming

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)
    

Esegui l'attività

Puoi chiamare la funzione di incorporamento corrispondente alla tua modalità di corsa per attivare le inferenze. L'API Image Embedder restituirà i vettori di incorporamento per l'immagine o il frame di input.

Immagine

# Perform image embedding on the provided single image.
embedding_result = embedder.embed(mp_image)
    

Video

# 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)
    

Live streaming

# 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)
    

Tieni presente quanto segue:

  • Quando è attiva la modalità video o live streaming, devi anche fornisce all'attività Incorporatore di immagini il timestamp del frame di input.
  • Quando viene eseguita nel modello di immagine o video, l'attività Incorporatore di immagini bloccare il thread corrente finché non termina di elaborare l'immagine di input o frame.
  • Quando viene eseguita in modalità live streaming, l'attività Incorporatore di immagini non blocca il thread corrente, ma restituisce immediatamente. Richiamerà il suo risultato un listener con il risultato di incorporamento ogni volta che termina l'elaborazione di un frame di input. Se la funzione embedAsync viene chiamata quando l'incorporamento di immagini l'attività è impegnata a elaborare un altro frame, ignora il nuovo frame di input.

Gestire e visualizzare i risultati

Quando si esegue l'inferenza, l'attività Incorporatore di immagini restituisce un ImageEmbedderResult che contiene l'elenco delle possibili categorie per gli oggetti all'interno dell' o frame di input.

Di seguito è riportato un esempio dei dati di output di questa attività:

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

Questo risultato è stato ottenuto incorporando la seguente immagine:

Puoi confrontare la somiglianza tra due incorporamenti utilizzando Funzione ImageEmbedder.cosine_similarity. Consulta il seguente codice per esempio.

# Compute cosine similarity.
similarity = ImageEmbedder.cosine_similarity(
  embedding_result.embeddings[0],
  other_embedding_result.embeddings[0])