2 puntos por GN⁺ 2026-03-26 | 1 comentarios | Compartir por WhatsApp
  • Sistema de búsqueda semántica que busca escenas en archivos de video, como dashcams, usando lenguaje natural y recorta automáticamente ese segmento correspondiente
  • Usa el modelo Google Gemini Embedding 2 para generar embeddings vectoriales del video directamente y guardarlos en ChromaDB, donde se comparan de forma directa con consultas de texto
  • Con ffmpeg, divide el video en chunks superpuestos para generar embeddings y, al buscar, devuelve el segmento más similar con velocidad a nivel subsegundo
  • Con funciones de preprocesamiento y omisión de fotogramas estáticos, reduce el costo de llamadas a la API; indexar 1 hora de video cuesta alrededor de $2.84
  • Aprovecha la capacidad de Gemini Embedding 2 para hacer embeddings directos de video y permite búsquedas semánticas rápidas en videos de varias horas sin necesidad de generar subtítulos

Resumen general

  • SentrySearch es una herramienta que realiza búsqueda semántica en videos de dashcam; cuando el usuario ingresa una consulta en lenguaje natural, devuelve un clip recortado (trimmed clip) que contiene esa escena
  • Usa el modelo Google Gemini Embedding 2 para convertir el video mismo en vectores y almacenarlos en la base de datos local ChromaDB
  • La consulta de texto se incrusta en el mismo espacio vectorial para encontrar los fragmentos de video más similares
  • El resultado de búsqueda se recorta automáticamente desde el archivo original y se guarda, ofreciendo velocidad de búsqueda sub-second

Cómo funciona

  • El video se divide en segmentos superpuestos (overlapping chunks) y cada segmento se incrusta directamente con el modelo Gemini Embedding
  • Cada vector de embedding se almacena en ChromaDB, y al buscar, la consulta de texto se transforma al mismo espacio vectorial para hacer el matching
  • El segmento con mayor similitud se recorta automáticamente del video original y se guarda como clip
  • ffmpeg se usa para dividir y recortar el video; si no está instalado en el sistema, se usa automáticamente imageio-ffmpeg

Instalación y configuración inicial

  • Se puede instalar en un entorno con Python 3.10 o superior con el siguiente comando
    • git clone seguido de pip install -e .
  • El comando sentrysearch init configura la clave API de Gemini y la guarda en el archivo .env
    • Se realiza un embedding de prueba para validar la clave
  • Para configuración manual, se puede copiar .env.example y agregar la clave API directamente

Comandos y opciones principales

  • index

    • Escanea de forma recursiva los archivos .mp4 dentro de la carpeta especificada y realiza la indexación
    • Cada archivo se divide en varios chunks para generar embeddings
    • Opciones
      • --chunk-duration : duración del chunk (en segundos)
      • --overlap : duración de superposición entre chunks
      • --no-preprocess : omite el downscaling y la reducción de fotogramas
      • --target-resolution : resolución objetivo en el preprocesamiento (480p por defecto)
      • --target-fps : tasa de fotogramas objetivo en el preprocesamiento (5fps por defecto)
      • --no-skip-still : también incrusta todos los segmentos con fotogramas estáticos
  • search

    • Ejemplo: sentrysearch search "red truck running a stop sign"
    • El resultado se muestra junto con la puntuación de similitud, y el mejor resultado se recorta y guarda automáticamente
    • Si la puntuación de similitud está por debajo del umbral predeterminado (0.35), se muestra un prompt de confirmación
    • Opciones
      • --results N : cantidad de resultados a mostrar
      • --output-dir DIR : ruta donde se guardan los clips
      • --no-trim : desactiva el recorte automático
      • --threshold : ajusta el umbral de similitud
  • stats

    • Muestra la cantidad total de chunks indexados y la cantidad de archivos originales
  • --verbose

    • Muestra información de depuración como dimensión del embedding, tiempo de respuesta de la API y puntuaciones de similitud

