Accéder au contenu principal

Llama 3.2 90B Tutoriel : Application de sous-titrage d'images avec Groq et Streamlit

Apprenez à construire une application de sous-titrage d'images en utilisant Streamlit pour l'interface, Llama 3.2 90B pour générer des sous-titres, et Groq comme API.
Actualisé 15 janv. 2025  · 12 min de lecture

Meta a finalement ajouté la multimodalité à l'écosystème Llama en introduisant le Llama 3.2 11B & 90B modèles de vision. Ces deux modèles excellent dans le traitement du texte et des images, ce qui m'a amené à essayer de construire un projet en utilisant la version 90B.

Dans cet article, je vais partager mon travail et vous guider dans la construction d'une application interactive de sous-titrage d'images en utilisant Streamlit pour l'interface et Llama 3.2 90B comme moteur de génération de sous-titres.

Pourquoi utiliser Llama 3.2 90B pour une application de sous-titrage d'images ?

Llama 3.2-Vision 90B est un logiciel multimodal de pointe. multimodal multimodal (LLM) conçu pour des tâches impliquant à la fois des images et des textes.

Il se distingue par sa capacité à s'attaquer à des tâches complexes telles que le raisonnement visuel, la reconnaissance d'images et le sous-titrage d'images. Il a été entraîné sur un ensemble massif de données de 6 milliards de paires image-texte.

Llama 3.2-Vision est un excellent choix pour notre application car il prend en charge plusieurs langues pour les tâches textuelles, bien que l'anglais soit son principal objectif pour les applications liées à l'image. Ses principales caractéristiques en font un excellent choix pour des tâches telles que la réponse à des questions visuelles (VQA), la VQA de documents et la recherche image-texte, le sous-titrage d'images étant l'une de ses applications les plus remarquables.

Voyons comment ces capacités se traduisent dans une application réelle telle que le sous-titrage d'images.

Pipeline de sous-titrage d'images

Le légendage des images est le processus automatisé de génération d'un texte descriptif qui résume le contenu d'une image. Il combine la vision par ordinateur et le traitement du langage naturel pour interpréter et exprimer les détails visuels en langage.

Traditionnellement, le sous-titrage d'images nécessitait un pipeline complexe, comprenant souvent des étapes distinctes pour le traitement de l'image et la génération du langage. L'approche standard comprend trois étapes principales : le prétraitement de l'image, l'extraction des caractéristiques et la génération des légendes.

  1. Prétraitement des images: Les images sont généralement redimensionnées, normalisées et parfois recadrées pour s'assurer qu'elles répondent aux spécifications d'entrée du modèle.
  2. Extraction des caractéristiques: Les caractéristiques visuelles sont extraites pour identifier des objets, des scènes ou des détails pertinents dans l'image. Dans la plupart des modèles, cela nécessite un modèle de vision distinct pour interpréter l'image, générant des données structurées que les modèles de langage peuvent comprendre.
  3. Génération de légendes: Ces caractéristiques extraites sont ensuite utilisées par un modèle de langage pour élaborer une description cohérente, combinant les objets, le contexte et les relations identifiés dans les données visuelles.

Avec Llama 3.2 90B, ce processus traditionnellement complexe devient plus simple. L'adaptateur de vision du modèle intègre des caractéristiques visuelles dans le modèle linguistique de base, ce qui lui permet d'interpréter directement les images et de générer des légendes à l'aide de simples invites.

En intégrant des couches d'attention croisée dans son architecture, le Llama 3.2 90B permet aux utilisateurs de décrire une image en sollicitant simplement le modèle, ce qui élimine la nécessité d'étapes de traitement distinctes. Cette simplicité permet un sous-titrage plus accessible et plus efficace des images, où une simple invite peut produire une légende naturelle et descriptive qui capture efficacement l'essence d'une image.

Présentation de l'application de sous-titrage d'images

Pour donner vie à la puissance de Llama 3.2 90B, nous allons construire une application de sous-titrage d'images simple mais efficace en utilisant Streamlit pour l'interface et Groq pour la génération des légendes.

L'application permettra aux utilisateurs de télécharger une image et de recevoir une légende descriptive générée par le modèle en seulement deux clics. Cette configuration est conviviale et ne nécessite qu'un minimum de connaissances en matière de codage pour démarrer.

Notre application comprendra les caractéristiques suivantes :

  1. Titre : Un titre bien visible, LlamaCaptioner, pour établir l'objectif de l'application.
  2. Bouton de téléchargement : Une interface pour télécharger des images à partir de l'appareil de l'utilisateur.
  3. Bouton "Générer" : Bouton permettant de lancer le processus de génération des légendes.
  4. Sortie de la légende : L'application affichera la légende générée directement sur l'interface.

