YOLO Vision 2026:

Como construir uma pesquisa semântica de imagens com OpenAI CLIP#

Este guia orienta-te na construção de um motor de pesquisa de imagens semântica utilizando OpenAI CLIP e Flask. Ao combinar os embeddings visuais-linguísticos do CLIP com uma pesquisa rápida de semelhança de cossenos alimentada pelo NumPy, podes criar uma interface web que obtém imagens relevantes a partir de consultas em linguagem natural, sem necessidade de rótulos ou categorias.



Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP and the Ultralytics Package 🎉

Visão geral da página web do Flask com resultados de pesquisa semântica

O pacote Python da Ultralytics encapsula todo este pipeline em duas classes, para que possas iniciar uma aplicação de pesquisa funcional ou executar consultas programaticamente em poucas linhas. Este guia aborda porque é que a pesquisa semântica é útil, como funciona, como executar a aplicação web, como pesquisar programaticamente e como configurar os parâmetros.

Por que usar a pesquisa semântica de imagens?#

Construir o teu próprio sistema de pesquisa semântica de imagens com CLIP oferece várias vantagens convincentes:

  • Capacidades zero-shot: Não precisas de treinar no teu conjunto de dados. A aprendizagem zero-shot do CLIP permite-te consultar qualquer coleção de imagens com linguagem natural livre, poupando tempo e recursos.
  • Compreensão semelhante à humana: Ao contrário da pesquisa por palavras-chave, o CLIP entende o contexto semântico e recupera imagens de consultas abstratas, emocionais ou relacionais, como "uma criança feliz na natureza" ou "um horizonte de cidade futurista à noite".
  • Sem etiquetas ou metadados: Esta abordagem requer apenas imagens brutas. O CLIP gera embeddings sem qualquer anotação manual.
  • Pesquisa leve e exata: Uma única multiplicação de matriz normalizada no NumPy classifica cada imagem por similaridade de cosseno, fornecendo resultados exatos com resposta em tempo real em milhares de embeddings e sem dependências de pesquisa adicionais para instalar ou gerir.
  • Aplicações de domínio cruzado: Se você está construindo um arquivo pessoal de fotos, uma ferramenta de inspiração criativa, um motor de busca de produtos ou um sistema de recomendação de arte, a mesma pilha se adapta com ajustes mínimos.

Como funciona a pesquisa semântica de imagens#

O pipeline combina três componentes, cada um gerenciando uma etapa de transformação de imagens e texto em resultados classificados:

  • CLIP utiliza um codificador de visão (por exemplo, ResNet ou ViT) para imagens e um codificador de texto (baseado em Transformer) para linguagem, projetando ambos no mesmo espaço de embedding multimodal. Isto permite a comparação direta entre texto e imagens utilizando a semelhança de cossenos.
  • O NumPy armazena os embeddings de imagem como uma única matriz e classifica-os em relação a um embedding de consulta com uma multiplicação de matriz, retornando os vetores mais próximos por similaridade de cosseno sem qualquer dependência de indexação adicional.
  • Flask fornece uma interface web simples para enviar consultas em linguagem natural e exibir imagens semanticamente correspondentes a partir do índice.

Fluxo de trabalho de recuperação de imagens do OpenAI Clip

Como tanto as imagens quanto o texto caem no mesmo espaço vetorial, a recuperação é zero-shot: você não precisa de etiquetas ou categorias, apenas de dados de imagem e um bom prompt.

Execute o aplicativo web de pesquisa semântica#

A classe SearchApp inicia a interface Flask completa. Na primeira execução, descarrega um conjunto de imagens de exemplo, constrói o índice de embeddings e disponibiliza uma página onde podes escrever uma consulta e ver os resultados ordenados.

Aviso sobre o caminho da imagem

Se você estiver usando suas próprias imagens, certifique-se de fornecer um caminho absoluto para o diretório de imagens. Caso contrário, as imagens podem não aparecer na página web devido às limitações de serviço de arquivos do Flask.

from ultralytics import solutions

app = solutions.SearchApp(
    data="images",  # replace with a path to build the search engine with your own images
    device="cpu",  # configure the device for processing, e.g., "cpu" or "cuda"
)

app.run(debug=False)  # You can also use `debug=True` argument for testing

Pesquise imagens programaticamente#

A classe VisualAISearch realiza todas as operações de backend sem a camada web:

  • Carrega ou cria um índice de embedding a partir de imagens locais.
  • Extrai embeddings de imagens e texto utilizando o CLIP.
  • Realiza pesquisa de similaridade usando similaridade de cosseno.