Contexto técnico

  • Gemini Embedding 2 puede incrustar video directamente y compararlo con consultas de texto dentro del mismo espacio vectorial de 768 dimensiones
  • No se necesita un proceso separado de generación de subtítulos ni captioning de fotogramas
  • Por ejemplo, una consulta de texto como “red truck at a stop sign” puede compararse directamente con un clip de video de 30 segundos
  • Esta capacidad permite búsqueda semántica a nivel subsegundo incluso en videos de varias horas

Estructura de costos

  • Con la configuración predeterminada (chunks de 30 segundos, superposición de 5 segundos), el costo de indexar 1 hora de video es de aproximadamente $2.84
    • La API de Gemini procesa solo 1 fotograma por segundo del video subido
    • El preprocesamiento reduce la escala a 480p y 5fps con el objetivo de optimizar la velocidad de transferencia y evitar timeouts
  • Optimizaciones para reducir costos

    • Preprocesamiento (preprocessing) : reduce el tamaño de subida y el tiempo de transferencia
    • Omisión de fotogramas estáticos (still-frame skipping) : omite embeddings en segmentos sin cambios visuales
      • Es efectivo en videos grabados durante largos periodos mientras el vehículo está estacionado
    • Como las consultas de búsqueda solo hacen embeddings de texto, el costo es casi nulo
    • Opciones adicionales de ajuste
    • --chunk-duration, --overlap : controlan la cantidad de llamadas a la API
    • --no-skip-still : genera embeddings para todos los chunks
    • --target-resolution, --target-fps : ajustan la calidad del preprocesamiento
    • --no-preprocess : envía los chunks originales tal cual

Limitaciones y mejoras futuras

  • La detección de fotogramas estáticos usa una heurística basada en comparar tamaños de archivos JPEG, por lo que puede pasar por alto movimientos sutiles o incluir erróneamente segmentos estáticos
  • La calidad de búsqueda depende de los límites de los chunks; si un evento queda entre dos chunks, puede no capturarse perfectamente
    • En el futuro, esto podría mejorar con división por chunks basada en detección de escenas (scene detection)
  • Gemini Embedding 2 está actualmente en fase preview, por lo que el comportamiento y el precio de la API podrían cambiar

Compatibilidad y requisitos

  • Funciona con cualquier archivo de video en formato .mp4; no está limitado a videos de Tesla Sentry Mode
  • Explora recursivamente todos los archivos .mp4 sin importar la estructura de carpetas
  • Requisitos
    • Python 3.10 o superior
    • Se requiere ffmpeg instalado (o se usa automáticamente imageio-ffmpeg)
    • Se requiere una clave API de Gemini (se puede obtener una clave gratuita en: aistudio.google.com/apikey)

