OpenAI CLIP ile Anlamsal Görüntü Araması Oluşturma#
Bu kılavuz, OpenAI CLIP ve Flask kullanarak bir anlamsal görüntü arama motoru oluşturma sürecinde sana yol gösterir. CLIP'in görsel-dil gömülerini NumPy destekli hızlı kosinüs benzerliği aramasıyla birleştirerek, etiket veya kategori gerektirmeden doğal dil sorgularından ilgili görüntüleri getiren bir web arayüzü oluşturabilirsin.
İzle: Benzerlik Araması Nasıl Çalışır | OpenAI CLIP ve Ultralytics Paketiyle Görsel Arama 🎉

Ultralytics Python paketi bu işlem hattının tamamını iki sınıfın arkasında bir araya getirir; böylece çalışan bir arama uygulamasını başlatabilir veya birkaç satır kodla programatik sorgular çalıştırabilirsin. Bu kılavuzda anlamsal aramanın neden kullanışlı olduğu, nasıl çalıştığı, web uygulamasının çalıştırılması, programatik arama ve parametrelerin yapılandırılması ele alınır.
Neden Anlamsal Görüntü Araması Kullanmalısın?#
CLIP ile kendi anlamsal görüntü arama sistemini oluşturmanın birçok önemli avantajı vardır:
- Sıfır örnekli yetenekler: Veri kümen üzerinde eğitim yapman gerekmez. CLIP'in sıfır örnekli öğrenme özelliği, serbest biçimli doğal dil kullanarak herhangi bir görüntü koleksiyonunu sorgulamana olanak tanır ve zamandan ve kaynaklardan tasarruf sağlar.
- İnsan benzeri anlama: Anahtar kelime aramasının aksine CLIP, anlamsal bağlamı anlar ve "doğada mutlu bir çocuk" veya "gece vakti fütüristik bir şehir silüeti" gibi soyut, duygusal ya da ilişkisel sorgulardan görüntüler getirir.
- Etiket veya meta veri gerekmez: Bu yaklaşım için yalnızca ham görüntüler gerekir. CLIP, herhangi bir manuel açıklama ekleme işlemi olmadan gömüler oluşturur.
- Hafif ve kesin arama: NumPy'de yapılan tek bir normalize matris çarpımı, her görüntüyü kosinüs benzerliğine göre sıralar. Böylece binlerce gömü üzerinde gerçek zamanlı yanıtla kesin sonuçlar elde edilir; kurulacak veya yönetilecek ek bir arama bağımlılığı gerekmez.
- Farklı alanlarda uygulamalar: İster kişisel bir fotoğraf arşivi, ister yaratıcı ilham aracı, ürün arama motoru ya da sanat öneri sistemi oluşturuyor ol, aynı teknoloji yığını çok az ayarlamayla ihtiyacına uyarlanabilir.
Anlamsal Görüntü Araması Nasıl Çalışır?#
İşlem hattı, görüntüleri ve metni sıralı sonuçlara dönüştürme sürecinin bir aşamasını yöneten üç bileşeni bir araya getirir:
- CLIP, görüntüler için bir görsel kodlayıcı (ör. ResNet veya ViT), dil içinse metin kodlayıcı (Transformer tabanlı) kullanarak her ikisini de aynı çok modlu gömme uzayına yansıtır. Böylece kosinüs benzerliğini kullanarak metinleri ve görüntüleri doğrudan karşılaştırabilirsin.
- NumPy, görüntü gömülerini tek bir dizide saklar ve bir matris çarpımıyla sorgu gömmesine göre sıralar; ek dizinleme bağımlılığı olmadan kosinüs benzerliğine göre en yakın vektörleri döndürür.
- Flask, doğal dil sorguları göndermek ve dizindeki anlamsal eşleşen görüntüleri göstermek için basit bir web arayüzü sunar.

