Pular para o conteúdo principal

Solução de Detecção de Armas com IA para Alertas em Tempo Real na Borda

Notice

Este projeto é fornecido apenas para fins educacionais e de demonstração.
Se você pretende implantá-lo em um ambiente real, certifique-se de estar em conformidade com as regulamentações locais e obtenha todas as autorizações necessárias antes de fazê-lo.

Visão Geral

A Solução de Detecção de Armas com Frigate + Node-RED é uma pilha de análise de vídeo com IA de borda que detecta armas de fogo em streams de câmera ao vivo e orquestra alertas, revisão e integrações. Desenvolvida para implantações com preservação de privacidade e baixa latência em AI Boxes, na série NVIDIA Jetson e reComputer R2000, ela combina um mecanismo de detecção otimizado (Frigate) com uma camada de automação visual (Node‑RED) e revisão opcional assistida por LLM.

solution diagram

Ela oferece uma experiência completa de AI NVR1 que:

  • Detecta armas de fogo a partir de streams RTSP/HTTP ao vivo em tempo real.
  • Automatiza alertas de eventos, registro e notificações.
  • Opera localmente para garantir privacidade, baixa latência e confiabilidade.

Siga este guia para implantar a solução se o seu dispositivo não for do pacote da Seeed ou se você quiser adaptá-la à sua própria configuração.

Gestão de Segurança em Campus

Recursos

NVRs tradicionais dependem de monitoramento humano, que é lento, inconsistente e difícil de escalar. Esta solução resolve esses desafios ao se concentrar em resultados mensuráveis que entregam valor imediato.

  • Tempo de Resposta Mais Rápido

    Obtenha consciência situacional instantânea com alertas automáticos e painéis em tempo real, evitando os atrasos do monitoramento manual.

  • Menos Falsos Positivos

    Utilize verificação opcional assistida por LLM para revisar alertas de forma inteligente, reduzindo significativamente falsos alarmes e concentrando a atenção do operador.

  • Soberania de Dados & Privacidade

    Toda inferência e processamento de dados ocorre on‑premise, sem dependência de nuvem, garantindo total privacidade e controle dos dados.

  • Suporte Escalável a Múltiplos Streams

    Aproveite o poderoso decodificador de hardware nas plataformas Jetson e Hailo para monitorar múltiplos streams de câmera simultaneamente sem perda de desempenho.

Arquitetura do Sistema

A solução é composta por vários módulos principais que funcionam em conjunto:

system architecture
  • Frigate processa o vídeo ao vivo e publica eventos de detecção via MQTT.
  • Node-RED se inscreve nesses eventos, orquestra fluxos de trabalho de alerta e atualiza o painel.
  • O Painel em Tempo Real oferece monitoramento visual, revisão de eventos e configuração do sistema.
  • Webhooks permitem integração com quaisquer sistemas de terceiros para notificações e exportação de dados.

Guia de Implantação

Pré-requisitos

  • AI Boxes/Hardware de Borda: reComputer J3011/J4012 (série Jetson Nano/Xavier/Orin).
  • Câmeras de Rede: streams RTSP/HTTP acessíveis na mesma rede.
  • Familiaridade básica com Docker, Node-RED e configuração do Frigate.

Nesta página, usaremos o reComputer J4012 (Jetson Orin™ NX 16GB) como plataforma de exemplo. No entanto, as etapas são semelhantes para outros hardwares compatíveis.

Etapa 1: Instalação do Frigate

Notice

Execute o seguinte comando para instalar o curl se ele ainda não estiver instalado:

sudo apt update && sudo apt install -y curl

⚠️ Não execute sudo apt upgrade, pois isso pode quebrar dependências específicas do Jetson.


Use o script de instalação em um clique pré-configurado para implantar o Frigate automaticamente no seu dispositivo Jetson.

curl -sSL https://raw.githubusercontent.com/Seeed-Studio/frigate-on-jetson/main/install.sh | bash

Quando a instalação terminar, abra o navegador e acesse http://<your_jetson_ip>:5000 para entrar na interface web do Frigate e configurar suas câmeras.

Se não funcionar, verifique se você não tem falta de permissão para executar o Docker sem sudo. Consulte a seção de FAQ para passos de solução de problemas. Em seguida, execute novamente o comando acima.

Frigate Homepage

No NodeRED, nós iremos assinar os tópicos MQTT do Frigate para receber eventos de detecção e orquestrar fluxos de trabalho de alerta. Você pode consultar a documentação de MQTT do Frigate para mais detalhes sobre os tópicos e payloads disponíveis.

Etapa 2: Configuração do Node-RED

Usamos NodeRED como a camada de orquestração para lidar com a programação.

Instalação do Node-RED

Se você ainda não instalou o Node-RED, siga as etapas abaixo para configurá-lo no seu dispositivo Jetson.

