Ko apstrādā uz notikumiem balstīta redzes programmatūra?

Notikumu kamera ziņo par spilgtuma izmaiņām, nevis nodrošina parasto video kadru katrā intervālā. Dekodēts notikums parasti identificē pikseli, polaritāti un laikspiedolu. Jūsu lietojumprogrammai ir jāsaglabā šo lauku nozīme, veicot iegūšanu, filtrēšanu, ierakstīšanu un secinājumus. The salīdzinājums, kas balstīts uz notikumiem un kadriem paskaidro, kad šis datu modelis ir noderīgs.

Dizainā izšķir trīs formātus: sensora vai transporta kodējumu, programmatūras izmantoto dekodēto notikumu attēlojumu un algoritmam nodoto attēlojumu. Fails, kurā ir neapstrādātas sensoru paketes, dekodētu notikumu masīvs un uzkrāts attēls, kalpo dažādiem mērķiem. Konvertēšana starp tām var mainīt atmiņas izmantošanu, apstrādes izmaksas un pakārtoto pieejamo laika informāciju.

PārstāvībaNoderīgs priekšIntegrācijas jautājums
Neapstrādātas paketes vai pārdevēja ierakstsIegūšanas un dekodēšanas uzvedības reproducēšanaVai izvietotais dekodētājs var nolasīt tieši šo ierīces un formāta versiju?
Atšifrēti notikumiFiltrēšana, laika analīze un notikumu vietējie algoritmiKas ir laikspiedola vienība, pulksteņa domēns un koordinātu vienošanās?
Laika virsmas vai vokseļiem līdzīgi tenzoriAlgoritmi, kuriem nepieciešams strukturēts laika attēlojumsKuri vēstures, grupēšanas un normalizācijas iestatījumi ir jāatveido?
Uzkrātie notikumu attēliVizualizācija vai saderīga uz attēlu balstīta apstrādes stadijaCik lielu kavēšanos un informācijas zudumu rada uzkrāšanas logs?

Kā novērtēt notikumu kameru SDK

Sāciet ar precīzu sensoru, kameras programmaparatūru un resursdatora platformu. Darbvirsmas demonstrācija nenodrošina atbalstu iegultam Linux attēlam, ARM procesoram vai jūsu ražošanas licencei. Jautājiet piegādātājam par atbalstītajām operētājsistēmām, CPU arhitektūrām, pārdales nosacījumiem un kameras saskarnes prasībām. Pirms nesēja shēmas plates pievienošanas skaitļošanas modulim, pārbaudiet lietojumprogrammu paredzētajā platformā.

  • Iegūšana: ierīces atklāšana, konfigurēšana, dekodēšana un kļūdu ziņošana.
  • Laiks: laikspiedola izcelsme, apgāšanās apstrāde, ārējie aktivizētāji un vairāku ierīču izlīdzināšana.
  • Reproducējamība: ierakstus, konfigurācijas eksportu un identificētu programmatūras versiju.
  • Izvietošana: bezgalvu darbība, atbalstītie binārie faili, restartēšanas darbība un licences noteikumi.
  • Novērojamība: notikumu skaits, rindu dziļums, izlaistie dati un resursdatora resursu izmantošana.

Izveidojiet cauruļvadu ar skaidrām laika robežām

IegūtAtšifrēt un saglabāt sensora laiku
SagatavotFiltrējiet, sinhronizējiet un veidojiet logus
IzlemietIzsekojiet vai seciniet, pēc tam uzspiediet izvadei laikspiedolu

Turiet iegūšanu atsevišķi no dārgas vizualizācijas, diska ierakstīšanas un modeļa secinājumiem. Pretējā gadījumā lēns patērētājs var aizkavēt jaunus datus, pirms algoritms pat sāk darboties. Definējiet ierobežotu rindu un skaidru pārslodzes politiku. Vecākā loga nomešana, interesējošā reģiona samazināšana un apstāšanās ar kļūdu rada dažādas sekas; izvēlieties lietojumprogrammai piemēroto uzvedību un pierakstiet, kad tā notiek.

Izmantojiet sensoru laikspiedolus, lai aprakstītu novērojumu laiku, un monotonu resursdatora pulksteni, lai izmērītu apstrādes ilgumu. Atņemot laikspiedolus no nesaistītiem pulksteņiem, netiek iegūts derīgs latentums no gala līdz galam. Ja kamera ir jāapvieno ar IMU vai parasto kameru, izveidojiet pulksteņa attiecību un kalibrēšanas procesu, kas aprakstīts mūsu sensoru saplūšanas sinhronizācijas rokasgrāmata.

Neliels ieraksta-pārbaudes piemērs

Nākamajā Python piemērā tiek uzskaitīti atšifrētie notikumi atbalstītajā ierakstā un tiek ziņots par to laikspiedolu diapazonu. Tajā tiek izmantota dokumentētā Metavision straumēšana API, un ir nepieciešama saderīga SDK instalēšana un ierakstīšana. Tas ir pārbaudes piemērs, nevis ALVEXIS kameras etalons vai detektors.

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

