You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
O SafeAge é um sistema de monitoramento residencial com inteligência artificial para detecção de comportamentos anômalos em idosos. O sistema usa uma câmera IP/RTSP integrada ao Frigate NVR (detector YOLO) e analisa continuamente dois padrões de risco:
Imobilidade prolongada — pessoa presente no frame sem movimento por tempo configurado
Ausência prolongada — nenhuma detecção de presença por tempo configurável
Quando um padrão de risco é identificado, o sistema dispara alertas automáticos via Telegram (com snapshot da câmera) e registra tudo em um dashboard web em tempo real.
3. Escopo
✅ Incluído
Detecção de presença via câmera RTSP com modelo YOLO (CPU)
Análise comportamental autônoma com dois limiares configuráveis
Alertas em tempo real via Telegram com foto snapshot
Dashboard web responsivo com métricas, gráfico por hora e alertas recentes
Persistência em banco PostgreSQL
Containerização completa com Docker Compose
Rate limiting configurável para evitar spam de notificações
Limpeza automática de snapshots após envio
❌ Fora do escopo (v1.0)
Reconhecimento facial individual
Integração com serviços de emergência (SAMU, bombeiros)
App mobile nativo
Suporte a múltiplas residências simultâneas via nuvem
# 1. Clone o repositório
git clone https://github.com/GerlanGuerreiro/SafeAge.git
cd SafeAge
# 2. Crie o arquivo de configuração
cp .env.example .env
# Edite o .env com suas credenciais (câmera, Telegram, banco)# 3. Suba todos os serviços
docker compose up -d
# 4. Acesse o dashboard# http://localhost:8000
Verificar se está tudo saudável
docker ps
# Todos os containers devem estar "healthy" ou "Up"
docker logs api_monitoramento --tail 20
# Deve exibir "SafeAge pronto para monitorar"
9. Configuração do Ambiente
Copie .env.example para .env e preencha:
# ── BANCO DE DADOS ──────────────────────────────────────────USUARIO_BANCO=postgresSENHA_BANCO=sua_senha_aquiNOME_BANCO=monitoramento# ── MQTT ────────────────────────────────────────────────────ENDERECO_BROKER_MQTT=broker_mqttPORTA_BROKER_MQTT=1883# ── TELEGRAM ────────────────────────────────────────────────TELEGRAM_TOKEN=seu_token_aquiTELEGRAM_CHAT_ID=seu_chat_id_aquiTELEGRAM_RATE_LIMIT_MINUTOS=10# 0 para testes# ── CÂMERA RTSP ─────────────────────────────────────────────CAMERA_USER=adminCAMERA_PASS=senha_cameraCAMERA_HOST=192.168.0.XCAMERA_PORT=8554CAMERA_ENDPOINT=stream# ── GERAL ───────────────────────────────────────────────────TZ=America/Manaus
Parâmetros comportamentais (em backend/analise_comportamento.py)
TEMPO_IMOBILIDADE=timedelta(minutes=5) # Alerta se mesmo evento > 5 minTEMPO_AUSENCIA=timedelta(minutes=15) # Alerta se sem detecção > 15 minINTERVALO_VERIFICACAO_S=30# Verifica a cada 30 segundosJANELA_ANTI_SPAM_ALERTA=timedelta(minutes=30) # Intervalo mínimo entre alertas no banco
10. Testes
Testes funcionais manuais
Testar alerta de imobilidade
# 1. Coloque o sistema em modo de teste (zerando anti-spam)# Em analise_comportamento.py: JANELA_ANTI_SPAM_ALERTA = timedelta(seconds=0)# No .env: TELEGRAM_RATE_LIMIT_MINUTOS=0# 2. Rebuild e suba
docker compose down && docker compose build backend && docker compose up -d
# 3. Fique parado na frente da câmera pelo tempo de TEMPO_IMOBILIDADE# O alerta deve chegar no Telegram dentro de ~30s após o limiar# 4. Monitore os logs em tempo real
docker logs -f api_monitoramento | grep -E "(Alerta|imobilidade|Snapshot)"
Testar alerta de ausência
# Saia do campo de visão da câmera pelo tempo de TEMPO_AUSENCIA# Monitore:
docker logs -f api_monitoramento | grep "ausencia"
Testar snapshot no Telegram
# Verificar se o volume está mapeado corretamente
docker exec api_monitoramento ls /media/frigate/clips/ | grep ".jpg"| head -5
# Se não listar arquivos, verificar docker-compose.yml:# volumes:# - ./midias/clips:/media/frigate/clips:ro
Verificações de saúde
# Status geral
docker ps --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"# Health check da API
curl http://localhost:8000/health
# Verificar banco de dados
docker exec -it banco_monitoramento psql -U postgres -d monitoramento \
-c "SELECT COUNT(*) as eventos FROM eventos_monitoramento;"
docker exec -it banco_monitoramento psql -U postgres -d monitoramento \
-c "SELECT id, tipo_alerta, criado_em FROM alertas ORDER BY id DESC LIMIT 5;"# Verificar conectividade MQTT
docker logs broker_mqtt --tail 10