Execute o Node-RED em um contêiner com o seguinte comando:

sudo docker run -d --restart=always -p 1880:1880 -v node_red_data:/data --name mynodered nodered/node-red

Depois que o contêiner iniciar, abra o navegador e acesse http://<your_jetson_ip>:1880 para entrar no editor do Node-RED.

nodered-panel

Instalação de Nodes

Antes de começarmos, certifique-se de instalar os seguintes nodes do Node-RED pela opção "Manage palette" no editor do Node-RED:

  • node-red-dashboard para construir o dashboard simples do front-end.
nodered-install-dashboard

Aplicações

Em ambientes como campi, centros de transporte, parques industriais e locais públicos, os operadores precisam responder instantaneamente a riscos envolvendo armas de fogo. Esta solução foi projetada para:

  • Campus & Educação

    Habilite alertas proativos para as equipes de segurança e facilite a revisão rápida de incidentes com dados de eventos registrados e capturas de tela.

  • Centros de Transporte Público

    Implemente monitoramento com múltiplas câmeras em estações e integre alertas diretamente em um Centro de Operações de Segurança (SOC) via webhooks.

  • Parques Industriais & Logística

    Proteja perímetros, pontos de acesso e zonas sensíveis com monitoramento automatizado que nunca se cansa ou se distrai.


Os seguintes demos de exemplo orientam você pelo processo de implantação e personalização da solução.

Demo 1 — Alerta de Detecção de Arma

Este demo mostra como criar um fluxo Node-RED que escuta eventos de detecção de arma do Frigate via MQTT e então dispara alertas em tempo real tanto em um dashboard quanto por meio de notificações via webhook.

Pipeline de Dados

Frigate (detecta arma) → MQTT (publica) → Node-RED (filtra/alerta) → Dashboard + Webhook

Exemplo de detecção de arma no Node-RED

Configuração do Fluxo Node-RED

Você pode importar o fluxo de exemplo diretamente no seu editor Node-RED usando o arquivo de configuração de fluxo fornecido (gist flow.json).

Observação: Atualize o endereço IP e a URL do webhook no fluxo para corresponder à sua instância do Frigate e ao endpoint de notificação.

O caminho de entrada do dashboard é configurado como /frigate. Acesse o dashboard em: http://<your_jetson_ip>:1880/dashboard/frigate

Por exemplo: http://192.168.101.100:1880/dashboard/frigate.

Visão Geral do Fluxo

  • Ouvinte MQTT – Assina um tópico específico (por exemplo, frigate/reviews) para receber eventos de detecção.
  • Filtro de Eventos – Deixa passar apenas eventos rotulados como “gun”.
  • Construtor de Alertas – Constrói uma mensagem de alerta detalhada incluindo miniatura, carimbo de tempo e contador.
  • Atualização do Dashboard – Atualiza o dashboard com a imagem mais recente, histórico de eventos e contadores de detecção.
  • Notificação via Webhook – Envia requisições HTTP POST para endpoints externos, como bot do Telegram, Slack ou APIs personalizadas.

Resultados

Visualização de eventos do Frigate

Depois de configurar este fluxo, o Node-RED responderá automaticamente aos eventos de detecção de arma do Frigate atualizando seu dashboard e enviando notificações imediatas via webhook.

Prossiga para a seção de Configuração do Frigate para instruções sobre como configurar os parâmetros de detecção.

Config Padrão do Frigate

Navegue rapidamente até a página de configuração do Frigate em http://<your_jetson_ip>:5000/config para ver sua configuração atual.

O Frigate usa um arquivo YAML chamado config.yml para definir como ele é executado. Este arquivo informa ao Frigate onde encontrar os streams da sua câmera, qual modelo de IA usar e como enviar os resultados de detecção por MQTT. Ao ajustá-lo, você pode controlar como os objetos são detectados, gravados e exibidos.

Local de Armazenamento

Por padrão, o Frigate armazena gravações de vídeo e capturas de tela em: /media/frigate no seu dispositivo Jetson.

Por exemplo:

seeed@desktop:/$ docker exec -it frigate /bin/sh
root@274103ae951b:/opt/frigate# cd /media/frigate/
root@274103ae951b:/media/frigate# ls
clips exports handgun.mp4 machinegun.mov recordings

Se você planeja manter vídeos por períodos mais longos, monte este diretório em um SSD externo ou unidade de rede para evitar que o armazenamento interno do seu Jetson fique cheio.

Configuração da Câmera

No Frigate, cada câmera precisa ser definida na seção cameras:. Cada bloco de câmera descreve de onde vem o fluxo de vídeo e como ele é decodificado antes de ser analisado pelo modelo de detecção.