Hem görüntüler hem de metin aynı vektör uzayına yerleştiğinden, getirme işlemi sıfır örnekli olarak gerçekleşir: Etiket veya kategoriye ihtiyacın yoktur; yalnızca görüntü verileri ve iyi bir istem yeterlidir.
Anlamsal Arama Web Uygulamasını Çalıştır#
SearchApp sınıfı, Flask arayüzünün tamamını başlatır. İlk çalıştırmada örnek bir görüntü kümesi indirir, gömme dizinini oluşturur ve sorgu yazıp sıralı sonuçları görüntüleyebileceğin bir sayfa sunar.
Görüntü Yolu Uyarısı
Kendi görüntülerini kullanıyorsan görüntü dizininin mutlak yolunu belirttiğinden emin ol. Aksi takdirde Flask'ın dosya sunma kısıtlamaları nedeniyle görüntüler web sayfasında görünmeyebilir.
from ultralytics import solutions
app = solutions.SearchApp(
data="images", # kendi görüntülerinle arama motorunu oluşturmak için bir yol belirt
device="cpu", # işlem için cihazı yapılandır; ör. "cpu" veya "cuda"
)
app.run(debug=False) # Test için `debug=True` bağımsız değişkenini de kullanabilirsinGörüntüleri Programatik Olarak Ara#
VisualAISearch sınıfı, web katmanı olmadan tüm arka uç işlemlerini gerçekleştirir:
- Yerel görüntülerden bir gömme dizini yükler veya oluşturur.
- CLIP kullanarak görüntü ve metin gömülerini çıkarır.
- Kosinüs benzerliğini kullanarak benzerlik araması yapar.
Benzerliğe göre sıralanmış eşleşen görüntü dosyası adlarının listesini almak için arama aracını doğal dil sorgusuyla çağır:
from ultralytics import solutions
searcher = solutions.VisualAISearch(
data="images", # kendi görüntülerinle arama motorunu oluşturmak için bir yol belirt
device="cpu", # işlem için cihazı yapılandır; ör. "cpu" veya "cuda"
)
results = searcher("a dog sitting on a bench")
# Sıralı Sonuçlar:
# - 000000546829.jpg | Benzerlik: 0.3269
# - 000000549220.jpg | Benzerlik: 0.2899
# - 000000517069.jpg | Benzerlik: 0.2761
# - 000000029393.jpg | Benzerlik: 0.2742
# - 000000534270.jpg | Benzerlik: 0.2680VisualAISearch Parametrelerini Yapılandır#
Aşağıdaki tabloda VisualAISearch için kullanılabilir parametreler özetlenmiştir:
| Bağımsız değişken | Tür | Varsayılan | Açıklama |
|---|---|---|---|
data | str | 'images' | Dizine eklenecek ve aranacak görüntü dizininin yolu. |
device | str | 'cpu' | CLIP çıkarımı için kullanılan cihaz (ör. cpu, cuda, 0). |
Yerel dosyaları yönetmeden üretim ölçeğinde görüntü koleksiyonlarında arama yapmak için, CLIP ile dizine eklemeden önce görüntülerini Ultralytics Platform üzerinde düzenleyebilir ve sürümleyebilirsin.
Sonuç#
CLIP ve Ultralytics Python paketiyle, ister Flask web uygulaması ister programatik arama arka ucu olarak, yalnızca birkaç satırda sıfır örnekli bir anlamsal görüntü arama motoru kurabilirsin. Buradan, dizine eklemek için data öğesini kendi görüntü dizinine yönlendir; ardından bilgisayarlı görü iş akışlarını geliştirmek için diğer Ultralytics Çözümlerini keşfet.
Sık Sorulan Sorular#
CLIP (Karşıtlayıcı Dil-Görüntü Ön Eğitimi), görsel ve dilsel bilgileri ilişkilendirmeyi öğrenen, OpenAI tarafından geliştirilmiş bir modeldir. Doğal dil açıklamalarıyla eşleştirilmiş büyük bir görüntü veri kümesi üzerinde eğitilir. Bu eğitim, görüntüleri ve metinleri ortak bir gömme uzayına eşlemesini sağlar; böylece vektör benzerliğini kullanarak bunları doğrudan karşılaştırabilirsin.
CLIP'i öne çıkaran özellik, genelleme yeteneğidir. Yalnızca belirli etiketler veya görevler için eğitilmek yerine doğal dilin kendisinden öğrenir. Bu sayede "jet ski kullanan bir adam" veya "gerçeküstü bir düş manzarası" gibi esnek sorguları işleyebilir ve yeniden eğitim gerektirmeden sınıflandırmadan yaratıcı anlamsal aramaya kadar pek çok alanda kullanılabilir.
CLIP, görüntülerini gömülere dönüştürdükten sonra Ultralytics paketi bunları L2 ile normalize eder ve tek bir NumPy dizisinde saklar. Sorgu, sorgu gömmesiyle her görüntü gömmesi arasındaki kosinüs benzerliğini hesaplayan tek bir matris çarpımıyla sıralanır; ardından puanlar sıralanır. Bu kaba kuvvet araması, çoğu görüntü koleksiyonu için kesin ve hızlıdır; kurulacak veya yönetilecek ek bir vektör veri tabanı bağımlılığı gerektirmez.
CLIP, OpenAI tarafından geliştirilmiş olsa da Ultralytics Python paketi, gömme oluşturma, dizinleme ve kosinüs benzerliği aramasını birkaç satırda çalışan eksiksiz bir anlamsal görüntü arama işlem hattında bir araya getirir:
from ultralytics import solutions searcher = solutions.VisualAISearch( data="images", # kendi görüntülerinle arama motorunu oluşturmak için bir yol belirt device="cpu", # işlem için cihazı yapılandır; ör. "cpu" veya "cuda" ) results = searcher("a dog sitting on a bench")Bu üst düzey uygulama şunları yönetir:
- CLIP tabanlı görüntü ve metin gömmesi oluşturma.
- Gömme dizini oluşturma ve yönetme.
- Kosinüs benzerliğiyle verimli anlamsal arama.
- Dizin tabanlı görüntü yükleme ve görselleştirme.
Evet. Mevcut kurulum, temel bir HTML ön yüzüne sahip Flask kullanıyor; ancak bunu kendi HTML'inle değiştirebilir veya React, Vue ya da başka bir ön yüz çerçevesiyle daha dinamik bir arayüz oluşturabilirsin. Flask, özel arayüzün için arka uç API'si olarak kullanılabilir.
Doğrudan mümkün değil. Basit bir çözüm olarak videolarından tek tek kareler çıkarabilir (ör. her saniyede bir kare), bunları bağımsız görüntüler olarak değerlendirebilir ve sisteme aktarabilirsin. Böylece arama motoru videolarındaki görsel anları anlamsal olarak dizine ekleyebilir.