Link to this sectionComo criar uma pesquisa semântica de imagens com OpenAI CLIP e Meta FAISS#
Este guia orienta você na criação de um motor de pesquisa semântica de imagens usando OpenAI CLIP, Meta FAISS e Flask. Ao combinar os embeddings de linguagem visual do CLIP com a pesquisa eficiente de vizinhos mais próximos do FAISS, você pode construir uma interface web que recupera imagens relevantes a partir de consultas em linguagem natural, sem a necessidade de etiquetas ou categorias.
Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP, META FAISS and 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 seu próprio sistema de pesquisa semântica de imagens com CLIP e FAISS oferece várias vantagens atraentes:
- 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 flexível e escalável: O FAISS oferece uma pesquisa de vizinhos mais próximos rápida, mesmo em grandes conjuntos de dados, com resposta em tempo real em milhares ou milhões de embeddings.
- 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.
- FAISS (Facebook AI Similarity Search) constrói um índice dos embeddings de imagem e permite a recuperação rápida e escalável dos vetores mais próximos de uma determinada consulta.
- 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 Flask completa. Na primeira execução, ela baixa um conjunto de imagens de amostra, constrói o índice FAISS e serve uma página onde você pode digitar uma consulta e visualizar 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 constrói um índice FAISS a partir de imagens locais.
- Extrai embeddings de imagem e texto usando 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 em escala de produção sem gerenciar arquivos locais, você pode organizar e versionar suas imagens na Plataforma Ultralytics antes de indexá-las com CLIP e FAISS.
Link to this sectionConclusão#
Com CLIP, FAISS e o pacote Python da Ultralytics, você pode criar um motor de pesquisa semântica de imagens zero-shot em apenas algumas linhas, seja como um aplicativo web Flask ou como um backend de pesquisa programático. A partir daqui, aponte data para o seu próprio diretório de imagens para indexá-lo e explore outras Soluções Ultralytics para construir sobre seus 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 sectionO que exatamente o FAISS faz neste projeto (Pesquisa Semântica)?#
FAISS (Facebook AI Similarity Search) é um kit de ferramentas que ajuda você a pesquisar através de vetores de alta dimensão de forma muito eficiente. Uma vez que o CLIP transforma suas imagens em embeddings, o FAISS torna rápido e fácil encontrar as correspondências mais próximas para uma consulta de texto, perfeito para recuperação de imagens em tempo real.
Link to this sectionWhy use the Ultralytics Python package if CLIP and FAISS are from OpenAI and Meta?#
Embora o CLIP e o FAISS sejam desenvolvidos pela OpenAI e Meta, respectivamente, o pacote Python da Ultralytics encapsula ambos em um pipeline completo de pesquisa semântica de imagens por trás de poucas 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 gerenciamento de índices FAISS.
- 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.