Dashboard

Eventos

recognition.created

Disparado sempre que uma câmera detecta e reconhece uma placa veicular.

Quando dispara

  • Uma câmera ativa processa um frame contendo uma placa legível
  • A confiança do reconhecimento é igual ou superior à confiança mínima configurada na câmera
  • O reconhecimento é salvo no banco de dados

Este é o evento mais frequente — dispara para cada placa detectada por cada câmera.

Payload

{
  "event": "recognition.created",
  "timestamp": "2026-03-22T14:30:00.000Z",
  "data": {
    "id": "550e8400-e29b-41d4-a716-446655440000",
    "plate": "ABC1D23",
    "confidence": 0.96,
    "cameraId": "7012e192-5005-43b6-978c-7e304b3676a6",
    "cameraName": "Entrada principal",
    "timestamp": "2026-03-22T14:30:00.000Z",
    "photoUrl": "frames/7012e192/2026-03-22/photo.jpg",
    "cropUrl": "frames/7012e192/2026-03-22/crop.jpg",
    "plateCoordinates": {
      "x": 622,
      "y": 301,
      "width": 429,
      "height": 80
    }
  }
}

Campos

CampoTipoDescrição
data.idstringID único do reconhecimento
data.platestringTexto da placa (sempre uppercase)
data.confidencenumberConfiança entre 0 e 1
data.cameraIdstringUUID da câmera
data.cameraNamestringNome da câmera no dashboard
data.timestampstringISO 8601 com timezone
data.photoUrlstring?Chave S3 do frame completo
data.cropUrlstring?Chave S3 do recorte da placa
data.plateCoordinatesobject?Bounding box: x, y, width, height em pixels

Dica

Os campos photoUrl e cropUrl são chaves S3 internas — não são URLs públicas. Para acessar as imagens, use a API GET /api/recognitions/:id que retorna URLs presignadas.

Exemplo de uso

Registro de entrada em estacionamento

app.post('/webhook', (req, res) => {
  const { plate, cameraName, timestamp } = req.body.data;

  if (cameraName === 'Entrada') {
    db.registerEntry(plate, timestamp);
  }

  if (cameraName === 'Saída') {
    const entry = db.getEntry(plate);
    const minutes = calculateMinutes(entry.timestamp, timestamp);
    processExit(plate, minutes);
  }

  res.json({ ok: true });
});

Filtrar por confiança

app.post('/webhook', (req, res) => {
  const { plate, confidence } = req.body.data;

  // Ignorar reconhecimentos com baixa confiança
  if (confidence < 0.85) {
    return res.json({ action: 'ignored' });
  }

  processPlate(plate);
  res.json({ ok: true });
});

Volume esperado

Este evento pode gerar alto volume dependendo do tráfego de veículos. Para uma câmera em estacionamento movimentado, espere 50-200 eventos por hora.

Atenção

Se você só precisa ser notificado para placas específicas ou em horários determinados, use alertas em vez de processar todos os recognition.created. O evento alert.triggered já faz essa filtragem.

Esta página foi útil?