Chame o buscador com uma consulta em linguagem natural para obter de volta uma lista de nomes de arquivos de imagem correspondentes classificados por similaridade:

from ultralytics import solutions

searcher = solutions.VisualAISearch(
    data="images",  # replace with a path to build the search engine with your own images
    device="cpu",  # configure the device for processing, e.g., "cpu" or "cuda"
)

results = searcher("a dog sitting on a bench")

# Ranked Results:
#     - 000000546829.jpg | Similarity: 0.3269
#     - 000000549220.jpg | Similarity: 0.2899
#     - 000000517069.jpg | Similarity: 0.2761
#     - 000000029393.jpg | Similarity: 0.2742
#     - 000000534270.jpg | Similarity: 0.2680

Configure os parâmetros do VisualAISearch#

A tabela abaixo apresenta os parâmetros disponíveis para VisualAISearch:

ArgumentoTipoPredefiniçãoDescrição
datastr'images'Caminho para o diretório de imagens a ser indexado e pesquisado.
devicestr'cpu'Dispositivo usado para inferência CLIP (por exemplo, cpu, cuda, 0).
Gerencie seus dados na nuvem

Para pesquisar coleções de imagens à escala de produção sem gerir ficheiros locais, podes organizar e versionar as tuas imagens na Ultralytics Platform antes de as indexar com o CLIP.

Conclusão#

Com o CLIP e o pacote Python da Ultralytics, podes implementar um motor de pesquisa de imagens semântica zero-shot em poucas linhas, seja como uma aplicação web Flask ou como um backend de pesquisa programático. A partir daqui, aponta data para o teu próprio diretório de imagens para o indexar, e depois explora outras Ultralytics Solutions para construíres sobre os teus fluxos de trabalho de visão computacional.

FAQ#

  • CLIP (Contrastive Language Image Pretraining) é um modelo desenvolvido pela OpenAI que aprende a ligar informação visual e linguística. É treinado num conjunto massivo de dados de imagens emparelhadas com legendas em linguagem natural. Este treino permite-lhe mapear tanto imagens como texto para um espaço de embedding partilhado, para que os possas comparar diretamente usando semelhança de vetores.

  • O que torna o CLIP notável é sua capacidade de generalizar. Em vez de ser treinado apenas para etiquetas ou tarefas específicas, ele aprende com a própria linguagem natural. Isso permite que ele lide com consultas flexíveis como "um homem andando de jet ski" ou "uma paisagem surrealista", tornando-o útil para tudo, desde classificação até pesquisa semântica criativa, sem necessidade de retreinamento.

  • Assim que o CLIP transforma as tuas imagens em embeddings, o pacote Ultralytics normaliza-os em L2 e armazena-os num único array do NumPy. Uma consulta é ordenada com uma única multiplicação de matrizes que calcula a semelhança de cossenos entre o embedding da consulta e o embedding de cada imagem, ordenando depois as pontuações. Esta pesquisa por força bruta é exata e rápida para coleções típicas de imagens, sem dependências adicionais de bases de dados de vetores para instalar ou gerir.

  • Embora o CLIP seja desenvolvido pela OpenAI, o Ultralytics Python package encapsula a geração de embeddings, a indexação e a pesquisa por semelhança de cossenos num pipeline completo de pesquisa de imagens semântica através de poucas linhas de código que simplesmente funcionam:

    from ultralytics import solutions
    
    searcher = solutions.VisualAISearch(
        data="images",  # replace with a path to build the search engine with your own images
        device="cpu",  # configure the device for processing, e.g., "cpu" or "cuda"
    )
    
    results = searcher("a dog sitting on a bench")

    Esta implementação de alto nível gerencia:

    • Geração de embeddings de imagem e texto baseada em CLIP.
    • Criação e gestão de índice de embedding.
    • Pesquisa semântica eficiente com similaridade de cosseno.
    • Carregamento de imagens baseado em diretórios e visualização.
  • Sim. A configuração atual usa Flask com um frontend HTML básico, mas você pode substituí-lo pelo seu próprio HTML ou construir uma interface mais dinâmica com React, Vue ou outro framework de frontend. O Flask pode servir como a API de backend para sua interface personalizada.

  • Não diretamente. Uma solução simples é extrair quadros individuais de seus vídeos (por exemplo, um por segundo), tratá-los como imagens independentes e alimentá-los no sistema. Dessa forma, o motor de busca pode indexar semanticamente momentos visuais de seus vídeos.

Comentários