Python için resim yerleştirme rehberi

MediaPipe Resim Yerleştiricisi görevi, iki resmin benzerliğini karşılaştırma gibi makine öğrenimi ile ilgili resim işleme görevlerini gerçekleştirmek için resim verilerini sayısal bir temsile dönüştürmenize olanak tanır. Bu talimatlarda, resim yerleştiricinin Python ile nasıl kullanılacağı gösterilmektedir.

Bu görevin özellikleri, modelleri ve yapılandırma seçenekleri hakkında daha fazla bilgi için Genel bakış bölümüne bakın.

Kod örneği

Resim Ekleyici'nin örnek kodu, referans olarak kullanabileceğiniz bu görevin Python'da eksiksiz bir şekilde uygulanmasını sağlar. Bu kod, bu görevi test etmenize ve kendi resim yerleştirme aracınızı oluşturmaya başlamanıza yardımcı olur. Google Colab ile yalnızca web tarayıcınızı kullanarak resim yerleştirici örnek kodunu görüntüleyebilir, çalıştırabilir ve düzenleyebilirsiniz. Bu örneğin kaynak kodunu GitHub'da görüntüleyebilirsiniz.

Kurulum

Bu bölümde, geliştirme ortamınızı ve kod projelerinizi özellikle Resim Yerleştirici'yi kullanacak şekilde ayarlamayla ilgili temel adımlar açıklanmaktadır. Platform sürümü gereksinimleri dahil olmak üzere, geliştirme ortamınızı MediaPipe görevlerini kullanmak için ayarlama hakkında genel bilgi için Python için kurulum kılavuzuna bakın.

Paketler

Mediapipe pip paketi için resim yerleştirme görevi. Bağımlılığı aşağıdakilerle yükleyebilirsiniz:

$ python -m pip install mediapipe

İçe aktarılanlar

Resim Yerleştirici görev işlevlerine erişmek için aşağıdaki sınıfları içe aktarın:

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

Model

MediaPipe Resim Yerleştiricisi görevi, bu görevle uyumlu bir eğitimli model gerektirir. Resim Yerleştirici için mevcut eğitimli modeller hakkında daha fazla bilgi edinmek istiyorsanız göreve genel bakıştaki Modeller bölümüne göz atın.

Bir model seçip indirin ve yerel bir dizinde saklayın. Önerilen MobileNetV3 modelini kullanabilirsiniz.

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

Modelin yolunu model_asset_path parametresinde aşağıda gösterildiği gibi belirtin:

base_options = BaseOptions(model_asset_path=model_path)

Görevi oluşturun

Görevi oluşturmak için create_from_options işlevini kullanabilirsiniz. create_from_options işlevi, yerleştirici seçeneklerini ayarlamak için yapılandırma seçeneklerini kabul eder. Yapılandırma seçenekleri hakkında daha fazla bilgi için Yapılandırmaya Genel Bakış başlıklı makaleyi inceleyin.

Resim Yerleştirici görevi 3 giriş veri türünü destekler: sabit resimler, video dosyaları ve canlı video akışları. Görevi nasıl oluşturacağınızı ve çıkarım işlemini nasıl çalıştıracağınızı görmek için giriş veri türünüze karşılık gelen sekmeyi seçin.

Resim

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

Canlı yayın

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

Yapılandırma seçenekleri

Bu görevde, Python uygulamaları için aşağıdaki yapılandırma seçenekleri bulunur:

Seçenek Adı Açıklama Değer Aralığı Varsayılan değer
running_mode Görevin çalışma modunu ayarlar. Üç mod vardır:

RESİM: Tek resim girişleri için kullanılan mod.

VIDEO: Bir videonun kod çözülmüş karelerinin modu.

LIVE_STREAM: Kameradan alınan giriş verilerinin canlı yayını için kullanılan mod. Bu modda, sonuçları asenkron olarak alacak bir dinleyici oluşturmak için resultListener çağrılmalıdır.
{IMAGE, VIDEO, LIVE_STREAM} IMAGE
l2_normalize Döndürülen özellik vektörünün L2 normuyla normalleştirilip normalleştirilmeyeceği. Bu seçeneği yalnızca modelde halihazırda doğal bir L2_NORMALIZATION TFLite Op içermiyorsa kullanın. Çoğu durumda bu durum geçerlidir ve L2 normalleştirmesi, bu seçeneğe gerek kalmadan TFLite çıkarımıyla elde edilir. Boolean False
quantize Döndürülen yerleştirmenin skaler kesme işlemiyle baytlara bölünüp bölünmeyeceği. Yerleşimlerin birim normal olduğu varsayılır ve bu nedenle tüm boyutların [-1,0; 1,0] aralığında bir değere sahip olduğu garanti edilir. Aksi takdirde l2_normalize seçeneğini kullanın. Boolean False
result_callback Sonuç dinleyicisini, resim yerleştirici canlı yayın modundayken yerleştirme sonuçlarını eşzamansız olarak alacak şekilde ayarlar. Yalnızca çalışma modu LIVE_STREAM olarak ayarlandığında kullanılabilir. Yok Ayarlanmadı

Verileri hazırlama

Girişinizi resim dosyası veya numpy dizisi olarak hazırlayın, ardından mediapipe.Image nesnesine dönüştürün. Girişiniz bir video dosyası veya web kamerasından canlı yayınsa giriş karelerinizi numpy dizileri olarak yüklemek için OpenCV gibi harici bir kitaplık kullanabilirsiniz.

Resim

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)
    

Canlı yayın

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)
    

Görevi çalıştırma

Çıkarımları tetiklemek için çalıştırma modunuza karşılık gelen yerleşik işlevi çağırabilirsiniz. Resim Yerleştirici API, giriş resmi veya çerçeve için yerleştirme vektörlerini döndürür.

Resim

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

Canlı yayın

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

Aşağıdakileri göz önünde bulundurun:

  • Video modunda veya canlı yayın modunda çalışırken Görüntü Yerleştirici görevine giriş çerçevesinin zaman damgasını da sağlamanız gerekir.
  • Resim veya video modelinde çalışırken resim yerleştirme görevi, giriş resmini veya çerçevesini işlemeye başlayana kadar mevcut iş parçacığını engeller.
  • Canlı yayın modunda çalışırken resim yerleştirme görevi, geçerli mesaj dizisini engellemez ancak hemen döndürülür. Her giriş karesini işlemeyi tamamladığında, sonuç dinleyicisini yerleştirme sonucuyla birlikte çağırır. Resim Yerleştirici görevi başka bir kareyi işlerken embedAsync işlevi çağrılırsa görev yeni giriş karesini yoksayar.

Sonuçları işleme ve görüntüleme

Resim Yerleştirici görevi, çıkarım çalıştırıldığında giriş resmi veya karesindeki nesneler için olası kategorilerin listesini içeren bir ImageEmbedderResultnesnesi döndürür.

Aşağıda, bu görevin çıkış verilerine örnek verilmiştir:

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

Bu sonuç, aşağıdaki resim yerleştirilerek elde edilmiştir:

Egzotik bir kedinin orta plan çekimi

ImageEmbedder.cosine_similarity işlevini kullanarak iki yerleştirmenin benzerliğini karşılaştırabilirsiniz. Örnek için aşağıdaki koda bakın.

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