Cómo desbloquear la comprensión del vídeo con TwelveLabs Marengo en Amazon Bedrock

El contenido de medios y entretenimiento, publicidad, educación y capacitación empresarial combina elementos visuales, de audio y de movimiento para contar historias y transmitir información, lo que lo hace mucho más complejo que el texto donde las palabras individuales tienen significados claros. Esto crea desafíos únicos para los sistemas de inteligencia artificial que necesitan comprender el contenido de video. El contenido de vídeo es multidimensional y combina elementos visuales (escenas, objetos, acciones), dinámicas temporales (movimiento, transiciones), componentes de audio (diálogos, música, efectos de sonido) y superposiciones de texto (subtítulos, leyendas). Esta complejidad crea importantes desafíos comerciales a medida que las organizaciones luchan por buscar en archivos de video, localizar escenas específicas, categorizar contenido automáticamente y extraer información de sus activos multimedia para una toma de decisiones efectiva.

El modelo aborda este problema con una arquitectura multivectorial que crea incrustaciones separadas para diferentes modalidades de contenido. En lugar de forzar toda la información en un solo vector, el modelo genera representaciones especializadas. Este enfoque preserva la naturaleza rica y multifacética de los datos de vídeo, lo que permite un análisis más preciso en las dimensiones visual, temporal y de audio.

Amazon Bedrock ha ampliado sus capacidades para admitir el modelo TwelveLabs Marengo Embed 3.0 con procesamiento de imágenes y texto en tiempo real mediante inferencia sincrónica. Con esta integración, las empresas pueden implementar una funcionalidad de búsqueda de videos más rápida mediante consultas en lenguaje natural, al mismo tiempo que respaldan el descubrimiento interactivo de productos a través de una sofisticada comparación de similitudes de imágenes.

En esta publicación, mostraremos cómo el modelo de integración Marengo de TwelveLabs, disponible en Amazon Bedrock, mejora la comprensión del video a través de IA multimodal. Construiremos una solución de análisis y búsqueda semántica de videos utilizando incrustaciones del modelo Marengo con Amazon OpenSearch Serverless como base de datos vectorial, para capacidades de búsqueda semántica que van más allá de la simple coincidencia de metadatos para ofrecer un descubrimiento de contenido inteligente.

Comprender las incrustaciones de vídeo

Las incrustaciones son representaciones vectoriales densas que capturan el significado semántico de los datos en un espacio de alta dimensión. Piense en ellos como huellas digitales numéricas que codifican la esencia del contenido de una manera que las máquinas puedan entender y comparar. En el caso del texto, las incrustaciones pueden capturar que "rey" y "reina" son conceptos relacionados, o que "París" y "Francia" tienen una relación geográfica. Para las imágenes, las incrustaciones pueden entender que un golden retriever y un labrador son perros, incluso si se ven diferentes. El siguiente mapa de calor muestra las puntuaciones de similitud semántica entre estos fragmentos de oraciones: "dos personas conversando", "un hombre y una mujer hablando" y "los gatos y los perros son animales encantadores".

Desafíos de incrustación de video

El vídeo presenta desafíos únicos porque es inherentemente multimodal:

Información visual: objetos, escenas, personas, acciones y estética visual. Información de audio: voz, música, efectos de sonido y ruido ambiental. Información textual: subtítulos, texto en pantalla y voz transcrita.

Los enfoques tradicionales de un solo vector comprimen toda esta rica información en una sola representación, perdiendo a menudo matices importantes. Aquí es donde el enfoque de TwelveLabs Marengo es único a la hora de abordar este desafío de forma eficaz.

Twelvelabs Marengo: un modelo de incrustación multimodal

El modelo Marengo 3.0 genera múltiples vectores especializados, cada uno de los cuales captura diferentes aspectos del contenido del video. Una película o programa de televisión típico combina elementos visuales y auditivos para crear una experiencia narrativa unificada. La arquitectura multivectorial de Marengo proporciona importantes ventajas para comprender este complejo contenido de vídeo. Cada vector captura una modalidad específica, evitando la pérdida de información al comprimir diversos tipos de datos en representaciones únicas. Esto permite búsquedas flexibles dirigidas a aspectos de contenido específicos: consultas solo visuales, solo audio o combinadas. Los vectores especializados ofrecen una precisión superior en escenarios multimodales complejos y al mismo tiempo mantienen una escalabilidad eficiente para grandes conjuntos de datos de vídeo empresariales.

Descripción general de la solución: capacidades del modelo Marengo

