Leerpad
Meta heeft eindelijk multimodaliteit toegevoegd aan het Llama-ecosysteem met de introductie van de Llama 3.2 11B & 90B vision-modellen. Deze twee modellen blinken uit in het verwerken van zowel tekst als afbeeldingen, wat me ertoe bracht een project te bouwen met de 90B-versie.
In dit artikel deel ik mijn werk en neem ik je stap voor stap mee bij het bouwen van een interactieve app voor afbeeldingsonderschriften, met Streamlit voor de front-end en Llama 3.2 90B als motor voor het genereren van onderschriften.
Waarom Llama 3.2 90B gebruiken voor een app met afbeeldingsonderschriften
Llama 3.2-Vision 90B is een state-of-the-art multimodaal large language model (LLM), gebouwd voor taken met zowel beeld- als tekstinvoer.
Het model valt op door zijn vermogen om complexe taken aan te pakken, zoals visueel redeneren, beeldherkenning en het genereren van onderschriften. Het is getraind op een enorme dataset van 6 miljard beeld-tekstparen.
Llama 3.2-Vision is een uitstekende keuze voor onze app omdat het meerdere talen ondersteunt voor tekstrtaken, al ligt de primaire focus bij beeldgerelateerde toepassingen op Engels. De belangrijkste features maken het een sterke keuze voor taken als Visual Question Answering (VQA), Document VQA en image-text retrieval, waarbij het genereren van onderschriften een van de opvallendste toepassingen is.
Laten we verkennen hoe deze mogelijkheden zich vertalen naar een praktijktoepassing zoals afbeeldingsonderschriften.
Pipeline voor afbeeldingsonderschriften
Een afbeeldingsonderschrift is het geautomatiseerd genereren van beschrijvende tekst die de inhoud van een afbeelding samenvat. Het combineert computer vision en natural language processing om visuele details in taal uit te drukken.
Traditioneel vereist het genereren van onderschriften een complexe pijplijn, vaak met aparte fasen voor beeldverwerking en taalproductie. De standaardaanpak omvat drie hoofdstappen: beeldvoorbewerking, feature-extractie en het genereren van onderschriften.
- Beeldvoorbewerking: Afbeeldingen worden meestal geschaald, genormaliseerd en soms bijgesneden zodat ze voldoen aan de invoerspecificaties van het model.
- Feature-extractie: Visuele kenmerken worden geëxtraheerd om objecten, scènes of relevante details in de afbeelding te identificeren. In de meeste modellen is hiervoor een apart vision-model nodig om de afbeelding te interpreteren en gestructureerde data te genereren die taalmodellen begrijpen.
- Genereren van onderschriften: Deze geëxtraheerde kenmerken worden vervolgens gebruikt door een taalmodel om een samenhangende beschrijving te maken, waarin de objecten, context en relaties uit de visuele data worden gecombineerd.
Met Llama 3.2 90B wordt dit traditioneel ingewikkelde proces eenvoudiger. De vision-adapter van het model integreert visuele kenmerken in het kern-taalmodel, waardoor het direct afbeeldingen kan interpreteren en onderschriften kan genereren via eenvoudige prompts.
Door cross-attention-lagen in de architectuur op te nemen, stelt Llama 3.2 90B gebruikers in staat een afbeelding te beschrijven door het model simpelweg te prompten—zonder aparte verwerkingsstappen. Deze eenvoud maakt onderschriften toegankelijker en efficiënter: één prompt kan een natuurlijke, beschrijvende tekst opleveren die de essentie van een afbeelding goed vangt.
Overzicht van de app voor afbeeldingsonderschriften
Om de kracht van Llama 3.2 90B tot leven te brengen, bouwen we een simpele maar effectieve app voor afbeeldingsonderschriften met Streamlit voor de front-end en Groq voor het genereren van onderschriften.
De app laat gebruikers een afbeelding uploaden en ontvangt met slechts twee klikken een beschrijvend onderschrift van het model. Deze opzet is gebruiksvriendelijk en vereist minimale programmeerkennis om te starten.
Onze applicatie bevat de volgende features:
- Titel: Een prominent weergegeven titel, Llama Captioner, om het doel van de app duidelijk te maken.
- Uploadknop: Een interface om afbeeldingen vanaf het apparaat van de gebruiker te uploaden.
- Genereerknop: Een knop om het proces van onderschriften genereren te starten.
- Onderschrift-uitvoer: De app toont het gegenereerde onderschrift direct in de interface.
Code-implementatie voor onze Llama 3.2 90B-app
De Groq API fungeert als brug tussen de geüploade afbeelding van de gebruiker en het Llama 3.2-Vision-model. Wil je meedenken en meecoden, zorg dan eerst dat je:
- Je Groq API-sleutel verkrijgt door je aan te melden bij de Groq Console.
- Je API-sleutel opslaat in een credentials.json-bestand om toegang te vereenvoudigen.
- De quickstart-gids van Groq volgt voor installatie en configuratie.
De onderstaande Python-code zet een Streamlit-app op die met de Groq API communiceert. Het omvat:
- Imports van libraries voor webapp-ontwikkeling (Streamlit), AI-interacties (Groq), afbeeldingsverwerking (base64) en bestandsoperaties (os, json).
- Leest de Groq API-sleutel uit een apart JSON-bestand voor betere beveiliging.
- Definieert een functie om afbeeldingen te encoderen naar base64-formaat voor efficiënte overdracht en verwerking.
import streamlit as stfrom groq import Groqimport base64import osimport json# Set up Groq API Keyos.environ['GROQ_API_KEY'] = json.load(open('credentials.json', 'r'))['groq_token']# Function to encode the imagedef encode_image(image_path): with open(image_path, "rb") as image_file: return base64.b64encode(image_file.read()).decode('utf-8')We gaan verder met de onderstaande functie, die is bedoeld om met de Groq API een tekstuele beschrijving van een geüploade afbeelding te genereren. Dit doet de functie:
- Afbeelding encoderen: de geüploade afbeelding wordt omgezet naar een base64-gecodeerde string. Dit formaat maakt het eenvoudig om de afbeeldingsdata in de API-aanvraag mee te sturen.
- Interactie met de Groq API: er wordt een Groq-client geïnstantieerd om te communiceren met de Groq-service. Er wordt een chat-completionverzoek opgesteld, bestaande uit:
- Een gebruikersprompt: "What's in this image?"
- De base64-gecodeerde afbeeldingsdata, ingebed in een data-URI. Het model llama-3.2-90b-vision-preview wordt opgegeven om de afbeelding te verwerken en een tekstuele beschrijving te genereren.
- Extractie van het onderschrift: het gegenereerde onderschrift wordt uit het Groq API-antwoord gehaald. De inhoud van het bericht van de eerste keuze, die het onderschrift bevat, wordt geretourneerd.
# Function to generate captiondef 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.contentTot slot genereren we onze interactieve webapp met Streamlit:
# Streamlit Appst.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)De uiteindelijke Streamlit-app: Llama Captioner
Deze Streamlit-app biedt een gebruiksvriendelijke interface voor het genereren van onderschriften. Zo werkt het:
- Titel en bestandsuploader:
- De app toont een titel: "Llama Captioner".
- Een bestandsuploader laat gebruikers een afbeeldingsbestand kiezen (JPG, JPEG of PNG).
- Weergave van de afbeelding:
- Zodra een afbeelding is geüpload, wordt deze weergegeven met de functie
st.image.
- Genereren van onderschriften:
- Een knop, "Generate Caption", start het proces voor het genereren van het onderschrift.
- Bij klikken geeft een spinner aan dat het onderschrift wordt gegenereerd.
- De functie generate_caption wordt aangeroepen om de geüploade afbeelding te verwerken en een onderschrift op te halen.
- Na succesvolle generatie verschijnt een succesmelding, gevolgd door het gegenereerde onderschrift.
Onderstaande snippet is code in actie waarbij een afbeelding van Eddie Hall is geüpload om het onderschrift te genereren. Verrassend genoeg haalde het zelfs informatie naar boven die niet duidelijk zichtbaar was, zoals "Strongest Man" enz.

Conclusie
Een app voor afbeeldingsonderschriften bouwen met Llama 3.2 90B en Streamlit laat zien hoe geavanceerde AI moeilijke taken eenvoudiger maakt. Dit project combineert een krachtig model met een eenvoudige interface tot een intuïtieve, toegankelijke tool.
Als AI-engineer zie ik enorm veel potentie in dit soort tools. Ze maken technologie toegankelijker, helpen mensen beter met content omgaan en automatiseren processen op slimmere manieren.
Wil je verder leren over Llama, bekijk dan deze resources:
Senior GenAI Engineer en contentmaker die 20 miljoen weergaven heeft behaald door kennis te delen over GenAI en datawetenschap.