cameras:
handgun:
enabled: true
ffmpeg:
hwaccel_args: preset-jetson-h264
inputs:
- path: /media/frigate/handgun.mp4
input_args: -stream_loop -1 -re
roles:
- detect
machinegun:
enabled: true
ffmpeg:
hwaccel_args: preset-jetson-h264
inputs:
- path: /media/frigate/machinegun.mov
input_args: -stream_loop -1 -re
roles:
- detect

Explicação:

  • enabled: Ativa ou desativa esta câmera.
  • ffmpeg: Define como o Frigate usa o FFmpeg para ler e decodificar o fluxo de vídeo.
    • FFmpeg é um framework de mídia que converte e transmite vídeo a partir de arquivos, câmeras RTSP ou outras fontes.
  • hwaccel_args: Habilita aceleração de hardware (por exemplo, decodificação H.264 no Jetson).
  • inputs: Lista uma ou mais entradas de vídeo.
    • path: A fonte de vídeo real.
      • Neste exemplo, é um arquivo de demonstração local como /media/frigate/handgun.mp4.
      • Em implantações reais, você pode substituí-lo por um fluxo de câmera ao vivo, como: path: rtsp://user:[email protected]:554/stream1
  • input_args: Parâmetros extras do FFmpeg.
    • -stream_loop -1 faz o loop do vídeo de demonstração indefinidamente.
    • -re garante que a reprodução corresponda à velocidade em tempo real.
  • roles: Define como esta entrada é usada.
    • detect significa que o fluxo é usado para detecção de objetos.
    • Outros papéis possíveis incluem record ou rtmp para streaming.
dica

Cada câmera pode ter várias entradas — por exemplo, uma para detecção e outra para gravação em alta qualidade. O Frigate gerencia automaticamente a decodificação e extração de quadros via FFmpeg para todas as fontes definidas.

Modelo de IA e Configurações de Detecção

Depois de definir as câmeras, o próximo passo é informar ao Frigate qual modelo de IA usar e como processar cada quadro de vídeo. Esta seção define o tipo de detector, o caminho do arquivo do modelo e o comportamento de detecção, como tamanho do quadro, rastreamento de objetos e limiar.

detectors:
tensorrt:
type: tensorrt
device: 0

model:
path: /config/model_cache/tensorrt/yolov4-tiny-288_gun_v3.trt
width: 288
height: 288
labelmap_path: /config/guns.txt
input_tensor: nchw
input_pixel_format: rgb

Explicação:

  • detectors: Define qual backend de IA o Frigate usa para inferência.
    • type: tensorrt informa ao Frigate para usar aceleração NVIDIA TensorRT (otimizada para Jetson).
    • device: Especifica o índice da GPU. Para a maioria dos dispositivos Jetson, use 0.
  • model: Aponta para o arquivo de modelo de IA e descreve seu formato de entrada.
    • path: Caminho para o seu arquivo .trt (engine TensorRT).
    • width / height: Resolução de entrada do modelo (deve corresponder ao que o modelo espera).
    • labelmap_path: Arquivo que mapeia índices de classes para rótulos, por exemplo guns.txt → contém "gun".
    • input_tensor: Define o layout do tensor; nchw = batch, canal, altura, largura.
    • input_pixel_format: Especifica o formato de pixel, geralmente rgb.
dica

Modelos TensorRT são versões compiladas de redes treinadas, otimizadas para inferência rápida em GPU. Você pode substituir este arquivo pelo seu próprio modelo se treinar um novo — apenas garanta que a largura, altura e rótulos correspondam.

Configuração de Rastreamento de Objetos

O Frigate pode detectar e rastrear tipos específicos de objetos. Para este projeto, rastreamos apenas armas, o que mantém o sistema eficiente e focado.

objects:
track:
- gun
filters:
gun:
threshold: 0.3

Explicação:

  • track: Lista de objetos para detectar e rastrear.
    • Aqui é apenas "gun", mas você pode adicionar mais rótulos (por exemplo, pessoa, carro etc.) se o seu modelo os suportar.
  • filters: Ajusta finamente a confiança de detecção para cada tipo de objeto.
  • threshold: Valor mínimo de confiança (0,0–1,0).
    • Um valor mais baixo (como 0,3) é mais sensível, mas pode incluir falsos positivos.
    • Um valor mais alto (como 0,5) torna a detecção mais rígida.
dica

Se você notar muitas detecções falsas, tente aumentar o threshold para 0,5 ou mais. Para objetos menores que são frequentemente perdidos, você pode diminuí-lo um pouco — mas equilibre entre precisão e ruído.

Configurações de Gravação

Quando o Frigate detecta um objeto, ele pode gravar vídeos e salvar snapshots para análise posterior ou exibição de alertas. Essas configurações controlam por quanto tempo as gravações são armazenadas e quais informações são exibidas nas imagens capturadas.

record:
enabled: true
retain:
days: 3
mode: all

