Olay tabanlı görüntüleme yazılımı neyi işler?
Bir olay kamerası, her aralıkta geleneksel bir video karesi sunmak yerine parlaklıktaki değişiklikleri bildirir. Kodu çözülmüş bir olay tipik olarak bir pikseli, bir polariteyi ve bir zaman damgasını tanımlar. Uygulamanız bu alanların anlamını toplama, filtreleme, kaydetme ve çıkarım yoluyla korumalıdır. olaya dayalı ve çerçeveye dayalı karşılaştırma Bu veri modelinin ne zaman yararlı olduğunu açıklar.
Tasarımdaki üç formatı ayırt edin: sensör veya aktarım kodlaması, yazılım tarafından kullanılan kodu çözülmüş olay gösterimi ve bir algoritmaya aktarılan gösterim. Ham sensör paketlerini, bir dizi kodu çözülmüş olayı ve birikmiş görüntüyü içeren bir dosya farklı amaçlara hizmet eder. Bunlar arasında dönüştürme yapmak, bellek kullanımını, işlem maliyetini ve aşağı akışta mevcut olan zamanlama bilgilerini değiştirebilir.
| Temsil | Şunun için kullanışlıdır: | Entegrasyon sorusu |
|---|---|---|
| Ham paketler veya satıcı kaydı | Edinme ve kod çözme davranışını yeniden üretme | Konuşlandırılan kod çözücü bu cihazı ve format revizyonunu tam olarak okuyabilir mi? |
| Kodu çözülmüş etkinlikler | Filtreleme, zamanlama analizi ve olaya özgü algoritmalar | Zaman damgası birimi, saat alanı ve koordinat kuralı nedir? |
| Zaman yüzeyleri veya voksel benzeri tensörler | Yapılandırılmış bir zamansal temsile ihtiyaç duyan algoritmalar | Hangi geçmiş, gruplama ve normalleştirme ayarlarının çoğaltılması gerekir? |
| Birikmiş etkinlik görüntüleri | Görselleştirme veya uyumlu bir görüntü tabanlı işleme aşaması | Biriktirme penceresi ne kadar gecikme ve bilgi kaybına neden olur? |
Olay kamerası SDK’sı nasıl değerlendirilir?
Tam sensör, kamera yazılımı ve ana bilgisayar platformuyla başlayın. Bir masaüstü gösterimi, gömülü bir Linux görüntüsü, bir ARM işlemcisi veya üretim lisansınız için destek sağlamaz. Desteklenen işletim sistemleri, CPU mimarileri, yeniden dağıtım koşulları ve kamera arayüzü gereksinimleri için tedarikçiye danışın. Taşıyıcı kartı devreye almadan önce uygulamayı amaçlanan platformda doğrulayın.
- Edinme: cihaz keşfi, konfigürasyonu, kod çözme ve hata raporlama.
- Zamanlama: zaman damgası kaynağı, rollover yönetimi, harici tetikleyiciler ve çoklu cihaz hizalaması.
- Tekrarlanabilirlik: kayıtlar, konfigürasyon aktarımı ve tanımlanmış bir yazılım sürümü.
- Dağıtım: başsız çalışma, desteklenen ikili dosyalar, yeniden başlatma davranışı ve lisans koşulları.
- Gözlemlenebilirlik: olay sayıları, kuyruk derinliği, bırakılan veriler ve ana bilgisayar kaynağı kullanımı.
Açık zamanlama sınırlarına sahip bir işlem hattı oluşturun
Edinimi pahalı görselleştirme, disk yazma ve model çıkarımlarından ayrı tutun. Aksi takdirde yavaş bir tüketici, algoritma başlamadan önce yeni verileri geciktirebilir. Sınırlı bir kuyruk ve açık bir aşırı yükleme politikası tanımlayın. En eski pencereyi bırakmak, ilgilenilen bölgeyi azaltmak ve hatayla durmak farklı sonuçlar doğurur; uygulamaya uygun davranışı seçin ve gerçekleştiğinde kaydedin.
Gözlemlerin ne zaman gerçekleştiğini açıklamak için sensör zaman damgalarını ve işlem sürelerini ölçmek için monoton bir ana bilgisayar saatini kullanın. Zaman damgalarının ilgisiz saatlerden çıkarılması geçerli bir uçtan uca gecikme üretmez. Kameranın bir IMU veya geleneksel kamerayla birleştirilmesi gerekiyorsa, bölümümüzde açıklanan saat ilişkisini ve kalibrasyon işlemini kurun. sensör füzyon senkronizasyon kılavuzu.
Küçük bir kayıt inceleme örneği
Aşağıdaki Python örneği, desteklenen bir kayıttaki kodu çözülmüş olayları sayar ve zaman damgalarının aralığını bildirir. Belgelenen Metavision akış API'sini kullanır ve uyumlu bir SDK kurulumu ve kaydı gerektirir. Bu bir inceleme örneğidir, Alvexis kamera kıyaslaması veya dedektör değildir.
import argparse
from metavision_sdk_stream import Camera, CameraStreamSlicer
parser = argparse.ArgumentParser()
parser.add_argument("recording")
args = parser.parse_args()
source = Camera.from_file(args.recording)
count, first_us, last_us = 0, None, None
for batch in CameraStreamSlicer(source.move()):
events = batch.events
if events.size:
start = int(events["t"][0])
end = int(events["t"][-1])
first_us = start if first_us is None else min(first_us, start)
last_us = end if last_us is None else max(last_us, end)
count += int(events.size)
span_s = 0.0 if first_us is None else (last_us - first_us) / 1_000_000
print({"events": count, "event_timestamp_span_s": span_s})
Zaman damgası aralığı ilk gözlemlenen olaydan son gözlemlenen olaya kadar kapsar; dosya süresini, edinme gecikmesini veya işlem hacmini ölçmez. Boş periyotlar ve saat sıfırlamalarının üretimde ayrı ayrı ele alınması gerekir. İkinci bir mühendisin yorumu yeniden üretebilmesi için cihaz yapılandırmasını ve kayıt meta verilerini dosyanın yanında tutun.
Sessiz sahneleri, yoğun sahneleri ve arıza kurtarmayı doğrulayın
Sabit bir sahneyi, temsili hareketi ve kasıtlı olarak zorlu bir sahneyi test edin. Titreme, kamera titreşimi ve dokulu hareket çok farklı olay oranları yaratabilir. Hem tipik davranışı hem de gözlemlediğiniz en kötü durumu kaydedin. Bu iş yükleri bellek ve CPU zamanı için rekabet ettiğinden, depolama ve iletişim etkinken tekrarlayın.
| testi | Kayıt | Desteklediği karar |
|---|---|---|
| Aynı kaydı tekrar oynat | Yapılandırma, çıktı farklılıkları ve işlem süresi | Bir yazılım değişikliği tekrarlanabilir bir şekilde değerlendirilebilir mi? |
| Sahne etkinliğini artırın | Kuyruk derinliği, olay kaybı ve çıktı yaşı | Sistem pik yük altında kullanılabilir durumda mı? |
| İşleme penceresini değiştirin | Uygulama doğruluğu ve sensörden çıkışa gecikme | Hangi zamanlama/ayrıntı dengesi gereksinime uyuyor? |
| Cihazın bağlantısını kesin ve yeniden bağlayın | Kurtarma süresi, saatin sıfırlanması ve kayıt sürekliliği | Dağıtılan hizmet öngörülebilir bir şekilde kurtarılabilir mi? |
Algoritma bir sinir ağı kullandığında, bir hızlandırıcı seçmeden önce ortaya çıkan tensörü ve desteklenen işleçleri kontrol edin. Bir olay kamerası otomatik olarak bir NPU'ya ihtiyaç duymaz ve bir NPU, bir olay akışını otomatik olarak kabul etmez. Bizim FPGA, NPU ve MPU mimarisi kılavuzu edinme, ön işleme, çıkarım ve uygulama hizmetlerini ayırır.
Yazılım yığınını seçmeden önce sorulan sorular
Normal bir bilgisayarlı görme modelini kullanabilir miyim?
Yalnızca uyumlu bir giriş gösterimi tanımlandıktan ve davranışı doğrulandıktan sonra. Olayların görüntülerde toplanması, görüntü işleme aşamasının yeniden kullanılmasına izin verebilir, ancak veri dağıtımını değiştirir ve bir zamanlama penceresi ekler. Başvurunun tamamını temsili veriler üzerinden değerlendirin.
Çalışan bir dizüstü bilgisayar demosu gömülü uyumluluğu kanıtlar mı?
Hayır. Gerçek hedef platformun CPU mimarisini, işletim sistemini, sensör arayüzünü, sürücüyü, SDK lisansını ve sürekli kaynak kullanımını doğrulayın.
Entegrasyon görüşmesi için ne göndermeliyim?
Kamera veya sensör referansını, örnek kaydını, amaçlanan çıktıyı, kabul edilebilir gecikmeyi, ana bilgisayar platformunu, arayüzü ve dağıtım ortamını gönderin. Bu girdiler, tartışmayı ilk entegrasyon risklerini tanımlamaya yetecek kadar somut hale getiriyor.
Teknik referanslar
- Prophesee: Python akış API'sini kullanmaya başlama
- Prophesee: kameralardan ve dosyalardan olayları okuma
- Gallego ve diğerleri: Olaya Dayalı Vizyon — Bir Araştırma
Satıcı örnekleri kendi desteklenen ekosistemlerini açıklar. Seçilen cihaz ve dağıtım için uyumluluğu ve lisanslamayı onaylayın.