Laikspiedols aptver no pirmā līdz pēdējam novērotajam notikumam; tas nemēra faila ilgumu, iegūšanas aizkavi vai apstrādes caurlaidspēju. Tukšie periodi un pulksteņa atiestatīšana ražošanā ir jāapstrādā atsevišķi. Saglabājiet ierīces konfigurāciju un ierakstīšanas metadatus kopā ar failu, lai otrs inženieris varētu reproducēt interpretāciju.

Apstipriniet klusas ainas, aizņemtas ainas un neveiksmju atkopšanu

Pārbaudiet stacionāru ainu, reprezentatīvu kustību un apzināti prasīgu ainu. Mirgošana, kameras vibrācija un teksturētas kustības var radīt ļoti atšķirīgu notikumu ātrumu. Pierakstiet gan tipisku uzvedību, gan sliktāko gadījumu, ko novērojāt. Atkārtojiet, kad ir aktīva krātuve un sakari, jo šīs darba slodzes sacenšas par atmiņu un CPU laiku.

PārbaudeIerakstsLēmums, ko tas atbalsta
Atkārtoti atskaņojiet to pašu ierakstuKonfigurācija, izvades atšķirības un apstrādes ilgumsVai programmatūras izmaiņas var novērtēt reproducējami?
Palieliniet ainas aktivitātiRindas dziļums, notikumu zudums un izvades vecumsVai sistēma joprojām ir izmantojama maksimālās slodzes laikā?
Mainiet apstrādes loguLietojuma precizitāte un sensora izvades aizkaveKurš laika/detaļu kompromiss atbilst prasībai?
Atvienojiet un atkārtoti pievienojiet ierīciAtkopšanas laiks, pulksteņa atiestatīšana un ierakstīšanas nepārtrauktībaVai izvietotais pakalpojums var atkopties paredzami?

Kad algoritms izmanto neironu tīklu, pirms akseleratora izvēles pārbaudiet iegūto tensoru un atbalstītos operatorus. Notikuma kamerai automātiski nav nepieciešams NPU, un NPU automātiski nepieņem notikumu straumi. Mūsu FPGA, NPU un MPU arhitektūras ceļvedis atdala iegūšanas, pirmapstrādes, secinājumu un lietojumprogrammu pakalpojumus.

Jautājumi pirms programmatūras steka izvēles

Vai es varu izmantot parastu datorredzes modeli?

Tikai pēc saderīgas ievades attēlojuma definēšanas un tā uzvedības apstiprināšanas. Notikumu uzkrāšana attēlos var ļaut atkārtoti izmantot attēlu apstrādes stadiju, bet maina datu sadalījumu un pievieno laika logu. Novērtējiet visu pieteikumu, pamatojoties uz reprezentatīviem datiem.

Vai strādājoša klēpjdatora demonstrācija pierāda iegulto saderību?

Nē. Apstipriniet faktiskās mērķa platformas centrālā procesora arhitektūru, operētājsistēmu, sensora saskarni, draiveri, SDK licenci un ilgtspējīgu resursu izmantošanu.

Kas man jānosūta uz integrācijas diskusiju?

Nosūtiet kameras vai sensora atsauci, ieraksta paraugu, paredzēto izvadi, pieņemamo aizkavi, resursdatora platformu, saskarni un izvietošanas vidi. Šie ieguldījumi padara diskusiju pietiekami konkrētu, lai identificētu pirmos integrācijas riskus.

Neiromorfā redze datorredzes cauruļvadā

Notikumu kameras bieži tiek apspriestas neiromorfā redzēšanā, jo to izvades ieraksti mainās atsevišķos pikseļos, nevis fiksētā pilnu attēlu secībā. Šis datu attēlojums automātiski nenodrošina objekta noteikšanu vai neironu tīkla rezultātu. Programmatūrai joprojām ir nepieciešams definēts uzdevums, saderīgs algoritms un izmērāmi pieņemšanas kritēriji.

Integrējot ar uz kadru orientētiem datora redzes rīkiem, notikumu straumi var pārveidot par laika loga attēlu vai citu atveidojumu. Saglabājiet sākotnējos laikspiedolus, ja uzdevums ir atkarīgs no precīzas laika informācijas. Novērtējiet visu konversijas un apstrādes cauruļvadu; pievilcīgs rekonstruēts attēls vien nenosaka galīgā lietojuma precizitāti vai latentumu.

Plānojiet laiku pirms sensoru datu saplūšanas

Tehniskās atsauces

Pārdevēju piemēri apraksta viņu pašu atbalstīto ekosistēmu. Apstipriniet izvēlētās ierīces un izvietošanas saderību un licencēšanu.

Plānojiet savu notikumu un kameras integrāciju.