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 ImageEmbedderResult
nesnesi 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:
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])