Udhëzues për futjen e imazhit për Python

Detyra MediaPipe Image Embedder ju lejon të konvertoni të dhënat e imazhit në një paraqitje numerike për të përmbushur detyrat e përpunimit të imazhit të lidhura me ML, të tilla si krahasimi i ngjashmërisë së dy imazheve. Këto udhëzime ju tregojnë se si të përdorni Image Embedder me Python.

Për më shumë informacion rreth aftësive, modeleve dhe opsioneve të konfigurimit të kësaj detyre, shihni Përmbledhjen .

Shembull kodi

Kodi shembull për Image Embedder ofron një zbatim të plotë të kësaj detyre në Python për referencën tuaj. Ky kod ju ndihmon të testoni këtë detyrë dhe të filloni ndërtimin e ngulitësit tuaj të imazhit. Mund të shikoni, ekzekutoni dhe modifikoni kodin shembull të Image Embedder duke përdorur vetëm shfletuesin tuaj të internetit me Google Colab. Mund ta shikoni kodin burimor për këtë shembull në GitHub .

Konfigurimi

Ky seksion përshkruan hapat kryesorë për konfigurimin e mjedisit tuaj të zhvillimit dhe projekteve të kodit në mënyrë specifike për të përdorur Image Embedder. Për informacion të përgjithshëm mbi konfigurimin e mjedisit tuaj të zhvillimit për përdorimin e detyrave të MediaPipe, duke përfshirë kërkesat e versionit të platformës, shihni udhëzuesin e konfigurimit për Python .

Paketat

Detyra Image Embedder paketën mediapipe pip. Mund ta instaloni varësinë me sa vijon:

$ python -m pip install mediapipe

Importet

Importoni klasat e mëposhtme për të hyrë në funksionet e detyrave të Embedder-it të imazhit:

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

Model

Detyra MediaPipe Image Embedder kërkon një model të trajnuar që është në përputhje me këtë detyrë. Për më shumë informacion mbi modelet e trajnuara të disponueshme për Image Embedder, shihni seksionin Modelet e përmbledhjes së detyrave.

Zgjidhni dhe shkarkoni një model dhe më pas ruajeni në një direktori lokale. Mund të përdorni modelin e rekomanduar MobileNetV3 .

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

Specifikoni shtegun e modelit brenda parametrit model_asset_path , siç tregohet më poshtë:

base_options = BaseOptions(model_asset_path=model_path)

Krijo detyrën

Ju mund të përdorni funksionin create_from_options për të krijuar detyrën. Funksioni create_from_options pranon opsionet e konfigurimit për të vendosur opsionet e embedder-it. Për më shumë informacion mbi opsionet e konfigurimit, shihni Përmbledhjen e konfigurimit .

Detyra Image Embedder mbështet 3 lloje të dhënash hyrëse: imazhe statike, skedarë video dhe transmetime video të drejtpërdrejta. Zgjidhni skedën që korrespondon me llojin tuaj të të dhënave hyrëse për të parë se si të krijoni detyrën dhe të ekzekutoni konkluzionet.

Imazhi

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

Transmetim i drejtpërdrejtë

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

Opsionet e konfigurimit

Kjo detyrë ka opsionet e mëposhtme të konfigurimit për aplikacionet Python:

Emri i opsionit Përshkrimi Gama e vlerave Vlera e paracaktuar
running_mode Vendos modalitetin e ekzekutimit për detyrën. Ekzistojnë tre mënyra:

IMAGE: Modaliteti për hyrjet e një imazhi të vetëm.

VIDEO: Modaliteti për kornizat e dekoduara të një videoje.

LIVE_STREAM: Modaliteti për një transmetim të drejtpërdrejtë të të dhënave hyrëse, si p.sh. nga një aparat fotografik. Në këtë modalitet, resultListener duhet të thirret për të vendosur një dëgjues për të marrë rezultatet në mënyrë asinkrone.
{ IMAGE, VIDEO, LIVE_STREAM } IMAGE
l2_normalize Nëse do të normalizohet vektori i tipareve të kthyera me normën L2. Përdoreni këtë opsion vetëm nëse modeli nuk përmban tashmë një L2_NORMALIZATION TFLite Op. Në shumicën e rasteve, ky është tashmë rasti dhe normalizimi i L2 arrihet në këtë mënyrë përmes përfundimit të TFLite pa pasur nevojë për këtë opsion. Boolean False
quantize Nëse futja e kthyer duhet të kuantizohet në bajt nëpërmjet kuantizimit skalar. Përfshirjet supozohen në mënyrë implicite si njësi-normë dhe për këtë arsye çdo dimension është i garantuar të ketë një vlerë në [-1.0, 1.0]. Përdorni opsionin l2_normalize nëse nuk është kështu. Boolean False
result_callback Vendos dëgjuesin e rezultateve që të marrë rezultatet e ngulitjes në mënyrë asinkrone kur Embedder i imazhit është në modalitetin e transmetimit të drejtpërdrejtë. Mund të përdoret vetëm kur modaliteti i ekzekutimit është caktuar në LIVE_STREAM N/A Nuk është vendosur

Përgatitni të dhënat

Përgatitni hyrjen tuaj si një skedar imazhi ose një grup numpy, më pas konvertojeni atë në një objekt mediapipe.Image . Nëse hyrja juaj është një skedar video ose transmetim i drejtpërdrejtë nga një kamerë në internet, mund të përdorni një bibliotekë të jashtme si OpenCV për të ngarkuar kornizat tuaja hyrëse si grupe të pakëndshme.

Imazhi

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)
    

Transmetim i drejtpërdrejtë

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)
    

Drejtoni detyrën

Mund të telefononi funksionin e ngulitjes që korrespondon me modalitetin tuaj të funksionimit për të nxjerrë përfundime. Image Embedder API do të kthejë vektorët e ngulitjes për imazhin ose kornizën hyrëse.

Imazhi

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

Transmetim i drejtpërdrejtë

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

Vini re sa vijon:

  • Kur ekzekutoni në modalitetin e videos ose në modalitetin e transmetimit të drejtpërdrejtë, duhet gjithashtu t'i jepni detyrës "Image Embedder" vulën kohore të kornizës hyrëse.
  • Kur ekzekutohet në imazhin ose modelin e videos, detyra "Image Embedder" do të bllokojë fillin aktual derisa të përfundojë përpunimin e imazhit ose kornizës hyrëse.
  • Kur ekzekutohet në modalitetin e transmetimit të drejtpërdrejtë, detyra e Impedderit të imazhit nuk e bllokon lidhjen aktuale, por kthehet menjëherë. Ai do të thërrasë dëgjuesin e tij të rezultateve me rezultatin e integruar sa herë që ka përfunduar përpunimin e një kornize hyrëse. Nëse funksioni embedAsync thirret kur detyra e Image Embedder është e zënë me përpunimin e një kuadri tjetër, detyra e injoron kornizën e re hyrëse.

Trajtoni dhe shfaqni rezultatet

Pas ekzekutimit të konkluzionit, detyra Image Embedder kthen një objekt ImageEmbedderResult i cili përmban listën e kategorive të mundshme për objektet brenda imazhit ose kornizës hyrëse.

Më poshtë tregon një shembull të të dhënave dalëse nga kjo detyrë:

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

Ky rezultat u mor duke futur imazhin e mëposhtëm:

Foto mesatare e një mace ekzotike

Ju mund të krahasoni ngjashmërinë e dy futjeve duke përdorur funksionin ImageEmbedder.cosine_similarity . Shih kodin e mëposhtëm për një shembull.

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