Co przetwarza oprogramowanie wizyjne oparte na zdarzeniach?

Kamera eventowa raportuje zmiany jasności, zamiast dostarczać konwencjonalną klatkę wideo w każdym odstępie czasu. Zdekodowane zdarzenie zazwyczaj identyfikuje piksel, polaryzację i znacznik czasu. Twoja aplikacja musi zachować znaczenie tych pól poprzez pozyskiwanie, filtrowanie, rejestrowanie i wnioskowanie. The porównanie oparte na zdarzeniach i klatkach wyjaśnia, kiedy ten model danych jest przydatny.

Rozróżnij trzy formaty w projekcie: kodowanie czujnika lub transportu, zdekodowana reprezentacja zdarzenia używana przez oprogramowanie oraz reprezentacja przekazywana do algorytmu. Plik zawierający nieprzetworzone pakiety czujników, szereg zdekodowanych zdarzeń i zakumulowany obraz służą różnym celom. Konwersja między nimi może zmienić wykorzystanie pamięci, koszt przetwarzania i informacje o taktowaniu dostępne w dalszej części procesu.

ReprezentacjaPrzydatne dlaPytanie o integrację
Surowe pakiety lub nagranie dostawcyOdtwarzanie zachowania akwizycji i dekodowaniaCzy zastosowany dekoder może odczytać dokładnie tę wersję urządzenia i formatu?
Odszyfrowane wydarzeniaFiltrowanie, analiza czasu i algorytmy natywne dla zdarzeńJaka jest jednostka znacznika czasu, dziedzina zegara i konwencja współrzędnych?
Powierzchnie czasu lub tensory wokseloweAlgorytmy wymagające uporządkowanej reprezentacji czasowejKtóre ustawienia historii, kategoryzacji i normalizacji należy odtworzyć?
Skumulowane obrazy zdarzeńWizualizacja lub kompatybilny etap przetwarzania oparty na obrazieJak duże opóźnienia i straty informacji wprowadza okno akumulacji?

Jak ocenić kamerę eventową SDK

Zacznij od dokładnego czujnika, oprogramowania sprzętowego aparatu i platformy hosta. Demonstracja na komputerze stacjonarnym nie zapewnia obsługi wbudowanego obrazu Linux, procesora ARM ani licencji produkcyjnej. Zapytaj dostawcę o obsługiwane systemy operacyjne, architekturę procesora, warunki redystrybucji i wymagania dotyczące interfejsu kamery. Przed zatwierdzeniem płyty bazowej dla modułu obliczeniowego sprawdź aplikację na zamierzonej platformie.

  • Nabycie: wykrywanie urządzeń, konfiguracja, dekodowanie i raportowanie błędów.
  • Czas: pochodzenie znacznika czasu, obsługa najazdów, wyzwalacze zewnętrzne i wyrównanie wielu urządzeń.
  • Powtarzalność: nagrań, eksportu konfiguracji i zidentyfikowanej wersji oprogramowania.
  • Wdrożenie: operacja bezgłowa, obsługiwane pliki binarne, zachowanie podczas ponownego uruchamiania i warunki licencji.
  • Obserwowalność: liczba zdarzeń, głębokość kolejki, utracone dane i wykorzystanie zasobów hosta.

Utwórz potok z wyraźnymi granicami czasu

ZdobądźOdkoduj i zachowaj czas czujnika
Przygotuj sięFiltruj, synchronizuj i twórz okna
ZdecydujŚledź lub wnioskuj, a następnie oznaczaj dane wyjściowe znacznikiem czasu

Trzymaj akwizycję oddzielnie od kosztownej wizualizacji, zapisu na dysku i wnioskowania o modelu. W przeciwnym razie powolny konsument może opóźnić nowe dane przed uruchomieniem algorytmu. Zdefiniuj ograniczoną kolejkę i jawne zasady przeciążenia. Upuszczenie najstarszego okna, zmniejszenie obszaru zainteresowania i zatrzymanie się z błędem ma różne konsekwencje; wybierz zachowanie, które pasuje do zastosowania i zapisz, kiedy to nastąpi.

Użyj znaczników czasu czujników, aby opisać, kiedy miały miejsce obserwacje, oraz monotonicznego zegara hosta, aby zmierzyć czas trwania przetwarzania. Odejmowanie znaczników czasu od niepowiązanych zegarów nie powoduje prawidłowego opóźnienia od końca do końca. Jeśli kamera musi być połączona z kamerą IMU lub konwencjonalną, należy ustalić zależność zegara i proces kalibracji opisany w naszym przewodnik synchronizacji fuzji czujników.