En la siguiente sección, demostraremos el poder de la tecnología de integración de Marengo a través de ejemplos de código. Los ejemplos ilustran cómo Marengo procesa diferentes tipos de contenido y ofrece una precisión de búsqueda excepcional. El ejemplo de código completo se puede encontrar en este repositorio de GitHub.

Requisitos previos

Antes de comenzar, verifique que tenga:

Vídeo de muestra

Netflix Open Content es un contenido de código abierto disponible bajo la licencia Creative Commons Attribution 4.0 International. Usaremos uno de los videos llamado Meridian para demostrar el modelo TwelveLabs Marengo en Amazon Bedrock.

Crear una incrustación de vídeo

Amazon Bedrock utiliza una API asincrónica para las generaciones de incorporación de videos de Marengo. El siguiente es un fragmento de código de Python que muestra un ejemplo de cómo invocar una API que toma un video desde una ubicación de depósito S3. Consulte la documentación para conocer todas las funciones compatibles.

bedrock_client = boto3.client("bedrock-runtime") model_id = 'us.twelvelabs.marengo-embed-3-0-v1:0' video_s3_uri = "" # Reemplazar por su URI s3 aws_account_id = "" # Reemplazar por el ID del propietario del depósito s3_bucket_name = "" # Reemplazar por el nombre del depósito S3 de salida s3_output_prefix = "" # Reemplazar por prefijo de salida respuesta = bedrock_client.start_async_invoke( modelId=model_id, modelInput={ "inputType": "video", "video": { "mediaSource": { "s3Location": { "uri": video_s3_uri, "bucketOwner": aws_account_id } } } }, outputDataConfig={ "s3OutputDataConfig": { "s3Uri": f's3://{s3_bucket_name}/{s3_output_prefix}' } } )

El ejemplo anterior produce 280 incrustaciones individuales de un solo vídeo, una para cada segmento, lo que permite una búsqueda y un análisis temporal precisos. El tipo de incrustaciones para la salida multivectorial del vídeo podría contener lo siguiente:

[ {'embedding': [0.053192138671875,…], 'embeddingOption': "visual", 'embeddingScope': "clip", "startSec": 0.0, "endSec": 4.3}, {'embedding': [0.053192138645645,…], 'embeddingOption': "transcripción", 'embeddingScope': "clip", "startSec": 3.9, "endSec": 6.5}, {'embedding': [0.3235554er443524,…], 'embeddingOption': "audio", 'embeddingScope': "clip", "startSec": 4.9, "endSec": 7.5}]

visual – incrustaciones visuales de la transcripción del video – incrustaciones del texto transcrito audio – incrustaciones del audio en el video

Al procesar contenido de audio o vídeo, puede establecer la duración de cada segmento de clip para la creación de incrustaciones. De forma predeterminada, los videoclips se dividen automáticamente en los cambios naturales de la escena (límites de toma). Los clips de audio se dividen en segmentos pares que duran lo más cerca posible de 10 segundos; por ejemplo, un archivo de audio de 50 segundos se convierte en 5 segmentos de 10 segundos cada uno, mientras que un archivo de 16 segundos se convierte en 2 segmentos de 8 segundos cada uno. De forma predeterminada, una única API de incrustación de video de Marengo genera incrustaciones de texto visual, imágenes visuales y audio. También puede cambiar la configuración predeterminada para generar solo tipos de incrustación específicos. Utilice el siguiente fragmento de código para generar incrustaciones para un vídeo con opciones configurables con la API de Amazon Bedrock:

