Detector de "Sinal de Socorro" em Tempo Real
Um sistema de segurança baseado em Visão Computacional que identifica pedidos de ajuda e dispara alertas via API.
A Inspiração
Entrei na área de Dados justamente por causa da Visão Computacional. Eu ficava impressionado assistindo aqueles vídeos de carros autônomos e câmeras de segurança inteligentes, tentando entender como as máquinas "enxergavam" o mundo. Curiosamente, o caminho profissional me levou para análises e automações, mas decidi tirar um fim de semana para finalmente colocar a mão na massa no que me trouxe para essa carreira.
Não queria fazer apenas um "Hello World". Queria algo diferente, com impacto real. Desenvolvi um sistema capaz de identificar o "Sinal de Socorro" (Signal for Help) em tempo real e disparar um alerta silencioso via API.
Por conta desta aplicação e da repercussão do meu post original, fui convidado para ministrar uma aula sobre Visão Computacional para alunos da TripleTen, compartilhando toda a engenharia e os desafios práticos da construção deste sistema (você pode conferir o post sobre a aula aqui).
Como Funciona a Lógica?
Diferente de abordagens tradicionais que exigem o treinamento de modelos pesados de Deep Learning, este sistema utiliza Geometria Euclidiana e Álgebra Linear para analisar a biomecânica da mão em tempo real usando apenas CPU. O algoritmo segue um pipeline de decisão rigoroso através de uma Máquina de Estados Finita (FSM) para evitar detectar um "tchau" ou gestos aleatórios:
- Estágio 1 (Armar): O sistema extrai 21 landmarks via MediaPipe e verifica se os 4 dedos estão levantados. Calculamos a Distância Euclidiana entre a ponta do dedão e a base do mindinho. Se for curta (dedão escondido na palma), entra no estado de ALERTA (Laranja) na UI.
- Estágio 2 (Disparar): Uma janela temporal invisível de apenas 2 segundos é aberta. Se o usuário fechar o punho (abaixar os 4 dedos juntos) estritamente dentro desse limite, a intenção de socorro é comprovada matematicamente.
- Output Assíncrono: A tela pisca em vermelho como feedback visual e dispara magicamente um POST Request de alerta para o N8N (ou qualquer webhook de segurança).
Desafios de Engenharia Superados
Para construir a solução, diversos obstáculos práticos do uso de processamento de imagens ao vivo precisaram ser trabalhados para o algoritmo não ser lento e nem impreciso:
- Processamento Paralelo (Threading): Sem dúvida o desafio crucial de UX. Utilizar Threading foi vital porque sem isso ocorre o famoso "Blocking I/O". Basicamente, o vídeo "congelava" toda vez que o Python aguardava a resposta de sucesso do servidor HTTP na internet. Colocando o request em uma Thread separada, o FPS da câmera local se manteve inalterado.
- Independência de Profundidade: Como a lógica mede as proporções das juntas em vez de calcular distâncias exatas de pixels na tela, a segurança matemática funciona quer a mão da pessoa esteja muito perto da câmera, ou lá no final do quarto.
- Tratamento de Matrizes: A clássica dor de cabeça com canais de cores. Garantir a fluidez na hora de reverter o espaço de cores nativo BGR lido nativamente pelo OpenCV para o formato RGB exigido pelos modelos de análise de pose para então desenhar as Bounding Boxes devolvendo à tela original.