Saltar al contenido principal

Tutorial Llama 3.2 90B: Aplicación de subtitulado de imágenes con Groq y Streamlit

Aprende a crear una aplicación de subtitulación de imágenes utilizando Streamlit como interfaz, Llama 3.2 90B para generar subtítulos y Groq como API.
Actualizado 15 ene 2025  · 12 min de lectura

Meta ha añadido por fin la multimodalidad al ecosistema Llama presentando el Llama 3.2 11B y 90B modelos de visión. Estos dos modelos destacan en el procesamiento tanto de texto como de imágenes, lo que me llevó a intentar construir un proyecto utilizando la versión 90B.

En este artículo, compartiré mi trabajo y te guiaré en la construcción de una aplicación interactiva de subtitulación de imágenes utilizando Streamlit para el front-end y Llama 3.2 90B como motor para generar los subtítulos.

Por qué utilizar Llama 3.2 90B para una aplicación de subtitulado de imágenes

Llama 3.2-Visión 90B es un sistema de última generación multimodal multimodal (LLM) creado para tareas en las que intervienen tanto imágenes como texto.

Destaca por su capacidad para abordar tareas complejas como el razonamiento visual, el reconocimiento de imágenes y el subtitulado de imágenes. Se ha entrenado con un conjunto de datos masivo de 6.000 millones de pares imagen-texto.

Llama 3.2-Vision es una gran elección para nuestra aplicación porque admite varios idiomas para las tareas de texto, aunque el inglés es su enfoque principal para las aplicaciones relacionadas con imágenes. Sus características clave lo convierten en una opción excelente para tareas como la Respuesta Visual a Preguntas (VQA), la VQA de Documentos y la recuperación imagen-texto, siendo el subtitulado de imágenes una de sus aplicaciones más destacadas.

Exploremos cómo se traducen estas capacidades en una aplicación del mundo real, como el subtitulado de imágenes.

Canal de subtitulado de imágenes

El subtitulado de imágenes es el proceso automatizado de generar un texto descriptivo que resuma el contenido de una imagen. Combina la visión por ordenador y el procesamiento del lenguaje natural para interpretar y expresar detalles visuales en el lenguaje.

Tradicionalmente, el subtitulado de imágenes ha requerido una compleja canalización, que a menudo implicaba etapas separadas para el procesamiento de imágenes y la generación del lenguaje. El enfoque estándar implica tres pasos principales: preprocesamiento de la imagen, extracción de características y generación de leyendas.

  1. Preprocesamiento de imágenes: Normalmente, las imágenes se redimensionan, normalizan y, ocasionalmente, se recortan para garantizar que cumplen las especificaciones de entrada del modelo.
  2. Extracción de rasgos: Las características visuales se extraen para identificar objetos, escenas o detalles relevantes dentro de la imagen. En la mayoría de los modelos, esto requiere un modelo de visión independiente para interpretar la imagen, generando datos estructurados que los modelos lingüísticos puedan comprender.
  3. Generación de subtítulos: A continuación, un modelo lingüístico utiliza estas características extraídas para elaborar una descripción coherente, combinando los objetos, el contexto y las relaciones identificadas en los datos visuales.

Con Llama 3.2 90B, este proceso tradicionalmente intrincado se vuelve más sencillo. El adaptador de visión del modelo integra características visuales en el núcleo del modelo lingüístico, lo que le permite interpretar imágenes directamente y generar subtítulos mediante sencillas indicaciones.

Al incrustar capas de atención cruzada en su arquitectura, Llama 3.2 90B permite a los usuarios describir una imagen con sólo indicárselo al modelo, eliminando la necesidad de etapas separadas de procesamiento. Esta simplicidad permite un subtitulado de imágenes más accesible y eficaz, en el que una sola indicación puede dar lugar a un subtítulo natural y descriptivo que capte eficazmente la esencia de una imagen.

Visión general de la aplicación de subtitulado de imágenes

Para dar vida a la potencia de Llama 3.2 90B, crearemos una aplicación de subtitulado de imágenes sencilla pero eficaz, utilizando Streamlit para el front-end y Groq para generar los subtítulos.

