2 pontos por GN⁺ 2026-03-26 | 1 comentários | Compartilhar no WhatsApp
  • Busca cenas em arquivos de vídeo, como os de dashcam, usando linguagem natural e recorta automaticamente o trecho correspondente com um sistema de busca semântica
  • Usa o modelo Google Gemini Embedding 2 para gerar embeddings do próprio vídeo em vetores e armazená-los no ChromaDB, comparando-os diretamente com consultas em texto
  • Faz embedding dos vídeos em chunks sobrepostos com ffmpeg e, na busca, retorna o trecho mais semelhante com velocidade em frações de segundo
  • Recursos de pré-processamento e salto de quadros estáticos reduzem o custo de chamadas à API, com custo de cerca de US$ 2,84 para indexar 1 hora de vídeo
  • Aproveita o recurso de embedding direto de vídeo do Gemini Embedding 2 para permitir busca semântica rápida em vídeos com várias horas de duração sem precisar gerar legendas

Visão geral

  • SentrySearch é uma ferramenta de busca semântica em vídeos de dashcam (semantic search); quando o usuário digita uma consulta em linguagem natural, ela retorna um clip recortado (trimmed clip) contendo a cena correspondente
  • Usa o modelo Google Gemini Embedding 2 para gerar embeddings do próprio vídeo em vetores e armazená-los em um banco de dados local ChromaDB
  • A consulta em texto é embutida no mesmo espaço vetorial para encontrar os trechos de vídeo mais semelhantes
  • O resultado da busca é automaticamente recortado e salvo a partir do arquivo original, oferecendo velocidade de busca em subsegundos (sub-second)

Como funciona

  • O vídeo é dividido em trechos sobrepostos (overlapping chunks), e cada trecho é diretamente embutido pelo modelo Gemini Embedding
  • Cada vetor de embedding é armazenado no ChromaDB; na busca, a consulta em texto é convertida para o mesmo espaço vetorial e comparada
  • O trecho com maior similaridade é automaticamente recortado do vídeo original e salvo como clip
  • O ffmpeg é usado para divisão e recorte do vídeo; se não estiver instalado no sistema, o imageio-ffmpeg é usado automaticamente

Instalação e configuração inicial

  • Pode ser instalado em ambiente com Python 3.10 ou superior com o seguinte comando
    • após git clone, execute pip install -e .
  • O comando sentrysearch init configura a chave da API Gemini e a salva no arquivo .env
    • Um embedding de teste é executado para validar a chave
  • Na configuração manual, é possível copiar .env.example e adicionar a chave da API diretamente

Principais comandos e opções

  • index

    • Faz a indexação varrendo recursivamente os arquivos .mp4 dentro da pasta especificada
    • Cada arquivo é dividido em vários chunks para embedding
    • Opções
      • --chunk-duration : duração do chunk (em segundos)
      • --overlap : duração da sobreposição entre chunks
      • --no-preprocess : pula o downscale e a redução de quadros
      • --target-resolution : resolução-alvo no pré-processamento (padrão: 480p)
      • --target-fps : taxa de quadros-alvo no pré-processamento (padrão: 5fps)
      • --no-skip-still : também embute todos os trechos com quadros estáticos
  • search

    • Exemplo: sentrysearch search "red truck running a stop sign"
    • Os resultados são exibidos com a pontuação de similaridade, e o melhor resultado é automaticamente recortado e salvo
    • Se a pontuação de similaridade estiver abaixo do limiar padrão (0,35), é exibido um prompt de confirmação
    • Opções
      • --results N : número de resultados a exibir
      • --output-dir DIR : caminho para salvar os clips
      • --no-trim : desativa o recorte automático
      • --threshold : ajusta o limiar de similaridade
  • stats

    • Exibe o número total de chunks indexados e a quantidade de arquivos originais
  • --verbose

    • Exibe informações de depuração, como dimensão do embedding, tempo de resposta da API e pontuação de similaridade

