2 puntos por GN⁺ 4 일 전 | 1 comentarios | Compartir por WhatsApp
  • Para encontrar momentos específicos entre 2,207 videos de ciclismo grabados con GoPro sin tener que volver a verlos uno por uno, se indexan y buscan los videos con modelos de ML locales, y los mejores clips se envían directamente a una línea de tiempo de DaVinci Resolve
  • Se usa una versión de app de escritorio optimizada para Apple Silicon como M1 Max; basta con pedirle a un agente conversacional la escena deseada para enviarla directo a la línea de tiempo de edición
  • Se construyó un pipeline de indexación compuesto por transcripción con OpenAI Whisper, análisis de frames (reconocimiento facial, detección de objetos, texto en pantalla y descripción de escenas) y embeddings en una base de datos vectorial
  • Indexar 628 videos (668.68 GB, 15 h 13 min 18 s) requiere un total de 67 h 40 min 42 s de cómputo, aproximadamente 4.4 veces más lento que la reproducción en tiempo real
  • Todo el procesamiento se realiza en la GPU/CPU local, por lo que es posible buscar en una gran biblioteca de video sin usar la nube; el proyecto sigue en desarrollo

Resumen del proyecto y motivación

  • Se guardan 2,207 videos de GoPro grabados durante recorridos en bicicleta en un solo SSD, y se busca poder encontrar momentos memorables dentro de ellos sin tener tiempo para volver a ver todo
  • Aunque casi todos los momentos fueron grabados con GoPro, encontrar los mejores requiere ver el metraje completo de principio a fin, lo cual es ineficiente
    • Historial de ciclismo: 2024 Casablanca→Imsouane (5 días, más de 470 km), 2023 Kenitra→Tangier (220 km en día y medio), además de viajes de ciclismo de montaña entre ambos
  • Para resolver este problema, se creó directamente el proyecto edit-mind
  • GitHub Repo : https://github.com/IliasHad/edit-mind

Por qué usar una app de escritorio

  • Se eligió la versión de app de escritorio optimizada para Apple Silicon, que permite encontrar los momentos deseados con un agente conversacional y enviarlos directamente a la línea de tiempo de edición de DaVinci Resolve
  • La versión en Docker no puede acceder a la GPU de la M1 Max, así que no aprovecha el rendimiento de la GPU
  • La app de escritorio usa un proceso de indexación similar al de la versión source-available

Proceso de indexación

  • Al seleccionar una carpeta en la app de escritorio, solo se exploran los videos que empiezan con GX para distinguirlos de los videos del teléfono
  • Si hay una pista de audio, se transcribe el video completo con el modelo OpenAI Whisper
  • Después se ejecuta el pipeline de análisis de frames, dividiendo el video en escenas individuales a intervalos de 1 segundo (1 fps)
    • Incluye un plugin de reconocimiento facial con datos faciales personalizados, detección de objetos, texto en pantalla, tipo de toma y descripción de escena
  • Los datos de rostros, transcripción y descripción de cada escena se embeben como texto documental y se almacenan en una base de datos vectorial local
    • Los frames de escena se embeben en una colección de base de datos vectorial visual para búsqueda por imagen, y el audio de escena se procesa de la misma manera
  • Al final se obtienen 3 colecciones de base de datos vectorial con la información del video
    • Incluyen metadatos de ubicación, nombre de la cámara, rostros reconocidos, objetos detectados, texto en pantalla, transcripción y descripción de cada escena

Métricas de rendimiento

  • Estas mediciones corresponden al procesamiento de videos indexados usando la GPU y CPU del equipo, y no son cifras finales porque el proyecto sigue en desarrollo
  • Métricas generales

    • Videos indexados: 628
    • Tamaño total de video: 668.68 GB
    • Duración total de video: 15 h 13 min 18 s
    • Tiempo total de cómputo: 67 h 40 min 42 s
    • Velocidad frente a reproducción: 0.22x, es decir, alrededor de 4.4 veces más lento que la reproducción
    • Frames analizados: 57,537
  • Análisis por etapa (tiempo total / promedio por video / proporción del cómputo)

    • Transcripción: 25 h 12 min 54 s / 2 min 25 s / 37.3%
    • Análisis de frames: 24 h 55 min 42 s / 2 min 23 s / 36.8%
    • Creación de escenas: 48 min 0 s / 5 s / 1.2%
    • Embedding de texto: 36 min 42 s / 5 s / 0.9%
    • Embedding visual: 11 h 49 min 17 s / 1 min 9 s / 17.5%
    • Embedding de audio: 4 h 18 min 7 s / 27 s / 6.4%