Implémentation du code pour notre application Llama 3.2 90B

L'API Groq servira de pont entre l'image téléchargée par l'utilisateur et le modèle Llama 3.2-Vision. Si vous voulez me suivre et coder avec moi, assurez-vous d'abord :

  1. Obtenez votre clé API Groq en vous inscrivant sur Groq Console.
  2. Enregistrez votre clé API dans un fichier credentials.json pour simplifier l'accès.
  3. Suivez le guide de démarrage rapide pour l'installation et la configuration.

L'extrait de code Python ci-dessous met en place une application Streamlit pour interagir avec l'API Groq. Il comprend

  1. Importe des bibliothèques pour le développement d'applications web (Streamlit), les interactions avec l'IA (Groq), la gestion des images (base64) et les opérations sur les fichiers (os, json).
  2. Lit la clé API Groq à partir d'un fichier JSON séparé pour une sécurité accrue.
  3. Définit une fonction permettant d'encoder les images au format base64 pour une transmission et un traitement efficaces.
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')

Nous continuons en écrivant la fonction ci-dessous, qui est conçue pour générer une description textuelle d'une image téléchargée à l'aide de l'API Groq. Voici un aperçu de ses fonctionnalités :

  1. Encodage des images : L'image téléchargée est convertie en une chaîne de caractères codée en base64. Ce format permet de transmettre facilement les données de l'image dans la requête API.
  2. Interaction avec l'API Groq : Un client Groq est instancié pour faciliter la communication avec le service Groq. Une demande d'achèvement de chat est formulée, comprenant :
  • Une invite de l'utilisateur : "Qu'y a-t-il dans cette image ?
  • Les données de l'image encodées en base64, intégrées dans un URI de données. Le modèle llama-3.2-90b-vision-preview est spécifié pour traiter l'image et générer une description textuelle.
  1. Extraction de la légende : La légende générée est extraite de la réponse de l'API Groq. Le contenu du message du premier choix, qui contient la légende, est renvoyé.
# 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

Enfin, nous générons notre application web interactive à l'aide 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)

L'application Streamlit finale : Llama sous-titreur

Cette application Streamlit fournit une interface conviviale pour le sous-titrage des images. Voici un aperçu de ses fonctionnalités :

  1. Titre et téléchargeur de fichiers :
  • L'application affiche un titre : "Llama Captioner".
  • Un composant de téléchargement de fichiers permet aux utilisateurs de sélectionner un fichier image (JPG, JPEG ou PNG).
  1. Affichage de l'image :
  • Une fois l'image téléchargée, l'application l'affiche à l'aide de la fonction st.image.
  1. Génération de légendes :
  • Un bouton, "Générer la légende", déclenche le processus de génération de la légende.
  • Lorsqu'on clique dessus, un curseur indique que la légende est en cours de génération.
  • La fonction generate_caption est appelée pour traiter l'image téléchargée et obtenir une légende.
  • Lorsque la génération est réussie, un message de réussite s'affiche, suivi de la légende générée.

L'extrait ci-dessous montre le code en action : une image d'Eddie Hall a été téléchargée pour générer la légende. Il est surprenant de constater qu'il a même extrait des informations qui n'étaient pas clairement visibles, comme "L'homme le plus fort", etc.

Conclusion

La création d'une application de sous-titrage d'images avec Llama 3.2 90B et Streamlit montre comment l'IA avancée peut faciliter les tâches difficiles. Ce projet associe un modèle puissant à une interface simple pour créer un outil à la fois intuitif et facile à utiliser.

En tant qu'ingénieur en IA, je vois un énorme potentiel dans des outils comme ceux-ci. Ils peuvent rendre la technologie plus accessible, aider les gens à mieux s'impliquer dans le contenu et automatiser les processus de manière plus intelligente.

Pour poursuivre votre apprentissage sur le lama, je vous recommande les ressources suivantes :


Bhavishya Pandit's photo
Author
Bhavishya Pandit
LinkedIn
Twitter

Ingénieur GenAI senior et créateur de contenu qui a recueilli 20 millions de vues en partageant ses connaissances sur la GenAI et la science des données.

Sujets

Apprenez le lama avec ces cours !

cursus

Les fondamentaux du lama

5 heures hr
Expérimentez Llama 3 pour exécuter l'inférence sur des modèles pré-entraînés, les affiner sur des ensembles de données personnalisés et optimiser les performances.
Afficher les détailsRight Arrow
Commencer le cours
Certification disponible

cours

Mise au point avec le Llama 3

2 hr
296
Ajustez Llama pour des tâches personnalisées à l'aide de TorchTune, et apprenez des techniques d'ajustement efficaces telles que la quantification.
Voir plusRight Arrow