Explicação:

  • enabled: Ativa a gravação de vídeo.
  • retain: Controla por quanto tempo manter os arquivos gravados e que tipo de filmagem é armazenada.
    • days: Número de dias para manter as gravações antes da exclusão automática.
    • mode:
      • all – grava continuamente (útil para testes).
      • motion – grava apenas quando for detectado movimento.
      • events – grava somente quando objetos rastreados (por exemplo, armas) aparecem.
dica

Para implantações reais, use mode: events ou mode: motion para economizar espaço de armazenamento mantendo gravações úteis.

Configurações de Snapshot

snapshots:
enabled: true
clean_copy: true
timestamp: true
bounding_box: true
crop: false
retain:
default: 14
quality: 95

Explicação:

  • enabled: Habilita o salvamento de snapshots quando ocorre um evento de detecção.
  • clean_copy: Salva uma versão adicional sem caixas de detecção.
  • timestamp: Adiciona a sobreposição de data e hora no snapshot.
  • bounding_box: Desenha uma caixa ao redor dos objetos detectados.
  • crop: Quando true, salva apenas a área recortada da detecção.
  • retain.default: Número de dias para manter os snapshots.
  • quality: Define a qualidade da imagem (1–100). Maior = melhor detalhe, porém tamanho de arquivo maior.
dica

Snapshots são ideais para alertas ou dashboards, pois são muito menores que clipes de vídeo e fáceis de enviar via webhook ou MQTT.

Visão Birdseye

O Frigate também suporta uma visão Birdseye, que exibe múltiplos feeds de câmera juntos para uma visão geral rápida.

birdseye:
enabled: true
mode: objects

Explicação:

  • enabled: Ativa a visão composta Birdseye.
  • mode:
    • objects – mostra apenas câmeras onde objetos estão sendo detectados no momento.
    • continuous – sempre mostra todos os feeds de câmera.

Configuração de MQTT

O Frigate comunica seus eventos de detecção por meio de MQTT, o que permite que outros serviços — como Node-RED, Home Assistant ou dashboards personalizados — recebam atualizações em tempo real sempre que um objeto é detectado. Ele também fornece opções de registro (logging) para ajudar a monitorar o desempenho do sistema e depurar problemas de detecção.

mqtt:
enabled: true
host: 172.17.0.1
port: 1883

Explicação:

  • enabled: Ativa a comunicação via MQTT.
  • host: O endereço IP do seu broker MQTT.
    • Ao usar Docker no Jetson, 172.17.0.1 geralmente se refere à máquina host.
    • Substitua pelo IP real do seu servidor MQTT se você o executar em outro dispositivo.
  • port: Porta padrão do MQTT, normalmente 1883.

Para configurações MQTT mais avançadas, consulte a documentação MQTT do Frigate.

Com o MQTT habilitado, o Frigate se torna parte de uma rede de eventos em tempo real — enviando alertas de detecção de armas diretamente para o Node-RED ou Home Assistant, onde eles podem acionar dashboards, notificações ou fluxos de trabalho personalizados.

Desempenho e Dimensionamento

Plataforma de HardwareModeloFPS (Total)Streams Estáveis (≥15 FPS)Observações
reComputer R2000 (Raspberry Pi + Hailo-8)YOLOv11-s302NVR de IA compacto; dispositivo de borda eficiente e de baixo consumo
reComputer J3011 (Jetson Orin Nano 8 GB)YOLOv4-tiny-288906Jetson de entrada; FPS estabiliza após aquecimento
reComputer J4012 (Jetson Orin NX 16 GB)YOLOv4-tiny-2881208Limite de concorrência NVDEC atingido; ainda há folga de computação

Recursos e Próximos Passos

FAQ

1. Não consigo instalar Docker no meu dispositivo Jetson. O que devo fazer?

Se você encontrar problemas com o script padrão de instalação do Docker, pode usar o seguinte script alternativo:

bash <(curl -sSL https://linuxmirrors.cn/docker.sh)

Para mais informações, visite: https://linuxmirrors.cn

2. Como saber minha versão do Jetpack?

Execute o seguinte comando no seu dispositivo Jetson:

dpkg -l | grep nvidia-jetpack

A saída mostrará a versão do Jetpack instalada.

3. Como atualizar minha versão do Jetpack?

Siga as instruções na wiki do seu produto específico.

4. “Permission Denied” ao executar Docker

Você não tem permissão para acessar o daemon do Docker. Execute:

sudo usermod -aG docker $USER
newgrp docker

Fazer logout e login novamente também aplica as novas permissões de grupo.

Depois verifique:

docker ps

Footnotes

  1. AI NVRs utilizam modelos avançados de aprendizado de máquina para fornecer insights em tempo real e capacidades de automação, enquanto NVRs tradicionais se concentram principalmente em gravar e armazenar imagens de vídeo. `

Loading Comments...