Contexto técnico

  • Gemini Embedding 2 consegue fazer embedding direto de vídeo e compará-lo no mesmo espaço vetorial de 768 dimensões das consultas em texto
  • Não é necessário gerar legendas nem fazer captioning de frames separadamente
  • Por exemplo, uma consulta em texto como “red truck at a stop sign” pode ser comparada diretamente com um clip de vídeo de 30 segundos
  • Isso permite busca semântica abaixo de um segundo mesmo em vídeos com várias horas de duração

Estrutura de custos

  • Na configuração padrão (chunks de 30 segundos com 5 segundos de sobreposição), o custo para indexar 1 hora de vídeo é de cerca de US$ 2,84
    • A API Gemini processa apenas 1 frame por segundo do vídeo enviado
    • O pré-processamento faz downscale para 480p e 5fps com o objetivo de otimizar a velocidade de envio e evitar timeouts
  • Otimizações para reduzir custos

    • Pré-processamento (preprocessing) : reduz o tamanho do upload e o tempo de envio
    • Salto de quadros estáticos (still-frame skipping) : pula o embedding de trechos sem mudança visual
      • Eficaz em vídeos gravados por muito tempo enquanto o carro está estacionado
    • Como a consulta de busca faz apenas embedding de texto, o custo é quase zero
    • Opções adicionais de ajuste
    • --chunk-duration, --overlap : controlam o número de chamadas à API
    • --no-skip-still : faz embedding de todos os chunks
    • --target-resolution, --target-fps : ajustam a qualidade do pré-processamento
    • --no-preprocess : envia os chunks originais sem alterações

Limitações e melhorias futuras

  • A detecção de quadros estáticos usa uma heurística baseada na comparação do tamanho de arquivos JPEG, o que pode deixar passar movimentos sutis ou incluir incorretamente trechos estáticos
  • A qualidade da busca depende dos limites entre chunks; se um evento estiver dividido entre dois chunks, ele pode não ser capturado perfeitamente
    • No futuro, isso pode ser melhorado com divisão baseada em detecção de cenas (scene detection)
  • O Gemini Embedding 2 está atualmente em fase preview, então o comportamento da API e os preços podem mudar

Compatibilidade e requisitos

  • Funciona com qualquer arquivo de vídeo no formato .mp4 e não se limita a vídeos do Tesla Sentry Mode
  • Explora recursivamente todos os arquivos .mp4, independentemente da estrutura de pastas
  • Requisitos
    • Python 3.10 ou superior
    • ffmpeg instalado (ou uso automático de imageio-ffmpeg)
    • Chave da API Gemini obrigatória (é possível obter uma chave gratuita em: aistudio.google.com/apikey)