Función de búsqueda

  • Se prefiere hacer preguntas sobre los videos mediante un asistente de chat, con la opción de enviar los resultados directamente a la línea de tiempo de edición de DaVinci Resolve
  • Si se usa el modelo Qwen2.5-VL-7B-Instruct en el modo avanzado de indexación, se pueden obtener datos indexados que entienden y describen mejor el video, aunque la indexación es más lenta
  • Con este método se indexan los videos de GoPro, se buscan y envían las escenas deseadas, y luego se produce un video con buenos clips

Comparación de hardware y estado del desarrollo

  • Al ejecutarlo en una GPU NVIDIA como una RTX 3060 (12 GB de VRAM), fue más rápido que en la M1 Max
  • El proyecto sigue en desarrollo, y se continúa trabajando en mejoras para optimizar precisión y velocidad

Ejemplos de prompts de uso

  • "Encuentra todos los clips donde un perro ladra mientras voy en bicicleta"
  • "Crea un reel de highlights con los momentos más pintorescos e interesantes del viaje en bicicleta"
  • "Muéstrame los momentos de manejo en primera persona más rápidos donde se escuche el viento y envíalos a DaVinci Resolve, quitando escenas duplicadas"

1 comentarios

 
GN⁺ 4 일 전
Comentarios de Hacker News
  • Es curioso que hace unos días hice casi exactamente lo mismo en una máquina muy parecida con una técnica similar, y eso también terminó en la portada de HN
    https://news.ycombinator.com/item?id=48222733
    https://blog.simbastack.com/indexed-a-year-of-video-locally/
    No conocía este proyecto, pero está interesante
    Estoy intentando agregar más funciones relacionadas con fotos a Framedex, y es una época emocionante porque cada vez hay más cosas que se pueden hacer en local

    • Vi que mencionaron mi proyecto en los comentarios cuando el post estuvo en portada
      Tanto el artículo como el proyecto me parecieron buenos, y los modelos locales están mejorando cada vez más
  • Siento que este tipo de trabajo se va a hacer con LLM locales
    Corres un LLM rápido, pequeño y potente en local para indexar datos personales como imágenes, videos y documentos, enriquecerlos y etiquetarlos con esos metadatos enriquecidos
    Si quieres agrupar por persona, buscas en los metadatos etiquetados y agrupas; si quieres encontrar una imagen a partir de una descripción, usas los metadatos etiquetados; si quieres organizar cualquier cosa, usas los metadatos etiquetados
    Ojalá esto acabe por fin con el caos de organizar archivos

  • Al ver “ejecutar el pipeline de análisis de frames divide el video en escenas separadas (cada 1 segundo o 1fps)” y “57,537 frames analizados”, me cuadra
    Ese número suena mucho más realista que “669GB”, y el tamaño total real de todos los frames procesados probablemente fue de 10~30GB
    No lo digo para menospreciar el trabajo, sino porque si uno quiere hacerlo en casa siempre hay que calcular la parte práctica
    Si el “tiempo total de cómputo” fue de 67 horas, 40 minutos y 42 segundos, me pregunto si habrá alguna opción de pago para hacer este tipo de proceso más rápido. ¿Basta con levantar una instancia con GPU?

    • Los “669GB” son el tamaño total del material original usado en el procesamiento de video, y bajé cada frame a 720p para acelerar el procesamiento
      Entiendo que no se necesita la calidad completa del material original para obtener resultados precisos, y los experimentos también salieron así
      Hasta ahora, una GPU NVIDIA como una RTX 3060 con 12GB de VRAM ha sido mucho más rápida que una M1 Max, y todavía sigo optimizando velocidad y precisión
  • Una función que terminó gustándome más de lo esperado es que Google Photos y Apple Photos me envían recuerdos y colecciones con distintos momentos de mi vida y la de mis hijos durante los últimos 10 años
    Creo que cada vez será más fácil que la IA arme después pequeños videos recopilatorios agradables de ver, así que soy bastante optimista sobre grabar más videos de mis hijos

    • Los modelos de machine learning de código abierto están mejorando cada vez más
      Hice un pequeño experimento generando un video estilo Spotify Wrapped, y el video de vista previa está aquí https://github.com/IliasHad/edit-mind/tree/expirement/year-i...
    • ¿Usas tanto Android como iOS, o hay alguna otra ventaja de tener tus medios personales en ambas plataformas?
    • ¿Te parece bien que Google use a los niños para entrenar sus modelos y algoritmos publicitarios?
      En unos años te van a salir cosas como “Mira la nueva bicicleta económica de BIKE BRAND, ¿te acuerdas que antes andabas en una bicicleta de BIKE BRAND?”
  • DaVinci 21 ya trae integrada una función de indexación llamada AI IntelliSearch
    No es por quitarle mérito al trabajo, pero ya es una función disponible para muchos usuarios. Como lleva AI en el nombre, probablemente sea solo para usuarios de Studio

    • Todavía no lo he revisado
      Pero me da curiosidad si sube los videos a la nube o si procesa todo en local
      Y también si permite aportar datos faciales personalizados para ayudar a etiquetar las caras que aparecen en los videos
      Creo que Adobe Premiere Pro también tiene algo parecido, pero entiendo que lo procesa en la nube
  • Está muy bien hecho
    No me quedó muy claro cómo haces reels mediante agentes
    ¿Es algo como una llamada de herramienta de IA que recibe enlaces de imágenes y arma el reel en alguna herramienta de edición de video? ¿O recorta y une los tiempos antes y después de los timestamps devueltos por el índice para una consulta específica?

    • Estoy usando RAG e indexé todas las escenas de video por separado en una base de datos vectorial
      Cuando le haces una petición al agente, un modelo de Ollama entiende la solicitud y usa las herramientas de búsqueda disponibles. La búsqueda puede hacerse por texto transcrito, rostros, información visual, audio o una combinación
      Es parecido a cómo Claude o ChatGPT usan una herramienta de búsqueda web para encontrar información en línea
      Luego uso Ollama para filtrar las escenas de video y mostrar escenas más precisas y con menos duplicados, y ese resultado se envía a la API de DaVinci Resolve para crear una línea de tiempo con clips de video
  • ¿También funciona para recopilaciones porno?

    • Para ese caso, creo que haría falta un LoRA. El rechazo de contenido porno es bastante fuerte
      O haría falta algún modelo sin censura, aunque no sé si eso también aplique al lado de visión
      Quizá también querrías agregar algo como fine-tuning de YOLO para detección de escenas y reconocimiento facial
    • Haces las preguntas importantes
    • No sé por qué siempre sale la misma pregunta
      Cuando publiqué el proyecto en Reddit me preguntaron exactamente lo mismo
    • Cuando probé Whisper hace tiempo, solo con oír golpes y gemidos se inventó una conversación elaborada, y tardaba varios minutos en ir soltándola línea por línea
    • No sé si lo dices en broma, pero me parece una pregunta interesante
      Como DeepSeek corre en local, ¿será útil para este tipo de uso?
  • Me sorprendió enterarme de que el CPU del M1 Max es ARM/SoC y aun así comparable con un Intel i9 de 11.ª generación
    ¿Lo entendí bien? ¿Windows ARM tendría un rendimiento parecido en un CPU así?
    Referencia: https://www.cpubenchmark.net/compare/4585vs4245/Apple-M1-Max...

    • Por varias razones, es más bien una comparación de peras con manzanas, pero hay dos factores que más pesan
      Gracias a la memoria “unificada”, puedes usar toda la memoria del sistema como si fuera VRAM, y además tiene aceleradores dedicados de apoyo para IA
      Por esas dos cosas, los chips Apple Silicon pueden superar por mucho a un CPU normal en este tipo de cargas de trabajo de modelos de IA
      No sé hasta qué punto lo de Windows ARM sea comparable, pero sí sé que usan chips Qualcomm Snapdragon
    • No hay comparación
      El M1 Max tiene un ancho de banda de memoria de 400GB/s, y hasta el Snapdragon X2 Elite tope de gama más reciente llega a 228GB/s
    • Si con “comparable” te refieres al rendimiento de un solo núcleo, podría ser más o menos cierto, pero en ancho de banda de memoria el M1 Max es como 8 veces más rápido
      Con un bus más ancho y una latencia mucho menor, simplemente no compiten
    • No puedo confirmarlo ni negarlo respecto a esa pregunta
      Todavía no he probado este proyecto en una máquina con Windows ni en una configuración así
  • https://archive.is/O6CLQ
    Quise leer el artículo, pero lamentablemente el sitio principal estaba dando error de Cloudflare

    • ¿Puedes revisar otra vez? No entiendo bien por qué te aparece un error de Cloudflare
  • El enlace es https://iliashaddad.com/blog/i-indexed-669-gb-of-my-gopro-vi...