O que o software de visão baseado em eventos processa?

Uma câmera de eventos relata alterações no brilho em vez de fornecer um quadro de vídeo convencional a cada intervalo. Um evento decodificado normalmente identifica um pixel, uma polaridade e um carimbo de data/hora. Sua aplicação deve preservar o significado desses campos por meio de aquisição, filtragem, registro e inferência. O comparação baseada em eventos versus comparação baseada em quadros explica quando esse modelo de dados é útil.

Distinguir três formatos no projeto: a codificação do sensor ou transporte, a representação decodificada do evento usada pelo software e a representação passada para um algoritmo. Um arquivo contendo pacotes brutos de sensores, uma série de eventos decodificados e uma imagem acumulada servem a propósitos diferentes. A conversão entre eles pode alterar o uso da memória, o custo de processamento e as informações de temporização disponíveis no downstream.

RepresentaçãoÚtil paraPergunta de integração
Pacotes brutos ou gravação de fornecedorReproduzindo comportamento de aquisição e decodificaçãoO decodificador implantado pode ler exatamente esse dispositivo e revisão de formato?
Eventos decodificadosFiltragem, análise de tempo e algoritmos nativos de eventosQuais são a unidade de carimbo de data/hora, o domínio do relógio e a convenção de coordenadas?
Superfícies de tempo ou tensores semelhantes a voxelAlgoritmos que necessitam de uma representação temporal estruturadaQuais configurações de histórico, categorização e normalização devem ser reproduzidas?
Imagens de eventos acumuladasVisualização ou um estágio de processamento baseado em imagem compatívelQuanto atraso e perda de informação a janela de acumulação introduz?

Como avaliar um SDK de câmera de evento

Comece com o sensor exato, o firmware da câmera e a plataforma host. Uma demonstração de desktop não estabelece suporte para uma imagem Linux incorporada, um processador ARM ou sua licença de produção. Pergunte ao fornecedor os sistemas operacionais suportados, arquiteturas de CPU, condições de redistribuição e requisitos de interface da câmera. Verifique a aplicação na plataforma pretendida antes de confirmar a placa transportadora.

  • Aquisição: descoberta, configuração, decodificação e relatório de erros de dispositivos.
  • Tempo: origem do carimbo de data/hora, tratamento de rollover, gatilhos externos e alinhamento de vários dispositivos.
  • Reprodutibilidade: gravações, exportação de configuração e uma versão de software identificada.
  • Implantação: operação headless, binários suportados, comportamento de reinicialização e termos de licença.
  • Observabilidade: contagens de eventos, profundidade da fila, dados eliminados e uso de recursos do host.

Crie um pipeline com limites de tempo explícitos

AdquirirDecodifique e preserve o tempo do sensor
Prepare-seFiltrar, sincronizar e formar janelas
DecidirRastreie ou infira e, em seguida, registre a data e hora da saída

Mantenha a aquisição separada da dispendiosa visualização, gravação em disco e inferência de modelo. Caso contrário, um consumidor lento pode atrasar novos dados antes mesmo de o algoritmo ser iniciado. Defina uma fila limitada e uma política de sobrecarga explícita. Descartar a janela mais antiga, reduzir a região de interesse e parar com erro têm consequências diferentes; escolha o comportamento que se adapta à aplicação e registre quando isso acontecer.

Use carimbos de data/hora do sensor para descrever quando as observações ocorreram e um relógio host monotônico para medir a duração do processamento. Subtrair carimbos de data/hora de relógios não relacionados não produz uma latência válida de ponta a ponta. Se a câmera precisar ser combinada com uma IMU ou câmera convencional, estabeleça a relação do relógio e o processo de calibração descrito em nosso guia de sincronização de fusão de sensores.

Um pequeno exemplo de inspeção de gravação

O exemplo Python a seguir conta eventos decodificados em uma gravação compatível e relata a extensão de seus carimbos de data/hora. Ele usa a API de streaming Metavision documentada e requer instalação e gravação de SDK compatível. É um exemplo de inspeção, não um benchmark de câmera Alvexis ou um detector.

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

O intervalo de carimbo de data/hora cobre do primeiro ao último evento observado; ele não mede a duração do arquivo, o atraso na aquisição ou o rendimento do processamento. Períodos vazios e redefinições de relógio precisam de tratamento separado na produção. Mantenha a configuração do dispositivo e os metadados de gravação ao lado do arquivo para que um segundo engenheiro possa reproduzir a interpretação.

Valide cenas silenciosas, cenas ocupadas e recuperação de falhas

Teste uma cena estacionária, um movimento representativo e uma cena deliberadamente exigente. Cintilação, vibração da câmera e movimento texturizado podem criar taxas de eventos muito diferentes. Registre o comportamento típico e o pior caso que você observou. Repita com o armazenamento e as comunicações ativas, pois essas cargas de trabalho competem por memória e tempo de CPU.

TesteGravarDecisão que apoia
Repetir a mesma gravaçãoConfiguração, diferenças de saída e duração do processamentoUma alteração de software pode ser avaliada de forma reproduzível?
Aumentar a atividade da cenaProfundidade da fila, perda de eventos e idade de saídaO sistema permanece utilizável sob carga de pico?
Alterar a janela de processamentoPrecisão da aplicação e atraso do sensor à saídaQual compensação de tempo/detalhe atende ao requisito?
Desconecte e reconecte o dispositivoTempo de recuperação, redefinição do relógio e continuidade da gravaçãoO serviço implantado pode se recuperar de forma previsível?

Quando o algoritmo usa uma rede neural, verifique o tensor resultante e os operadores suportados antes de escolher um acelerador. Uma câmera de eventos não requer automaticamente um NPU e um NPU não aceita automaticamente um fluxo de eventos. Nosso Guia de arquitetura FPGA, NPU e MPU separa serviços de aquisição, pré-processamento, inferência e aplicação.

Perguntas antes de escolher uma pilha de software

Posso usar um modelo normal de visão computacional?

Somente após definir uma representação de entrada compatível e validar seu comportamento. O acúmulo de eventos em imagens pode permitir a reutilização de um estágio de processamento de imagens, mas altera a distribuição dos dados e adiciona uma janela de temporização. Avalie o aplicativo completo com base em dados representativos.

Uma demonstração de laptop funcional prova compatibilidade incorporada?

Não. Confirme a arquitetura da CPU, o sistema operacional, a interface do sensor, o driver, a licença do SDK e o uso sustentado de recursos da plataforma de destino real.

O que devo enviar para uma discussão de integração?

Envie a referência da câmera ou sensor, gravação de amostra, saída pretendida, atraso aceitável, plataforma host, interface e ambiente de implantação. Estes contributos tornam a discussão suficientemente concreta para identificar os primeiros riscos de integração.

Referências técnicas

Os exemplos de fornecedores descrevem seu próprio ecossistema compatível. Confirme a compatibilidade e o licenciamento do dispositivo e implantação escolhidos.

Planeje sua integração de câmera de evento.