Link to this sectionComo construir uma pesquisa semântica de imagens com OpenAI CLIP#
Este guia orienta-te na construção de um motor de pesquisa semântica de imagens usando o OpenAI CLIP e o Flask. Ao combinar os embeddings de linguagem visual do CLIP com uma pesquisa rápida de similaridade de cosseno alimentada pelo NumPy, podes criar uma interface web que recupera imagens relevantes a partir de consultas em linguagem natural, sem necessidade de etiquetas ou categorias.
Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP and the Ultralytics Package 🎉

O pacote Python da Ultralytics encapsula todo esse pipeline por trás de duas classes, para que você possa iniciar uma aplicação de pesquisa funcional ou realizar consultas programaticamente em poucas linhas. Este guia aborda por que a pesquisa semântica é útil, como ela funciona, como executar o aplicativo web, como pesquisar programaticamente e como configurar parâmetros.
Link to this sectionPor 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: Você não precisa treinar em seu conjunto de dados. O aprendizado zero-shot do CLIP permite que você consulte qualquer coleção de imagens com linguagem natural de forma livre, economizando 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.
Link to this sectionComo 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 usa um codificador de visão (por exemplo, ResNet ou ViT) para imagens e um codificador de texto (baseado em Transformer) para linguagem, para projetar ambos no mesmo espaço de embedding multimodal. Isso permite a comparação direta entre texto e imagens usando similaridade de cosseno.
- 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.

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.
Link to this sectionExecute o aplicativo web de pesquisa semântica#
A classe SearchApp inicia a interface completa do Flask. Na primeira execução, esta descarrega um conjunto de imagens de amostra, cria o índice de embedding e disponibiliza uma página onde podes digitar uma consulta e ver os resultados classificados.
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 = "path/to/img/directory" # Optional, build 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 testingLink to this sectionPesquise 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 usando 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 = "path/to/img/directory" # Optional, build 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.2680Link to this sectionConfigure os parâmetros do VisualAISearch#
A tabela abaixo descreve os parâmetros disponíveis para VisualAISearch:
| Argumento | Tipo | Predefinição | Descrição |
|---|---|---|---|
data | str | 'images' | Caminho para o diretório de imagens usado para pesquisa de similaridade. |
| Argumento | Tipo | Predefinição | Descrição |
|---|---|---|---|
device | str | None | Especifica o dispositivo para inferência (p. ex., cpu, cuda:0 ou 0). Permite aos utilizadores selecionar entre CPU, uma GPU específica ou outros dispositivos de computação para a execução do modelo. |
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 indexares com CLIP.
Link to this sectionConclusão#
Com o CLIP e o pacote Python da Ultralytics, podes configurar um motor de pesquisa semântica de imagens zero-shot em apenas algumas 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 construir sobre os teus fluxos de trabalho de visão computacional.
Link to this sectionFAQ#
Link to this sectionComo o CLIP entende tanto imagens quanto texto?#
CLIP (Contrastive Language Image Pretraining) é um modelo desenvolvido pela OpenAI que aprende a conectar informações visuais e linguísticas. Ele é treinado em um enorme conjunto de dados de imagens emparelhadas com legendas em linguagem natural. Esse treinamento permite que ele mapeie tanto imagens quanto texto em um espaço de embedding compartilhado, para que você possa compará-los diretamente usando similaridade vetorial.
Link to this sectionPor que o CLIP é considerado tão poderoso para tarefas de IA?#
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.
Link to this sectionComo as imagens são classificadas em relação a uma consulta de texto?#
Uma vez que o CLIP transforma as tuas imagens em embeddings, o pacote Ultralytics aplica a normalização L2 e armazena-os num único array NumPy. Uma consulta é classificada com uma multiplicação de matriz que calcula a similaridade de cosseno entre o embedding da consulta e cada embedding de imagem, ordenando depois as pontuações. Esta pesquisa de força bruta é exata e rápida para coleções de imagens típicas, sem dependência de base de dados vetorial adicional para instalar ou gerir.
Link to this sectionPor que usar o Ultralytics pacote Python se o CLIP é da OpenAI?#
Embora o CLIP seja desenvolvido pela OpenAI, o pacote Python da Ultralytics encapsula a geração de embeddings, a indexação e a pesquisa de similaridade de cosseno num pipeline completo de pesquisa semântica de imagens por trás de algumas linhas de código que simplesmente funcionam:
from ultralytics import solutions
searcher = solutions.VisualAISearch(
# data = "path/to/img/directory" # Optional, build 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ório e visualização.
Link to this sectionPosso personalizar o frontend deste aplicativo?#
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.
Link to this sectionÉ possível pesquisar através de vídeos em vez de imagens estáticas?#
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.