ImageFrames ve GpuBuffers nasıl dönüştürülür?
Hesap Makineleri ImageFrameToGpuBufferCalculator
ve GpuBufferToImageFrameCalculator
, ImageFrame
ve GpuBuffer
türündeki paketler arasında geçiş yapar. ImageFrame
, çeşitli bit eşlem resim biçimlerinden herhangi birinde CPU belleğindeki resim verilerini belirtir. GpuBuffer
, GPU belleğindeki resim verilerini ifade eder. GpuBuffer to ImageFrame Dönüştürücüler Çerçeve Kavramları bölümünde daha fazla ayrıntı bulabilirsiniz. Şurada bir örnek görebilirsiniz:
Algı sonuçlarını görselleştirme
AnnotationOverlayCalculator
; sınırlayıcı kutular, oklar ve ovaller gibi algılama sonuçlarının, tanınan nesnelerle hizalanmış video çerçevelerinin üzerine yerleştirilmesine olanak tanır. Sonuçlar, bir iş istasyonunda çalışırken teşhis penceresinde veya cihazda çalışırken bir doku çerçevesinde görüntülenebilir. AnnotationOverlayCalculator
kullanımıyla ilgili örneği aşağıda görebilirsiniz:
Hesap makineleri nasıl paralel olarak çalıştırılır?
MediaPipe, hesap makinesi grafiğinde düzenli olarak ayrı hesap makinesi düğümlerini paralel olarak çalıştırır. MediaPipe, iş parçacığı havuzuna sahiptir ve her hesap makinesini, bir iş parçacığı kullanılabilir oldukça ve tüm girdileri hazır olduğunda çalıştırır. Her hesap makinesi örneği aynı anda yalnızca bir giriş grubu için çalıştırılır. Bu nedenle çoğu hesap makinesinin iş parçacığı güvenli değil, yalnızca iş parçacığı uyumlu olması gerekir.
Bir hesap makinesinin birden fazla girişi paralel olarak işleyebilmesi için olası iki yaklaşım vardır:
- Birden fazla hesap makinesi düğümü tanımlama ve giriş paketlerini tüm düğümlere dağıtma.
- Hesap makinesini iş parçacığı için güvenli hale getirin ve
max_in_flight
ayarını yapılandırın.
İlk yaklaşım, paketleri diğer hesap makinelerine (ör. RoundRobinDemuxCalculator
) dağıtmak için tasarlanan hesaplayıcılar kullanılarak uygulanabilir. Tek bir RoundRobinDemuxCalculator
, birbirinin aynısı olarak yapılandırılmış birkaç ScaleImageCalculator
düğümüne ardışık paketleri dağıtabilir.
İkinci yaklaşım, aynı hesap makinesi düğümünde CalculatorBase::Process
yönteminin en fazla max_in_flight
çağrısına izin verir. CalculatorBase::Process
çıkış paketleri, aşağı akış hesaplayıcılarına iletilmeden önce zaman damgasına göre otomatik olarak sıralanır.
Her iki yaklaşımda da, paralel olarak çalışan hesap makinesinin normal bir sıralı hesap makinesinde olduğu gibi dahili durumu koruyamayacağını unutmayın.
ImmediateInputStreamHandler kullanılırken çıkış zaman damgaları
ImmediateInputStreamHandler
, her paketi bir giriş akışına ulaşır ulaşmaz dağıtır. Bunun sonucunda, farklı bir giriş akışından daha düşük zaman damgasına sahip bir paket teslim etmeden önce bir giriş akışından daha yüksek zaman damgasına sahip bir paket teslim edebilir. Bu giriş zaman damgalarının her ikisi de bir çıkış akışına gönderilen paketler için kullanılırsa çıkış akışı, zaman damgalarının monoton bir şekilde artmadığından şikayet eder. Hesaplayıcı, bu durumu düzeltmek için zaman damgası işlendikten sonra paketin çıktısını almaya özen göstermelidir.
Bu, söz konusu zaman damgası için tüm giriş akışlarından giriş paketleri alınana kadar bekleyerek veya işlenmiş bir zaman damgasına sahip gelen bir paketi yoksayarak gerçekleştirilebilir.
Çalışma zamanında ayarlar nasıl değiştirilir?
Uygulama çalışırken hesap makinesi grafiğinin ayarlarını değiştirmek için iki temel yaklaşım mevcuttur:
- Hesap makinesi grafiğini değiştirilmiş
CalculatorGraphConfig
ile yeniden başlatın. - Grafik giriş akışlarında paketler aracılığıyla yeni hesap makinesi seçenekleri gönderin.
İlk yaklaşım, "alt grafikler" gibi CalculatorGraphConfig
işleme araçlarından yararlanma avantajına sahiptir. İkinci yaklaşım, ayarlar değişirken etkin hesap makinelerinin ve paketlerin çalışır durumda kalmasına izin verme avantajına sahiptir. Mediapipe katkıda bulunanlar şu anda bu iki avantajı da elde etmek için
alternatif yaklaşımları araştırıyor.
Gerçek zamanlı giriş akışlarını işleme
Mediapipe çerçevesi, veri akışlarını online veya çevrimdışı işlemek için kullanılabilir. Çevrimdışı işleme için paketler, hesap makineleri bu paketleri işlemeye hazır olur olmaz grafiğe aktarılır. Online işlemede, kare kaydedilirken her kare için bir paket grafiğe aktarılır.
MediaPipe çerçevesi yalnızca art arda gelen paketlere tekdüze şekilde artan zaman damgaları atanmasını gerektirir. Standart olarak, gerçek zamanlı hesaplayıcılar ve grafikler, her paket için zaman damgası olarak kayıt süresini veya sunum zamanını kullanır. Her zaman damgası, Jan/1/1970:00:00:00
tarihinden itibaren mikrosaniyeyi gösterir. Bu, çeşitli kaynaklardan gelen paketlerin küresel olarak tutarlı bir sırada işlenmesini sağlar.
Normalde çevrimdışı işlemede her giriş paketi işlenir ve gerektiği kadar işleme devam eder. Online işlemlerde, giriş veri çerçevelerinin gelmesine ayak uydurmak için genellikle giriş paketlerinin bırakılması gerekir.
Girişler çok sık geldiğinde, paketleri bırakmak için önerilen teknik, FlowLimiterCalculator
ve PacketClonerCalculator
gibi özel olarak bu amaç için tasarlanmış MediaPipe hesaplayıcılarını kullanmaktır.
Online işlemlerde, işlemin ne zaman devam edebileceğinin hızlı bir şekilde belirlenmesi de gerekir. MediaPipe bunu, hesap makineleri arasında zaman damgası sınırlarını yayarak destekler. Zaman damgası sınırları, giriş paketi içermeyen zaman damgası aralıklarını gösterir ve hesaplayıcıların bu zaman damgaları için hemen işlemeye başlamasını sağlar. Gerçek zamanlı işleme için tasarlanmış hesaplayıcılar, işleme mümkün olduğunca hızlı bir şekilde başlamak için zaman damgası sınırlarını dikkatli bir şekilde hesaplamalıdır. Örneğin MakePairCalculator
, zaman damgası sınırlarını giriş akışlarından çıkış akışlarına yaymak için SetOffset
API'yi kullanır.
MediaPipe'i MS Windows'da çalıştırabilir miyim?
MediaPipe taşınabilirliği şu anda Debian Linux, Ubuntu Linux, MacOS, Android ve iOS'i desteklemektedir. MediaPipe çerçevesinin temeli C++11 standardına uygun bir C++ kitaplığıdır. Bu nedenle, ek platformlara taşınması nispeten kolaydır.