Link to this sectionOpenAI CLIP ile Anlamsal Görsel Arama Nasıl Oluşturulur#
This guide walks you through building a semantic image search engine using OpenAI CLIP and Flask. By combining CLIP's visual-language embeddings with fast cosine similarity search powered by NumPy, you can build a web interface that retrieves relevant images from natural language queries, no labels or categories required.
Watch: How Similarity Search Works | Visual Search Using OpenAI CLIP and the Ultralytics Package 🎉

Ultralytics Python paketi, bu işlem hattının tamamını iki sınıf ile sarmalar; böylece birkaç satır kodla çalışan bir arama uygulaması başlatabilir veya programatik olarak sorgular çalıştırabilirsin. Bu rehber; anlamsal aramanın neden faydalı olduğu, nasıl çalıştığı, web uygulamasının çalıştırılması, programatik olarak arama yapma ve parametrelerin yapılandırılması konularını kapsamaktadır.
Link to this sectionAnlamsal Görsel Arama Neden Kullanılır?#
CLIP ile kendi anlamsal görsel arama sistemini kurmanın birçok avantajı vardır:
- Zero-shot yetenekleri: Veri setini eğitmen gerekmez. CLIP'in zero-shot öğrenme özelliği, herhangi bir görsel koleksiyonunu serbest biçimli doğal dille sorgulamanı sağlayarak zamandan ve kaynaklardan tasarruf etmene yardımcı olur.
- İnsan benzeri anlama: Anahtar kelime aramasının aksine, CLIP anlamsal bağlamı anlar ve "doğada mutlu bir çocuk" veya "gece fütüristik bir şehir silüeti" gibi soyut, duygusal veya ilişkisel sorgulardan görseller getirebilir.
- Etiket veya meta veri gerekmez: Bu yaklaşım yalnızca ham görsellere ihtiyaç duyar. CLIP, herhangi bir manuel açıklama gerektirmeden embedding'ler üretir.
- Hafif ve kesin arama: NumPy içindeki tek bir normalleştirilmiş matris çarpımı, her görseli cosine similarity değerine göre sıralar; binlerce embedding üzerinde gerçek zamanlı yanıt verir ve yönetilecek ekstra bir arama bağımlılığı gerektirmez.
- Çapraz alan uygulamaları: Kişisel bir fotoğraf arşivi, yaratıcı bir ilham aracı, ürün arama motoru veya sanat öneri sistemi geliştiriyor olsan da, aynı teknoloji yığını minimum değişiklikle uyum sağlar.
Link to this sectionAnlamsal Görsel Arama Nasıl Çalışır?#
İşlem hattı, görselleri ve metni sıralanmış sonuçlara dönüştürmenin her aşamasını yöneten üç bileşeni birleştirir:
- CLIP, görseller için bir görme kodlayıcı (ör. ResNet veya ViT) ve dil için bir metin kodlayıcı (Transformer tabanlı) kullanarak her ikisini de aynı çok modlu embedding uzayına yansıtır. Bu, kosinüs benzerliği kullanarak metin ve görseller arasında doğrudan karşılaştırma yapılmasına olanak tanır.
- NumPy, görsel embeddinglerini tek bir dizi olarak saklar ve bunları bir sorgu embedding'i ile tek bir matris çarpımıyla karşılaştırarak, ekstra bir indeksleme bağımlılığı olmadan cosine similarity açısından en yakın vektörleri döndürür.
- Flask, doğal dilde sorgular göndermek ve dizinden anlamsal olarak eşleşen görselleri görüntülemek için basit bir web arayüzü sunar.