Mały przykład nagrania-kontroli

Poniższy przykład języka Python zlicza zdekodowane zdarzenia w obsługiwanym nagraniu i raportuje zakres ich znaczników czasu. Wykorzystuje udokumentowane przesyłanie strumieniowe Metavision API i wymaga kompatybilnej instalacji i nagrywania SDK. Jest to przykład inspekcji, a nie test porównawczy kamery ALVEXIS lub detektor.

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

Zakres znacznika czasu obejmuje zdarzenie od pierwszego do ostatniego zaobserwowanego zdarzenia; nie mierzy czasu trwania pliku, opóźnienia pozyskiwania ani przepustowości przetwarzania. Puste okresy i resetowanie zegara wymagają osobnej obsługi w produkcji. Zachowaj konfigurację urządzenia i metadane zapisu obok pliku, aby drugi inżynier mógł odtworzyć interpretację.

Sprawdź ciche sceny, ruchliwe sceny i odzyskiwanie po awarii

Przetestuj scenę nieruchomą, reprezentatywny ruch i scenę celowo wymagającą. Migotanie, wibracje kamery i teksturowany ruch mogą powodować bardzo różne wskaźniki zdarzeń. Zapisz zarówno typowe zachowanie, jak i najgorszy przypadek, który zaobserwowałeś. Powtórz tę czynność przy aktywnej pamięci masowej i komunikacji, ponieważ te obciążenia konkurują o pamięć i czas procesora.

TestujNagrajDecyzja, którą wspiera
Odtwórz ponownie to samo nagranieKonfiguracja, różnice wyjściowe i czas przetwarzaniaCzy zmianę oprogramowania można ocenić w sposób powtarzalny?
Zwiększ aktywność scenyGłębokość kolejki, utrata zdarzeń i wiek danych wyjściowychCzy system pozostaje użyteczny pod obciążeniem szczytowym?
Zmień okno przetwarzaniaDokładność aplikacji i opóźnienie między czujnikiem a wyjściemKtóry kompromis w zakresie czasu/szczegółów spełnia wymagania?
Odłącz i ponownie podłącz urządzenieCzas przywracania, reset zegara i ciągłość nagrywaniaCzy wdrożona usługa może zostać przywrócona w przewidywalny sposób?

Gdy algorytm korzysta z sieci neuronowej, przed wyborem akceleratora sprawdź wynikowy tensor i obsługiwane operatory. Kamera zdarzeń nie wymaga automatycznie NPU, a NPU nie akceptuje automatycznie strumienia zdarzeń. Nasz Przewodnik po architekturze FPGA, NPU i MPU oddziela usługi pozyskiwania, wstępnego przetwarzania, wnioskowania i aplikacji.

Pytania przed wyborem stosu oprogramowania

Czy mogę używać normalnego modelu widzenia komputerowego?

Dopiero po zdefiniowaniu kompatybilnej reprezentacji wejściowej i sprawdzeniu jej zachowania. Gromadzenie zdarzeń w obrazach może pozwolić na ponowne wykorzystanie etapu przetwarzania obrazu, ale zmienia rozkład danych i dodaje okno czasowe. Oceń kompletny wniosek na podstawie reprezentatywnych danych.

Czy działająca wersja demonstracyjna laptopa potwierdza wbudowaną kompatybilność?

Nie. Potwierdź architekturę procesora, system operacyjny, interfejs czujnika, sterownik, licencję SDK i stałe wykorzystanie zasobów rzeczywistej platformy docelowej.

Co wysłać na rozmowę integracyjną?

Wyślij numer referencyjny kamery lub czujnika, przykładowe nagranie, zamierzony wynik, akceptowalne opóźnienie, platformę hosta, interfejs i środowisko wdrożenia. Dane te sprawiają, że dyskusja jest na tyle konkretna, że ​​pozwala zidentyfikować pierwsze zagrożenia związane z integracją.

Referencje techniczne

Przykłady dostawców opisują ich własny obsługiwany ekosystem. Potwierdź kompatybilność i licencję dla wybranego urządzenia i wdrożenia.

Zaplanuj integrację kamery eventowej.