Pular para o conteúdo principal

Llama 3.2 90B Tutorial: Aplicativo de legendagem de imagens com Groq e Streamlit

Saiba como criar um aplicativo de legendagem de imagens usando o Streamlit para o front-end, o Llama 3.2 90B para gerar legendas e o Groq como API.
Actualizado 15 de jan. de 2025  · 12 min de leitura

A Meta finalmente adicionou a multimodalidade ao ecossistema do Llama, introduzindo o Llama 3.2 11B e 90B modelos de visão. Esses dois modelos são excelentes no processamento de texto e imagens, o que me levou a tentar criar um projeto usando a versão 90B.

Neste artigo, compartilharei meu trabalho e orientarei você na criação de um aplicativo interativo de legendagem de imagens usando o Streamlit para o front-end e o Llama 3.2 90B como mecanismo de geração de legendas.

Por que usar o Llama 3.2 90B para um aplicativo de legendagem de imagens

O Llama 3.2-Vision 90B é um sistema multimodal (LLM) multimodal de última geração, desenvolvido para tarefas que envolvem entradas de imagem e texto.

Ele se destaca por sua capacidade de lidar com tarefas complexas, como raciocínio visual, reconhecimento de imagens e legendas de imagens. Ele foi treinado em um enorme conjunto de dados de 6 bilhões de pares imagem-texto.

O Llama 3.2-Vision é uma ótima opção para o nosso aplicativo porque oferece suporte a vários idiomas para tarefas de texto, embora o inglês seja seu foco principal para aplicativos relacionados a imagens. Seus principais recursos o tornam uma excelente opção para tarefas como Visual Question Answering (VQA), Document VQA e recuperação de texto-imagem, sendo a legenda de imagens uma de suas aplicações de destaque.

Vamos explorar como esses recursos se traduzem em um aplicativo do mundo real, como a legenda de imagens.

Pipeline de legendagem de imagens

A legenda de imagem é o processo automatizado de geração de texto descritivo que resume o conteúdo de uma imagem. Ele combina visão computacional e processamento de linguagem natural para interpretar e expressar detalhes visuais em linguagem.

Tradicionalmente, a legendagem de imagens exige um pipeline complexo, geralmente envolvendo estágios separados para processamento de imagens e geração de linguagem. A abordagem padrão envolve três etapas principais: pré-processamento de imagens, extração de recursos e geração de legendas.

  1. Pré-processamento de imagens: Normalmente, as imagens são redimensionadas, normalizadas e, ocasionalmente, cortadas para garantir que atendam às especificações de entrada do modelo.
  2. Extração de recursos: Os recursos visuais são extraídos para identificar objetos, cenas ou detalhes relevantes na imagem. Na maioria dos modelos, isso requer um modelo de visão separado para interpretar a imagem, gerando dados estruturados que os modelos de linguagem podem entender.
  3. Geração de legendas: Esses recursos extraídos são então usados por um modelo de linguagem para criar uma descrição coerente, combinando os objetos, o contexto e os relacionamentos identificados nos dados visuais.

Com o Llama 3.2 90B, esse processo tradicionalmente complexo se torna mais simples. O adaptador de visão do modelo integra recursos visuais ao modelo de linguagem principal, permitindo que ele interprete imagens diretamente e gere legendas por meio de avisos simples.

Ao incorporar camadas de atenção cruzada em sua arquitetura, o Llama 3.2 90B permite que os usuários descrevam uma imagem simplesmente solicitando o modelo, eliminando a necessidade de estágios separados de processamento. Essa simplicidade permite uma legenda de imagem mais acessível e eficiente, em que um único prompt pode gerar uma legenda natural e descritiva que capta com eficácia a essência de uma imagem.

Visão geral do aplicativo Image Captioning

Para dar vida ao poder do Llama 3.2 90B, criaremos um aplicativo de legenda de imagem simples, mas eficaz, usando o Streamlit para o front-end e o Groq para gerar legendas.

O aplicativo permitirá que os usuários carreguem uma imagem e recebam uma legenda descritiva gerada pelo modelo com apenas dois cliques. Essa configuração é fácil de usar e requer um conhecimento mínimo de codificação para que você possa começar.

Nosso aplicativo incluirá os seguintes recursos:

  1. Título: Um título exibido com destaque, LlamaCaptioner, para estabelecer a finalidade do aplicativo.
  2. Botão Upload: Uma interface para carregar imagens do dispositivo do usuário.
  3. Botão Gerar: Um botão para iniciar o processo de geração de legendas.
  4. Saída de legenda: O aplicativo exibirá a legenda gerada diretamente na interface.

Implementação de código para nosso aplicativo Llama 3.2 90B

A API do Groq atuará como ponte entre a imagem carregada pelo usuário e o modelo Llama 3.2-Vision. Se você quiser acompanhar e codificar comigo, certifique-se de que o fez primeiro:

  1. Obtenha sua chave de API do Groq inscrevendo-se em Console do Groq.
  2. Salve sua chave de API em um arquivo credentials.json para simplificar o acesso.
  3. Siga o guia de início rápido do Groq guia de início rápido para instalação e configuração.

Este trecho de código Python abaixo configura um aplicativo Streamlit para interagir com a API do Groq. Ele inclui:

  1. Importa bibliotecas para desenvolvimento de aplicativos Web (Streamlit), interações de IA (Groq), manipulação de imagens (base64) e operações de arquivos (os, json).
  2. Lê a chave da API do Groq de um arquivo JSON separado para aumentar a segurança.
  3. Define uma função para codificar imagens no formato base64 para transmissão e processamento eficientes.
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')