La aplicación permitirá a los usuarios subir una imagen y recibir un pie de foto descriptivo generado por la modelo con sólo dos clics. Esta configuración es fácil de usar y requiere unos conocimientos mínimos de programación para empezar.

Nuestra aplicación incluirá las siguientes características:

  1. Title: Un título bien visible, Llama Captioner, para establecer el propósito de la aplicación.
  2. Botón de carga: Una interfaz para subir imágenes desde el dispositivo del usuario.
  3. Botón Generar: Un botón para iniciar el proceso de generación de subtítulos.
  4. Salida de subtítulos: La aplicación mostrará la leyenda generada directamente en la interfaz.

Implementación del código de nuestra aplicación Llama 3.2 90B

La API Groq actuará como puente entre la imagen subida por el usuario y el modelo Llama 3.2-Vision. Si quieres seguirme y codificar conmigo, asegúrate primero:

  1. Obtén tu clave API de Groq registrándote en Consola Groq.
  2. Guarda tu clave API en un archivo credenciales.json para simplificar el acceso.
  3. Sigue la guía de inicio rápido para la instalación y configuración.

El siguiente fragmento de código Python configura una aplicación Streamlit para interactuar con la API de Groq. Incluye:

  1. Importa bibliotecas para el desarrollo de aplicaciones web (Streamlit), interacciones con IA (Groq), manejo de imágenes (base64) y operaciones con archivos (os, json).
  2. Lee la clave de la API de Groq de un archivo JSON independiente para mejorar la seguridad.
  3. Define una función para codificar imágenes en formato base64 para una transmisión y procesamiento eficaces.
import streamlit as st
from groq import Groq
import base64
import os
import json

# Set up Groq API Key
os.environ['GROQ_API_KEY'] = json.load(open('credentials.json', 'r'))['groq_token']

# Function to encode the image
def encode_image(image_path):
   with open(image_path, "rb") as image_file:
       return base64.b64encode(image_file.read()).decode('utf-8')

Seguimos adelante escribiendo la función siguiente, diseñada para generar una descripción textual de una imagen subida utilizando la API Groq. Aquí tienes un desglose de su funcionalidad:

  1. Codificación de la imagen: La imagen subida se convierte en una cadena codificada en base64. Este formato permite que los datos de la imagen se transmitan fácilmente dentro de la solicitud API.
  2. Interacción con la API Groq: Se instanciará un cliente Groq para facilitar la comunicación con el servicio Groq. Se formula una solicitud de finalización de chat, que comprende:
  • Un aviso al usuario: "¿Qué hay en esta imagen?"
  • Los datos de la imagen codificados en base64, incrustados dentro de una URI de datos. Se especifica el modelo llama-3.2-90b-vision-preview para procesar la imagen y generar una descripción textual.
  1. Extracción de subtítulos: El título generado se extrae de la respuesta de la API Groq. Se devuelve el contenido del mensaje de la primera opción, que contiene el título.
# Function to generate caption
def generate_caption(uploaded_image):
   base64_image = base64.b64encode(uploaded_image.read()).decode('utf-8')
   client = Groq()
   chat_completion = client.chat.completions.create(
       messages=[
           {
               "role": "user",
               "content": [
                   {"type": "text", "text": "What's in this image?"},
                   {
                       "type": "image_url",
                       "image_url": {
                           "url": f"data:image/jpeg;base64,{base64_image}",
                       },
                   },
               ],
           }
       ],
       model="llama-3.2-90b-vision-preview",
   )
   return chat_completion.choices[0].message.content

Por último, generamos nuestra aplicación web interactiva a través de Streamlit:

# Streamlit App
st.title("Llama Captioner")

uploaded_file = st.file_uploader("Upload an image", type=["jpg", "jpeg", "png"])

if uploaded_file is not None:
   # Show the uploaded image
   st.image(uploaded_file, caption="Uploaded Image", use_container_width=True)

   if st.button("Generate Caption"):
       with st.spinner("Generating caption..."):
           caption = generate_caption(uploaded_file)
       st.success("Caption Generated!")
       st.write("**Caption:**", caption)

La aplicación final de Streamlit: Llama Captioner