1 comentarios

 
GN⁺ 2026-03-26
Comentarios de Hacker News
  • Esta implementación me parece realmente genial. Todavía hay algo de embeddings que se siente casi como magia
    Pero lo que más me preocupa es la posibilidad de que esta tecnología termine llevándonos a una sociedad de vigilancia
    Hoy hay muchísimas cámaras, pero como es imposible que una persona revise realmente todo el video, todavía se conserva cierto grado de anonimato y privacidad
    Sin embargo, si la IA llega a analizar todo el video en tiempo real y puede detectar a una persona o acción específica con lenguaje natural, el panóptico podría volverse realidad
    Puede haber usos positivos, como la detección de delitos o de caídas, pero sin regulación el resultado podría ser muy peligroso

    • Esto ya se está implementando en la práctica. Escuché en una reunión del concejo municipal que estaban discutiendo un contrato de cámaras ALPR, y ahí me enteré de un producto tipo dashboard llamado Fusus
      Según dijeron, integra distintos sistemas de cámaras, ALPR y alertas, y permite hacer consultas de video en lenguaje natural
      También comentaron que en el futuro se integrarán cámaras instaladas por ciudadanos. Si esto termina conectándose con servicios como la app Citizen, podríamos llegar a un mundo donde la cámara del vecino esté conectada directamente al sistema policial
      Es una dirección realmente preocupante
    • Por ahora, por el costo ($2.50/hora) y la latencia, es difícil indexar en tiempo real, pero pronto será posible
      Por eso creo que es importante procesar este tipo de cosas con un modelo local, para que el video no salga al exterior
      Pero aun así hay que pensar con mucho cuidado hacia dónde va toda esta tecnología
    • La mayoría de las cámaras no están accesibles por completo para una sola organización, y si el gobierno quiere verlas necesita una orden judicial
      El problema surge cuando algo como Flock o Ring se despliega a gran escala, o cuando una sola empresa puede acceder a todo el video
    • Técnicamente, ya es posible construir un sistema de vigilancia total. Lo único es que por ahora sigue siendo caro
    • Cuando estos módulos de visión puedan correr incluso en ASICs de bajo consumo, los drones podrían convertirse en armas aterradoras
  • Creo que la IA multimodal va a provocar una carrera armamentista entre la detección de anuncios y la inserción de anuncios
    Hace tiempo probé eliminar publicidad con un modelo anterior a Gemini, pero esta tecnología parece mucho más potente y podría identificar anuncios al instante para silenciarlos o quitarlos
    Dejé mis pruebas relacionadas aquí

    • Fue un texto interesante. Alguien imaginó cómo sería el futuro de la búsqueda web basada en IA, y la conclusión no era alentadora
      Al final los anuncios no van a desaparecer. El proveedor de IA podría recibir una whitelist de anuncios o, peor todavía, la propia IA podría promocionar productos publicitarios directamente
  • Hace unos meses compré una dashcam Rexing, pero acceder al video es tan incómodo que estoy pensando en armar mi propio sistema
    Quiero poder explorar y descargar el video sin tener que sacar la tarjeta SD
    Mientras recorría las grabaciones pensé: “ojalá pudiera buscar esta escena con lenguaje natural”, y al ver este proyecto me dieron ganas de aplicarlo de inmediato
    Gracias por compartirlo

  • Me pregunto si esto podría aplicarse a software de edición de video
    Por ejemplo, algo como decir en un plugin de Premiere: “elimíname todas las escenas donde aparezca un gato”, y que automáticamente genere una EDL (Edit Decision List)

    • Buena idea. Yo también estaba pensando en eso como siguiente paso
      SentrySearch ya devuelve timestamps exactos de entrada/salida para consultas en lenguaje natural y hace el recorte automáticamente con ffmpeg
      Extender esto a una EDL o a un plugin de Premiere sería una evolución natural
      No soy experto en Premiere, pero si alguien intenta hacer un exportador de EDL o un plugin, estaría dispuesto a ayudar revisando y mergeando PRs
      Si alguien empieza, estaría bueno que lo avise en un issue de GitHub
  • Me pregunto si esto también podría funcionar con un modelo local

  • Esto también se ve interesante no solo para dashcams, sino para monitoreo del hogar

    • La mayoría de los sistemas de monitoreo del hogar solo graban cuando detectan movimiento, así que el espacio de búsqueda ya se reduce bastante
      Si adelantas y retrocedes rápido, encontrar unos 30 segundos de alguien acercándose a la puerta suele ser bastante fácil
    • Creo que esta función se va a volver una característica obligatoria en todos los sistemas de seguridad para el hogar
      Una vez me pasé horas revisando video para ver si el gato se había escapado cuando se abrió la puerta, y al final estaba escondido dentro de la casa
  • Yo también estoy trabajando en un proyecto de embeddings, aunque todavía está en etapa de prototipo
    En mi caso no es con Gemini, sino que estoy armando un rompecabezas de conexiones inversas (reverse connections) para juegos
    Se puede ver más sobre eso aquí

  • Vi la parte del código que verifica si un fragmento de video es mayormente un frame estático, y creo que eso podría hacerse automáticamente combinando los parámetros select y scene de ffmpeg

  • Trabajo en el área de content/video intelligence
    Gemini es una herramienta que encaja muy bien para este tipo de casos de uso

  • Me dio risa ver en la demo la búsqueda de “cuando un auto con portabicicletas atrás se me metió en la noche”
    Probablemente encontrar ese auto fue la verdadera motivación para crear este proyecto

    • No parece una teoría equivocada