Mit der Aufgabe „MediaPipe Image Embedder“ können Sie Bilddaten in eine numerische Darstellung konvertieren um ML-bezogene Bildverarbeitungsaufgaben zu erledigen, z. B. den Vergleich der Ähnlichkeit von zwei Bildern. In dieser Anleitung erfahren Sie, wie Sie die Image Embedder mit Python verwenden.
Weitere Informationen zu Funktionen, Modellen und Konfigurationsoptionen Sehen Sie sich die Übersicht an.
Codebeispiel
Der Beispielcode für den Bildeinbetter bietet eine vollständige Implementierung dieses in Python. Dieser Code hilft Ihnen, diese Aufgabe zu testen und mit dem Erstellen eines eigenen Bildeinbetters begonnen. Sie können den Bereich Beispiel für den Bildeinbetter Code mit Google Colab in Ihrem Webbrowser. Sie können den Quellcode für dieses Beispiel auf GitHub
Einrichtung
In diesem Abschnitt werden die wichtigsten Schritte zum Einrichten Ihrer Entwicklungsumgebung und Codeprojekte für die Verwendung von Bildeinbetter erstellen. Allgemeine Informationen zu Einrichten Ihrer Entwicklungsumgebung für die Verwendung von MediaPipe-Aufgaben, einschließlich Anforderungen an die Plattformversion finden Sie im Einrichtungsleitfaden für Python.
<ph type="x-smartling-placeholder">Pakete
Aufgabe des Bildeinbetters für das mediapipe-PIP-Paket Sie können die Abhängigkeit Dabei gilt:
$ python -m pip install mediapipe
Importe
Importieren Sie die folgenden Klassen, um auf die Aufgabenfunktionen zum Einbinden von Bildern zuzugreifen:
import mediapipe as mp
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
Modell
Für die Aufgabe „MediaPipe Image Embedder“ ist ein trainiertes Modell erforderlich, für die Aufgabe. Weitere Informationen zu verfügbaren trainierten Modellen für den Bildeinbetter findest du unter in der Aufgabenübersicht im Abschnitt „Modelle“.
Wählen Sie ein Modell aus, laden Sie es herunter und speichern Sie es dann in einem lokalen Verzeichnis. Sie können die empfohlenen MobileNetV3 modellieren.
model_path = '/absolute/path/to/mobilenet_v3_small_075_224_embedder.tflite'
Geben Sie den Pfad des Modells innerhalb des Parameters model_asset_path
wie unten gezeigt an:
base_options = BaseOptions(model_asset_path=model_path)
Aufgabe erstellen
Zum Erstellen der Aufgabe können Sie die Funktion create_from_options
verwenden. Die
Die Funktion create_from_options
akzeptiert Konfigurationsoptionen, um den Einbettungscode festzulegen
Optionen. Weitere Informationen zu Konfigurationsoptionen finden Sie unter Konfiguration
Übersicht.
Bei der Aufgabe „Bild einbetten“ werden drei Arten von Eingabedaten unterstützt: Standbilder und Videodateien. und Live-Videostreams. Wählen Sie die Registerkarte, die Ihrem Eingabedatentyp entspricht, und wie Sie die Aufgabe erstellen und eine Inferenz ausführen.
Bild
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. # ...
Livestream
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. # ...
Konfigurationsoptionen
Diese Aufgabe bietet die folgenden Konfigurationsoptionen für Python-Anwendungen:
Option | Beschreibung | Wertebereich | Standardwert |
---|---|---|---|
running_mode |
Legt den Ausführungsmodus für die Task fest. Es gibt drei
Modi: IMAGE: Der Modus für Einzelbildeingaben. VIDEO: Der Modus für decodierte Frames eines Videos. LIVE_STREAM: Der Modus für einen Livestream mit Eingabe zum Beispiel von einer Kamera. In diesem Modus muss der resultListener wird aufgerufen, um einen Listener für den Empfang von Ergebnissen einzurichten asynchron programmiert. |
{IMAGE, VIDEO, LIVE_STREAM } |
IMAGE |
l2_normalize |
Gibt an, ob der zurückgegebene Featurevektor mit der L2-Norm normalisiert werden soll. Verwenden Sie diese Option nur, wenn das Modell noch keine native L2_NORMALIZATION TFLite Op. In den meisten Fällen ist dies bereits der Fall und Die L2-Normalisierung wird somit über TFLite-Inferenz ohne Notwendigkeit erreicht. für diese Option. | Boolean |
False |
quantize |
Ob die zurückgegebene Einbettung in Byte quantisiert werden soll mithilfe von eine skalare Quantisierung. Bei Einbettungen wird implizit angenommen, Daher hat jede Dimension garantiert einen Wert in [-1,0; 1,0]. Verwenden Sie die Option „l2_normalize“ verwenden, wenn dies nicht der Fall ist. | Boolean |
False |
result_callback |
Legt den Ergebnis-Listener fest, der die Einbettungsergebnisse empfangen soll
asynchron, wenn sich der Bildeinbetter im Livestream befindet
. Kann nur verwendet werden, wenn der Ausführungsmodus auf LIVE_STREAM festgelegt ist |
– | Nicht festgelegt |
Daten vorbereiten
Bereiten Sie Ihre Eingabe als Bilddatei oder NumPy-Array vor und konvertieren Sie sie in ein
mediapipe.Image
-Objekt. Wenn Sie eine Videodatei oder einen Livestream von einem
können Sie eine externe Bibliothek wie
OpenCV, um die Eingabeframes als NumPy zu laden
Arrays.
Bild
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)
Livestream
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)
Aufgabe ausführen
Sie können die Einbettungsfunktion aufrufen, die Ihrem Ausführungsmodus entspricht, um Rückschlüsse. Die Image Embedder API gibt die Einbettungsvektoren für den ein Bild oder einen Frame ein.
Bild
# 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)
Livestream
# 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)
Wichtige Hinweise:
- Im Video- oder Livestreammodus musst du außerdem der Aufgabe zum Einbinden von Bildern den Zeitstempel des Eingabe-Frames.
- Bei der Ausführung im Bild- oder Videomodell wird die Aufgabe „Bildeinbetter“ den aktuellen Thread blockieren, bis die Verarbeitung des Eingabebildes abgeschlossen ist. Frame.
- Im Livestreammodus blockiert die Aufgabe „Bild einbetten“ nicht
aktuellen Thread angelehnt,
aber sofort wieder zurück. Das Ergebnis wird aufgerufen.
Listener mit dem Einbettungsergebnis jedes Mal, wenn er die Verarbeitung eines
Eingabe-Frame. Ob die Funktion
embedAsync
aufgerufen wird, wenn der Bildeinbetter die Aufgabe mit der Verarbeitung eines anderen Frames beschäftigt ist, ignoriert die Aufgabe den neuen Eingabeframe.
Ergebnisse verarbeiten und anzeigen
Beim Ausführen einer Inferenz gibt die Aufgabe zum Einbinden von Bildern ein ImageEmbedderResult
zurück.
-Objekt, das die Liste der möglichen Kategorien für die Objekte im
ein Bild oder einen Frame ein.
Im Folgenden sehen Sie ein Beispiel für die Ausgabedaten dieser Aufgabe:
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
Dieses Ergebnis wurde durch Einbetten des folgenden Bildes erhalten:
Sie können die Ähnlichkeit von zwei Einbettungen mithilfe der Funktion
ImageEmbedder.cosine_similarity
. Im folgenden Code finden Sie eine
Beispiel.
# Compute cosine similarity.
similarity = ImageEmbedder.cosine_similarity(
embedding_result.embeddings[0],
other_embedding_result.embeddings[0])