1 comentários

 
GN⁺ 2026-03-26
Comentários no Hacker News
  • Achei essa abordagem de implementação muito legal. Embeddings ainda parecem meio mágicos
    Mas a maior preocupação é o potencial de essa tecnologia levar a uma sociedade de vigilância no mundo real
    Hoje já existem inúmeras câmeras, mas é impossível uma pessoa assistir a todas as imagens, então ainda existe certo grau de anonimato e privacidade
    Porém, se a IA puder analisar todos os vídeos em tempo real e detectar pessoas ou comportamentos específicos em linguagem natural, o panóptico pode virar realidade
    Pode haver usos positivos, como detecção de crimes ou de quedas, mas sem regulação o resultado pode ser muito perigoso

    • Isso já está sendo implementado. Ouvi uma discussão sobre um contrato de câmeras ALPR em uma reunião da câmara municipal e foi lá que conheci um produto de dashboard chamado Fusus
      Dizem que ele integra vários sistemas de câmeras, ALPR e alertas, e permite consultas em linguagem natural sobre vídeos
      Também disseram que, no futuro, câmeras instaladas por cidadãos serão integradas. No fim, se isso se conectar a um serviço como o app Citizen, podemos acabar num mundo em que a câmera do vizinho fica ligada diretamente ao sistema da polícia
      É uma direção realmente preocupante
    • Hoje, por causa do custo (US$ 2,50/hora) e da latência, o indexamento em tempo real é difícil, mas em breve isso deve se tornar viável
      Por isso, acho importante processar esse tipo de coisa com modelos locais, para que o vídeo não saia do dispositivo
      Mas a direção geral dessa tecnologia precisa ser pensada com muito cuidado
    • A maioria das câmeras não pode ser acessada integralmente por uma única organização, e o governo precisa de uma intimação judicial para ver as imagens
      O problema surge quando algo é implantado em larga escala, como Flock ou Ring, ou quando uma única empresa tem acesso a todos os vídeos
    • Tecnicamente, um sistema de vigilância total já é possível. Só que, por enquanto, ele ainda é caro demais
    • Quando esse tipo de módulo de visão computacional puder rodar até em ASICs de baixo consumo, drones poderão se tornar armas aterrorizantes
  • Parece que a IA multimodal vai provocar uma corrida armamentista entre detecção e inserção de anúncios
    No passado, experimentei remover anúncios com IA usando um modelo anterior ao Gemini, mas essa tecnologia nova parece muito mais poderosa e deve conseguir identificar, silenciar ou remover anúncios imediatamente
    Resumi os experimentos relacionados aqui

    • Foi um texto interessante. Alguém descreveu como seria o futuro da busca na web baseada em IA, e a conclusão não era animadora
      No fim, os anúncios não vão desaparecer. O provedor de IA pode receber uma whitelist de anúncios ou, pior ainda, a própria IA pode acabar promovendo produtos anunciados
  • Comprei uma dashcam da Rexing há alguns meses, mas acessar os vídeos é tão inconveniente que estou pensando em montar meu próprio sistema
    Quero conseguir navegar e baixar os vídeos sem precisar tirar o cartão SD
    Enquanto rolava as gravações, pensei: “seria ótimo poder buscar esta cena em linguagem natural”, e ao ver este projeto já tive vontade de aplicar a ideia na hora
    Obrigado por compartilhar

  • Fiquei pensando se isso poderia ser aplicado a um software de edição de vídeo
    Por exemplo, num plugin para o Premiere, algo como “remova todas as cenas com gatos” e ele gerar automaticamente uma EDL (Edit Decision List)

    • Boa ideia. Eu também estava pensando nisso como próximo passo
      O SentrySearch já retorna timestamps precisos de entrada/saída para consultas em linguagem natural e faz cortes automáticos com ffmpeg
      Expandir isso para uma EDL ou um plugin para o Premiere seria uma evolução natural
      Não sou especialista em Premiere, mas se alguém quiser tentar um exportador de EDL ou um plugin, eu toparia ajudar revisando e fazendo merge de PRs
      Se alguém começar, seria ótimo avisar em uma issue no GitHub
  • Tenho curiosidade se isso também pode funcionar com modelos locais

  • Isso também parece interessante para monitoramento residencial, não só para dashcams

    • A maioria dos sistemas de monitoramento residencial grava apenas quando detecta movimento, então o espaço de busca já fica bem reduzido
      Avançando rapidamente para frente e para trás, dá para encontrar com facilidade uns 30 segundos de alguém se aproximando da porta
    • Isso parece algo que vai virar recurso obrigatório em todo sistema de segurança residencial
      Uma vez passei horas revisando vídeos para ver se meu gato tinha saído quando a porta abriu, mas na verdade ele estava escondido dentro de casa
  • Eu também estou tocando um projeto com embeddings, embora ainda esteja em fase de protótipo
    No meu caso, não é com Gemini, e sim um sistema para criar quebra-cabeças de associação reversa (reverse connections) para jogos
    Dá para ver mais sobre isso aqui

  • Vi a parte do código que verifica se “o trecho de vídeo é majoritariamente um frame estático”, e acho que daria para automatizar isso combinando os parâmetros select e scene do ffmpeg

  • Eu trabalho na área de content/video intelligence
    O Gemini é uma ferramenta realmente muito adequada para esse tipo de caso de uso

  • Ri ao ver, na demo, a busca por “quando um carro com suporte para bicicleta atrás me fechou à noite”
    Provavelmente encontrar esse carro foi a verdadeira motivação para criar o projeto

    • Não parece estar errado