Continuamos escrevendo a função abaixo, que foi projetada para gerar uma descrição textual de uma imagem carregada usando a API do Groq. Veja a seguir um detalhamento de sua funcionalidade:

  1. Codificação de imagem: A imagem carregada é convertida em uma cadeia de caracteres codificada em base64. Esse formato permite que os dados da imagem sejam facilmente transmitidos na solicitação de API.
  2. Interação com a API do Groq: Um cliente Groq é instanciado para facilitar a comunicação com o serviço Groq. Uma solicitação de conclusão de bate-papo é formulada, incluindo:
  • Um prompt de usuário: "O que há nessa imagem?"
  • Os dados de imagem codificados em base64, incorporados em um URI de dados. O modelo llama-3.2-90b-vision-preview é especificado para processar a imagem e gerar uma descrição textual.
  1. Extração de legenda: A legenda gerada é extraída da resposta da API do Groq. O conteúdo da mensagem da primeira opção, que contém a legenda, é retornado.
# 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 fim, geramos nosso aplicativo interativo da Web por meio do 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)

O aplicativo final do Streamlit: Legendador de lhamas

Esse aplicativo Streamlit oferece uma interface fácil de usar para legendas de imagens. Veja a seguir um detalhamento de sua funcionalidade:

  1. Título e carregador de arquivos:
  • O aplicativo exibe um título: "Llama Captioner".
  • Um componente de upload de arquivo permite que os usuários selecionem um arquivo de imagem (JPG, JPEG ou PNG).
  1. Exibição de imagens:
  • Depois que uma imagem é carregada, o aplicativo a exibe usando a função st.image.
  1. Geração de legendas:
  • Um botão, "Generate Caption" (Gerar legenda), aciona o processo de geração de legenda.
  • Quando clicado, um botão giratório indica que a legenda está sendo gerada.
  • A função generate_caption é chamada para processar a imagem carregada e obter uma legenda.
  • Após a geração bem-sucedida, uma mensagem de sucesso é exibida, seguida da legenda gerada.

O trecho abaixo é o código em ação, no qual uma imagem de Eddie Hall foi carregada para gerar a legenda. Surpreendentemente, ele extraiu até mesmo as informações que não estavam claramente visíveis, como "Homem mais forte" etc.

Conclusão

A criação de um aplicativo de legendagem de imagens com o Llama 3.2 90B e o Streamlit mostra como a IA avançada pode facilitar tarefas difíceis. Esse projeto combina um modelo avançado com uma interface simples para criar uma ferramenta intuitiva e fácil de usar.

Como engenheiro de IA, vejo um enorme potencial em ferramentas como essas. Eles podem tornar a tecnologia mais acessível, ajudar as pessoas a se envolverem melhor com o conteúdo e automatizar processos de maneira mais inteligente.

Para que você continue aprendendo sobre a Llama, recomendo os seguintes recursos:


Bhavishya Pandit's photo
Author
Bhavishya Pandit
LinkedIn
Twitter

Engenheiro sênior de GenAI e criador de conteúdo que obteve 20 milhões de visualizações ao compartilhar conhecimento sobre GenAI e ciência de dados.

Temas

Aprenda Llama com esses 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 DetalhesRight Arrow
Iniciar curso
Ver maisRight Arrow
Relacionado

tutorial

RAG With Llama 3.1 8B, Ollama e Langchain: Tutorial

Aprenda a criar um aplicativo RAG com o Llama 3.1 8B usando Ollama e Langchain, configurando o ambiente, processando documentos, criando embeddings e integrando um retriever.
Ryan Ong's photo

Ryan Ong

12 min

tutorial

Como criar aplicativos LLM com o tutorial LangChain

Explore o potencial inexplorado dos modelos de linguagem grandes com o LangChain, uma estrutura Python de código aberto para criar aplicativos avançados de IA.
Moez Ali's photo

Moez Ali

12 min

tutorial

Tutorial de Python: Streamlit

Este tutorial sobre o Streamlit foi criado para ajudar cientistas de dados ou engenheiros de aprendizado de máquina que não são desenvolvedores da Web e não estão interessados em passar semanas aprendendo a usar essas estruturas para criar aplicativos da Web.
Nadia mhadhbi's photo

Nadia mhadhbi

18 min

tutorial

Ajuste fino do Llama 3.1 para classificação de textos

Comece a usar os novos modelos Llama e personalize o Llama-3.1-8B-It para prever vários distúrbios de saúde mental a partir do texto.
Abid Ali Awan's photo

Abid Ali Awan

13 min

tutorial

Primeiros passos com o Claude 3 e a API do Claude 3

Saiba mais sobre os modelos Claude 3, benchmarks de desempenho detalhados e como acessá-los. Além disso, descubra a nova API Python do Claude 3 para geração de texto, acesso a recursos de visão e streaming.
Abid Ali Awan's photo

Abid Ali Awan

tutorial

Llama.cpp Tutorial: Um guia completo para inferência e implementação eficientes de LLM

Este guia abrangente sobre o Llama.cpp guiará você pelos fundamentos da configuração do seu ambiente de desenvolvimento, compreendendo suas principais funcionalidades e aproveitando seus recursos para solucionar casos de uso no mundo real.
Zoumana Keita 's photo

Zoumana Keita

11 min

Ver maisVer mais