respuesta = bedrock_client.start_async_invoke( modelId=model_id, modelInput={ "modelId": model_id, "modelInput": { "inputType": "video", "video": { "mediaSource": { "base64String": "cadena codificada en base64", // base64String O s3Location, exactamente una "s3Location": { "uri": "s3://amzn-s3-demo-bucket/video/clip.mp4", "bucketOwner": "123456789012" } }, "startSec": 0, "endSec": 6, "segmentation": { "method": "dynamic", // dinámico O fijo, exactamente un "dynamic": { "minDurationSec": 4 } "method": "fixed", "fixed": { "durationSec": 6 } }, "embeddingOption": [ "visual", "audio", "transcription" ], // opcional, default=all "embeddingScope": [ "clip", "asset" ] // opcional, uno o ambos }, "inferenceId": "alguna identificación de inferencia" } } )

Base de datos vectorial: Amazon OpenSearch Serverless

En nuestro ejemplo, usaremos Amazon OpenSearch Serverless como base de datos vectorial para almacenar las incrustaciones de texto, imágenes, audio y video generadas a partir del video dado a través del modelo Marengo. Como base de datos vectorial, OpenSearch Serverless le permite encontrar rápidamente contenido similar mediante la búsqueda semántica sin preocuparse por administrar servidores o infraestructura. El siguiente fragmento de código demuestra cómo crear una colección de Amazon OpenSearch Serverless:

aoss_client = boto3_session.client('opensearchserverless') intente: colección = self.aoss_client.create_collection( nombre=collection_name, tipo="VECTORSEARCH" ) collection_id = colección['createCollectionDetail']['id'] collection_arn = colección['createCollectionDetail']['arn'] excepto self.aoss_client.exceptions.ConflictException: colección = self.aoss_client.batch_get_collection( nombres=[nombre_colección] )['collectionDetails'][0]pp.pprint(colección) colección_id = colección['id'] colección_arn = colección['arn']

Una vez creada la colección OpenSearch Serverless, crearemos un índice que contiene propiedades, incluido un campo vectorial:

index_mapping = { "mappings": { "properties": { "video_id": {"type": "keyword"}, "segment_id": {"type": "integer"}, "start_time": {"type": "float"}, "end_time": {"type": "float"}, "embedding": { "type": "dense_vector", "dims": 1024, "index": True, "similitud": "coseno" }, "metadatos": {"tipo": "objeto"} } } } credenciales = boto3.Session().get_credentials() awsauth = AWSV4SignerAuth(credenciales, nombre_región, 'aoss') oss_client = OpenSearch( hosts=[{'host': host, 'puerto': 443}], http_auth=self.awsauth, use_ssl=True, verificar_certs=True, clase_conexión=RequestsHttpConnection, tiempo de espera=300) respuesta = oss_client.indices.create(index=index_name, body=index_mapping)

Índice de incrustaciones de Marengo

El siguiente fragmento de código demuestra cómo ingerir el resultado de incrustación del modelo Marengo en el índice de OpenSearch:

documentos =[]para i, segmento en enumerate(video_embeddings): document = { "embedding": segment["embedding"], "start_time": segment["startSec"], "end_time": segment["endSec"], "video_id": video_id, "segment_id": i, "embedding_option": segment.get("embeddingOption", "visual") } document.append(document) # Documentos de índice masivo Bulk_data =[]para documentos en documentos: Bulk_data.append({"index": {"_index": self.index_name}}) Bulk_data.append(doc) # Convertir a formato masivo Bulk_body = "n".join(json.dumps(item) para elemento en Bulk_data) + "n" respuesta = oss_client.bulk(body=bulk_body, index=self.index_name)

Búsqueda semántica intermodal

Con el diseño multivectorial de Marengo puedes buscar en diferentes modalidades, lo que es imposible con modelos de un solo vector. Al crear incrustaciones separadas pero alineadas para elementos visuales, de audio, de movimiento y contextuales, puede buscar videos usando el tipo de entrada que elija. Por ejemplo, "reproducción de música de jazz" devuelve videoclips de músicos tocando, pistas de audio de jazz y escenas de salas de conciertos a partir de una consulta de texto.

Los siguientes ejemplos muestran las excepcionales capacidades de búsqueda de Marengo en diferentes modalidades:

Búsqueda de texto

Aquí hay un fragmento de código que demuestra la capacidad de búsqueda semántica intermodal utilizando texto:

text_query = "una persona fumando en una habitación" modelInput={ "inputType": "text", "text": { "inputText": text_query } } respuesta = self.bedrock_client.invoke_model( modelId="us.twelvelabs.marengo-embed-3-0-v1:0", body=json.dumps(modelInput)) result = json.loads(respuesta["cuerpo"].read()) query_embedding = resultado["datos"][0]["incrustación"] # Buscar índice OpenSearch search_body = { "query": { "knn": { "incrustación": { "vector": query_embedding, "k": top_k } } }, "size": top_k, "_source": ["start_time", "end_time", "video_id", "segment_id"] } respuesta = opensearch_client.search(index=self.index_name, body=search_body) print(f"n✅ Encontrados {len(response['hits']['hits'])} segmentos coincidentes:") resultados =[]para hit en respuesta['hits']['hits']: resultado = { "score": hit["_score"], "video_id": hit["_source"]["video_id"], "segment_id": hit["_source"]["segment_id"], "start_time": hit["_source"]["start_time"], "end_time": hit["_source"]["end_time"] } resultados.añadir(resultado)

El resultado de búsqueda principal de la consulta de texto: “una persona fumando en una habitación” arroja el siguiente videoclip:

Búsqueda de imágenes

El siguiente fragmento de código demuestra la capacidad de búsqueda semántica intermodal para una imagen determinada:

s3_image_uri = f's3://{self.s3_bucket_name}/{self.s3_images_path}/{image_path_basename}' s3_output_prefix = f'{self.s3_embeddings_path}/{self.s3_images_path}/{uuid.uuid4()}' modelInput={ "inputType": "image", "image": { "mediaSource": { "s3Location": { "uri": s3_image_uri, "bucketOwner": self.aws_account_id } } } } respuesta = self.bedrock_client.invoke_model( modelId=self.cris_model_id, body=json.dumps(modelInput), ) resultado = json.loads(respuesta["body"].read()) … query_embedding = resultado["datos"][0]["incrustación"] # Buscar índice OpenSearch search_body = { "query": { "knn": { "incrustación": { "vector": query_embedding, "k": top_k } } }, "size": top_k, "_source": ["start_time", "end_time", "video_id", "segment_id"] } respuesta = opensearch_client.search(index=self.index_name, body=search_body) print(f"n✅ Encontrados {len(response['hits']['hits'])} segmentos coincidentes:") resultados =[]para hits en respuesta['hits']['hits']: resultado = { "score": hit["_score"], "video_id": hit["_source"]["video_id"], "segment_id": hit["_source"]["segment_id"], "start_time": hit["_source"]["start_time"], "end_time": hit["_source"]["end_time"] } resultados.añadir(resultado)

El resultado de búsqueda principal de la imagen de arriba arroja el siguiente videoclip:

Además de la búsqueda semántica utilizando texto e imágenes en el vídeo, el modelo Marengo también puede buscar vídeos utilizando incrustaciones de audio que se centran en el diálogo y el habla. Las capacidades de búsqueda de audio ayudan a los usuarios a encontrar videos basados ​​en oradores específicos, contenido de diálogo o temas hablados. Esto crea una experiencia de búsqueda de video integral que combina texto, imagen y audio para la comprensión del video.

Conclusión

La combinación de TwelveLabs Marengo y Amazon Bedrock abre nuevas e interesantes posibilidades para la comprensión del vídeo a través de su enfoque multivectorial y multimodal. A lo largo de esta publicación, hemos explorado ejemplos prácticos como la búsqueda de imagen a video con precisión temporal y la coincidencia detallada de texto a video. Con solo una llamada a la API de Bedrock, transformamos un archivo de video en 336 segmentos de búsqueda que responden a consultas de texto, visuales y de audio. Estas capacidades crean oportunidades para el descubrimiento de contenido en lenguaje natural, una gestión optimizada de activos multimedia y otras aplicaciones que pueden ayudar a las organizaciones a comprender y utilizar mejor su contenido de vídeo a escala.

A medida que el vídeo sigue dominando las experiencias digitales, modelos como Marengo proporcionan una base sólida para construir sistemas de análisis de vídeo más inteligentes. Consulte el código de muestra y descubra cómo la comprensión del vídeo multimodal puede transformar sus aplicaciones.

Sobre los autores

Wei Teh es arquitecto de soluciones de aprendizaje automático en AWS. Le apasiona ayudar a los clientes a alcanzar sus objetivos comerciales utilizando soluciones de aprendizaje automático de vanguardia. Fuera del trabajo, disfruta de actividades al aire libre como acampar, pescar y hacer caminatas con su familia.

Autor - Lana Zhang Lana Zhang es arquitecta senior especializada en soluciones para IA generativa en AWS dentro de la Organización Mundial de Especialistas. Se especializa en IA/ML, con especial atención en casos de uso como asistentes de voz de IA y comprensión multimodal. Trabaja en estrecha colaboración con clientes de diversas industrias, incluidos los medios y el entretenimiento, los juegos, los deportes, la publicidad, los servicios financieros y la atención médica, para ayudarlos a transformar sus soluciones comerciales a través de la IA.

Yanyan Zhang es científica senior de datos de IA generativa en Amazon Web Services, donde ha estado trabajando en tecnologías de IA/ML de vanguardia como especialista en IA generativa, ayudando a los clientes a utilizar la IA generativa para lograr los resultados deseados. Yanyan se graduó de la Universidad Texas A&M con un doctorado en Ingeniería Eléctrica. Fuera del trabajo, le encanta viajar, hacer ejercicio y explorar cosas nuevas.