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