Búsqueda por imagen en tiempo real con Gemini y BigQuery

Evenbytes ha desarrollado para una plataforma líder de compraventa en España un sistema que, en tiempo real, convierte las imágenes de cada anuncio nuevo en vectores de embedding y extrae sus metadatos de seguridad con Gemini. El resultado es un vectorhouse en BigQuery: un almacén de vectores que complementa la búsqueda por palabras clave con la búsqueda por lo que muestran las fotos, y que ofrece información detallada de cada artículo. Ya reúne unos 4 TB de datos.
El proyecto es una prueba de concepto. Con ella, el equipo de Data Scientists de la plataforma valida la arquitectura y los primeros casos de uso.
Por qué en tiempo real
La búsqueda por palabras clave solo encuentra lo que el vendedor ha escrito. Con el vector de cada imagen, la plataforma puede comparar anuncios por lo que muestran sus fotos. Y si cada anuncio está en BigQuery poco después de publicarse, la app puede:
- Buscar por similitud de imagen: encontrar artículos parecidos a partir de una foto.
- Detectar anuncios duplicados, una señal habitual de fraude.
- Identificar contenido no permitido con metadatos de seguridad (desnudos, armas…) generados por IA.
Cómo funciona
Los anuncios y sus fotos viven en AWS y se procesan en Google Cloud, con Dataflow como orquestador:
- Los metadatos de cada anuncio se emiten como eventos de Kafka.
- Las imágenes se copian de Amazon S3 a Cloud Storage en tiempo real con Storage Transfer Service, y Eventarc avisa de cada imagen nueva.
- Dataflow consume los eventos de Kafka y agrupa con cada anuncio los eventos de sus imágenes. Es la parte más delicada: hay que juntar en tiempo real dos flujos que llegan por separado.
- Para cada anuncio, Dataflow llama a tres servicios en Cloud Run: uno redimensiona las imágenes, otro obtiene el vector de cada imagen con el modelo de embeddings de Gemini y otro extrae los metadatos de seguridad con un modelo Gemini Flash.
- El resultado se guarda en BigQuery, donde Vector Search permite hacer búsquedas por similitud con SQL. Los anuncios que no se pueden procesar van a una tabla aparte para revisarlos, sin detener el flujo.

Seis meses de histórico en batch
Para que la búsqueda funcione desde el primer día, el sistema procesó también los anuncios de los últimos seis meses. Esa carga se hizo en batch: Storage Transfer Service trajo de S3 las imágenes y el histórico de Kafka, y varios Cloud Run Jobs generaron los vectores y los metadatos con los mismos servicios que el flujo en tiempo real. Los resultados se juntaron en BigQuery y se añadieron a la tabla final.

El modelo, elegido también por coste
El sistema procesa 1,2 millones de imágenes al día. A ese volumen, un pequeño cambio en el coste por llamada se convierte en un gran gasto en la factura final, y decide si la solución es viable. Para extraer los metadatos de seguridad se compararon varias versiones de Gemini: la salida de la más reciente era bastante más cara y disparaba los costes, así que los dos flujos, en tiempo real y en batch, usan un modelo Flash anterior, más económico y suficiente para esta tarea.
Qué viene después
Con la arquitectura validada, la plataforma puede llevar la búsqueda por imagen a su app y estudiar nuevos casos de uso sobre los mismos vectores. Si tu empresa quiere aplicar búsqueda vectorial o IA generativa a sus datos, consulta nuestros servicios de ingeniería de datos y servicios cloud, o habla con un experto de Evenbytes.