Hem görseller hem de metin aynı vektör uzayında yer aldığından, arama zero-shot'tır: etiketlere veya kategorilere ihtiyacın yoktur, sadece görsel verisine ve iyi bir isteme (prompt) sahip olman yeterlidir.
Link to this sectionAnlamsal Arama Web Uygulamasını Çalıştır#
SearchApp sınıfı, tam teşekküllü Flask arayüzünü başlatır. İlk çalıştırıldığında örnek bir görsel seti indirir, embedding indeksini oluşturur ve sorgu yazıp sıralanmış sonuçları görebileceğin bir sayfa sunar.
Görsel Yolu Uyarısı
Kendi görsellerini kullanıyorsan, görsel dizinine mutlaka mutlak bir yol sağladığından emin ol. Aksi takdirde, Flask'ın dosya sunma sınırlamaları nedeniyle görseller web sayfasında görünmeyebilir.
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 sectionProgramatik Olarak Görsel Ara#
VisualAISearch sınıfı, tüm arka uç işlemlerini web katmanı olmadan gerçekleştirir:
- Yerel görsellerden bir embedding indeksi yükler veya oluşturur.
- CLIP kullanarak görsel ve metin embedding modellerini çıkarır.
- Kosinüs benzerliğini kullanarak benzerlik araması yapar.
Arayıcıyı doğal dilde bir sorguyla çağırarak, benzerliğe göre sıralanmış eşleşen görsel dosya isimlerinin bir listesini alabilirsin:
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 sectionVisualAISearch Parametrelerini Yapılandır#
Aşağıdaki tablo, VisualAISearch için mevcut parametreleri özetlemektedir:
| Argüman | Tip | Varsayılan | Açıklama |
|---|---|---|---|
data | str | 'images' | Benzerlik araması için kullanılan görüntü dizinine giden yol. |
| Argüman | Tip | Varsayılan | Açıklama |
|---|---|---|---|
device | str | None | Çıkarım için cihazı belirtir (örn. cpu, cuda:0 veya 0). Kullanıcıların model yürütme için CPU, belirli bir GPU veya diğer işlem cihazları arasında seçim yapmasına olanak tanır. |
Görsel koleksiyonlarını yerel dosyaları yönetmek zorunda kalmadan üretim ölçeğinde aramak için, onları CLIP ile indekslemeden önce Ultralytics Platform üzerinde düzenleyebilir ve sürümleyebilirsin.
Link to this sectionSonuç#
CLIP ve Ultralytics Python paketi ile birkaç satır kodda sıfırdan anlamsal bir görsel arama motorunu Flask web uygulaması veya programatik arama arka ucu olarak ayağa kaldırabilirsin. Buradan itibaren data dizinini kendi görsel klasörüne yönlendirerek indeksleme yapabilir ve ardından bilgisayarlı görü iş akışlarını geliştirmek için diğer Ultralytics Solutions seçeneklerini keşfedebilirsin.
Link to this sectionSSS#
Link to this sectionCLIP hem görselleri hem de metni nasıl anlıyor?#
CLIP (Contrastive Language Image Pretraining), OpenAI tarafından geliştirilen ve görsel ile dilsel bilgileri birbirine bağlamayı öğrenen bir modeldir. Doğal dildeki açıklamalarla eşleştirilmiş devasa bir görsel veri seti üzerinde eğitilmiştir. Bu eğitim, hem görselleri hem de metni paylaşılan bir embedding uzayına eşlemesini sağlar, böylece bunları vektör benzerliği kullanarak doğrudan karşılaştırabilirsin.
Link to this sectionCLIP neden yapay zeka görevleri için bu kadar güçlü kabul ediliyor?#
CLIP'i öne çıkaran şey genelleme yeteneğidir. Sadece belirli etiketler veya görevler için eğitilmek yerine, doğal dilin kendisinden öğrenir. Bu, "jet ski süren bir adam" veya "sürreal bir rüya manzarası" gibi esnek sorguları işlemesine olanak tanır ve yeniden eğitim gerektirmeden sınıflandırmadan yaratıcı anlamsal aramaya kadar her şey için kullanışlı olmasını sağlar.
Link to this sectionGörseller bir metin sorgusuna göre nasıl sıralanır?#
CLIP görsellerini embedding'e dönüştürdükten sonra, Ultralytics paketi bunları L2-normalleştirir ve tek bir NumPy dizisinde saklar. Bir sorgu, sorgu embedding'i ile her bir görsel embedding'i arasındaki cosine similarity değerini hesaplayan ve ardından skorları sıralayan tek bir matris çarpımıyla değerlendirilir. Bu kaba kuvvet araması, tipik görsel koleksiyonları için kesin ve hızlıdır; kurulması veya yönetilmesi gereken ekstra bir vektör veritabanı bağımlılığı yoktur.
Link to this sectionCLIP, OpenAI'a aitse neden Ultralytics Python paketi kullanmalısın?#
CLIP her ne kadar OpenAI tarafından geliştirilmiş olsa da, Ultralytics Python paketi embedding oluşturma, indeksleme ve cosine similarity aramasını, sadece birkaç satır kodla çalışan eksiksiz bir anlamsal görsel arama hattında birleştirir:
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")Bu üst düzey uygulama şunları yönetir:
- CLIP tabanlı görsel ve metin embedding üretimi.
- Embedding indeksi oluşturma ve yönetimi.
- Kosinüs benzerliği ile verimli anlamsal arama.
- Dizin tabanlı görsel yükleme ve görselleştirme.
Link to this sectionBu uygulamanın ön yüzünü özelleştirebilir miyim?#
Evet. Mevcut kurulum basit bir HTML ön yüzüyle Flask kullanır, ancak bunu kendi HTML'inle değiştirebilir veya React, Vue ya da başka bir ön yüz çerçevesiyle daha dinamik bir kullanıcı arayüzü oluşturabilirsin. Flask, özel arayüzün için arka uç API'si olarak görev yapabilir.
Link to this sectionSabit görseller yerine videolar üzerinde arama yapmak mümkün mü?#
Doğrudan değil. Basit bir geçici çözüm, videolarından tek tek kareleri çıkarmak (ör. saniyede bir kare), bunları bağımsız görseller olarak ele almak ve bunları sisteme beslemektir. Bu sayede arama motoru, videolarındaki görsel anları anlamsal olarak dizine ekleyebilir.