Esta aplicación de Streamlit proporciona una interfaz fácil de usar para el subtitulado de imágenes. Aquí tienes un desglose de su funcionalidad:

  1. Título y cargador de archivos:
  • La aplicación muestra un título: "Llama Captioner".
  • Un componente de carga de archivos permite a los usuarios seleccionar un archivo de imagen (JPG, JPEG o PNG).
  1. Visualización de imágenes:
  • Una vez cargada una imagen, la aplicación la muestra utilizando la función st.image.
  1. Generación de subtítulos:
  • Un botón, "Generar pie de foto", activa el proceso de generación del pie de foto.
  • Cuando se pulsa, una rueda giratoria indica que se está generando el título.
  • Se llama a la función generar_título para procesar la imagen subida y obtener un título.
  • Si se genera correctamente, se muestra un mensaje de éxito, seguido del título generado.

El siguiente fragmento es el código en acción, en el que se subió una imagen de Eddie Hall para generar el pie de foto. Sorprendentemente, extrajo incluso la información que no era claramente visible, como "El hombre más fuerte", etc.

Conclusión

La creación de una aplicación de subtitulado de imágenes con Llama 3.2 90B y Streamlit muestra cómo la IA avanzada puede facilitar tareas difíciles. Este proyecto combina un potente modelo con una interfaz sencilla para crear una herramienta intuitiva y fácil de usar.

Como ingeniero de IA, veo un enorme potencial en herramientas como éstas. Pueden hacer que la tecnología sea más accesible, ayudar a las personas a comprometerse mejor con el contenido y automatizar los procesos de forma más inteligente.

Para continuar tu aprendizaje sobre Llama, te recomiendo los siguientes recursos:


Bhavishya Pandit's photo
Author
Bhavishya Pandit
LinkedIn
Twitter

Ingeniero Senior de GenAI y creador de contenidos que ha conseguido 20 millones de visitas compartiendo conocimientos sobre GenAI y ciencia de datos.

Temas

¡Aprende Llama con estos cursos!

programa

Llama Fundamentals

5 hours hr
Experiment with Llama 3 to run inference on pre-trained models, fine-tune them on custom datasets, and optimize performance.
Ver detallesRight Arrow
Comienza el curso
Ver másRight Arrow
Relacionado
An AI juggles tasks

blog

Cinco proyectos que puedes crear con modelos de IA generativa (con ejemplos)

Aprende a utilizar modelos de IA generativa para crear un editor de imágenes, un chatbot similar a ChatGPT con pocos recursos y una aplicación clasificadora de aprobación de préstamos y a automatizar interacciones PDF y un asistente de voz con GPT.
Abid Ali Awan's photo

Abid Ali Awan

10 min

tutorial

Tutorial de Python: Streamlit

Este tutorial sobre Streamlit está pensado para ayudar a los científicos de datos o ingenieros de machine learning que no son desarrolladores web y no están interesados en pasar semanas aprendiendo a utilizar estos marcos para crear aplicaciones web.
Nadia mhadhbi's photo

Nadia mhadhbi

18 min

tutorial

RAG Con Llama 3.1 8B, Ollama y Langchain: Tutorial

Aprende a crear una aplicación RAG con Llama 3.1 8B utilizando Ollama y Langchain, configurando el entorno, procesando documentos, creando incrustaciones e integrando un recuperador.
Ryan Ong's photo

Ryan Ong

12 min

tutorial

Tutorial sobre cómo crear aplicaciones LLM con LangChain

Explore el potencial sin explotar de los grandes modelos lingüísticos con LangChain, un marco Python de código abierto para crear aplicaciones avanzadas de IA.
Moez Ali's photo

Moez Ali

12 min

tutorial

Ajuste fino de LLaMA 2: Guía paso a paso para personalizar el modelo de lenguaje grande

Aprende a ajustar Llama-2 en Colab utilizando nuevas técnicas para superar las limitaciones de memoria y computación y hacer más accesibles los grandes modelos lingüísticos de código abierto.
Abid Ali Awan's photo

Abid Ali Awan

12 min

tutorial

Tutorial de Generación de nubes de palabras en Python

Aprende a realizar Análisis exploratorios de datos para el Procesamiento del lenguaje natural utilizando WordCloud en Python.
Duong Vu's photo

Duong Vu

21 min

Ver másVer más