Python için resim yerleştirme rehberi

MediaPipe Resim Yerleştirme görevi, resim verilerini sayısal bir gösterime dönüştürmenizi sağlar makine öğrenimiyle ilgili görüntü işleme görevlerini gerçekleştirmek için (örneğin, iki resmin benzerliği. Bu talimatlarda, Python ile Resim Yerleştirme.

Özellikler, modeller ve yapılandırma seçenekleri hakkında daha fazla bilgi Bu görev hakkında daha fazla bilgi için Genel Bakış'ı inceleyin.

Kod örneği

Resim Yerleştirme örnek kodu, bu resmin görevi görebilir. Bu kod, görevi test etmenize ve kendi resim yerleştirdiğinizi oluşturmaya başladı. Verileri görüntüleyebilir, çalıştırabilir ve Resim Yerleştirme örneği kod Google Colab ile yalnızca web tarayıcınızı kullanarak. Şu öğenin kaynak kodunu görüntüleyebilirsiniz: bu örneği şurada bulabilirsiniz: GitHub'a gidin.

Kurulum

Bu bölümde, geliştirme ortamınızı ve ayarlarınızı yönetmeyle ilgili kullanmak için özel olarak projeleri kodlayabilir. Şu konularda genel bilgi için: dahil olmak üzere MediaPipe görevlerini kullanmak için geliştirme ortamınızı platform sürümü gereksinimleri hakkında daha fazla bilgi için Python'da kullanılabilir.

Paketler

Görüntü Yerleştirme görevini, mediapipe pip paketi görevi. Bağımlılığı yükleyebilirsiniz şunlar:

$ python -m pip install mediapipe

İçe aktarılanlar

Görüntü Yerleştirme 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ştirme görevi bu görevi görebilir. Görüntü Yerleştirme için eğitilmiş modellerle ilgili daha fazla bilgi için bkz. göreve genel bakış Modeller bölümü.

Bir model seçip indirin, ardından bu modeli yerel bir dizinde depolayın. Tekliflerinizi otomatikleştirmek ve optimize etmek için önerilen MobileNetV3 modeli.

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

Aşağıda gösterildiği gibi, model_asset_path parametresi içinde modelin yolunu belirtin:

base_options = BaseOptions(model_asset_path=model_path)

Görevi oluşturma

Görevi oluşturmak için create_from_options işlevini kullanabilirsiniz. İlgili içeriği oluşturmak için kullanılan create_from_options işlevi, yerleştiriciyi ayarlamak için yapılandırma seçeneklerini kabul eder seçenekleri vardır. Yapılandırma seçenekleri hakkında daha fazla bilgi edinmek için Yapılandırma Genel Bakış.

Resim Yerleştirme görevi, 3 giriş verisi türünü destekler: hareketsiz resimler, video dosyaları ve canlı video akışları kullanılabilir. Giriş verisi türünüze karşılık gelen sekmeyi ve çıkarımda bulunmayı öğreneceğiz.

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örev, Python uygulamaları için aşağıdaki yapılandırma seçeneklerini içerir:

Seçenek Adı Açıklama Değer Aralığı Varsayılan Değer
running_mode Görev için çalışma modunu ayarlar. Üç tane var modlar:

. IMAGE: Tek resimli giriş modu.
.
. VIDEO: Bir videonun kodu çözülmüş karelerine yönelik mod.
.
. LIVE_STREAM: Giriş canlı yayını modu kameradan alınan veriler gibi. Bu modda, resultListener, sonuçları almak üzere bir dinleyici ayarlamak için çağrıldı eşzamansız olarak ayarlayabilirsiniz.
{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 model zaten yerel bir öğe içermiyorsa kullanın L2_NORMALIZATION TFLite Op. Çoğu durumda bu zaten böyledir Böylece L2 normalleştirmesi, herhangi bir gerek kalmadan TFLite çıkarımıyla gerçekleştirilir bu seçeneği belirleyin. Boolean False
quantize Döndürülen yerleştirmenin skaler nicelemedir. Yerleştirmelerin dolaylı olarak birim normları Bu nedenle, tüm boyutların [-1,0, 1,0] aralığında bir değere sahip olması garanti edilir. Tekliflerinizi otomatikleştirmek ve optimize etmek için l2_normalize seçeneğini kullanın. Boolean False
result_callback Sonuç işleyiciyi yerleştirme sonuçlarını alacak şekilde ayarlar Resim Yerleştirme uygulaması canlı yayındayken eşzamansız olarak yatırım yapmanız önemlidir. Yalnızca koşu modu LIVE_STREAM olarak ayarlandığında kullanılabilir Yok Ayarlanmadı

Verileri hazırlama

Girişinizi bir görüntü dosyası veya Numpy dizisi olarak hazırlayın ve daha sonra mediapipe.Image nesne algılandı. Girişiniz bir video dosyası veya şunun gibi harici bir kitaplık kullanabilirsiniz: Giriş çerçevelerinizi numpy olarak yüklemek için OpenCV dizi'dir.

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

Çalıştırma modunuza karşılık gelen yerleştirme işlevini çağırarak çıkarımlar. Image Yerleşik API, giriş resmini veya çerçevesini seçin.

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 şunları da yapmanız gerekir: Resim Yerleştirme görevine giriş çerçevesinin zaman damgasını sağlayın.
  • Görüntü veya video modelinde çalışırken Resim Yerleştirme görevi giriş resmini işlemeyi bitirene kadar geçerli iş parçacığını engeller veya çerçeve.
  • Canlı yayın modunda çalışırken Resim Yerleştirme görevi devam eder, ancak hemen geri döner. Sonucunu çağırır işleyiciyi, bir öğeyi işlemeyi her tamamladığında yerleştirme sonucuyla birlikte giriş çerçevesine sahip. Resim Yerleştirme aracı sırasında embedAsync işlevi çağrılırsa görev başka bir kareyi işlemekle meşgulse görev, yeni giriş çerçevesini yoksayar.

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

Çıkarım çalıştırıldığında, Görüntü Yerleştirme görevi bir ImageEmbedderResult döndürüyor içindeki nesnelere ilişkin olası kategorilerin listesini içeren nesne giriş resmini veya çerçevesini seçin.

Aşağıda, bu görevdeki çıkış verilerinin bir örneği gösterilmektedir:

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 resmin yerleştirilmesiyle elde edildi:

İki yerleştirmenin benzerliğini ImageEmbedder.cosine_similarity işlevi. Aşağıdaki kodu inceleyerek örneğine bakalım.

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