Ana içeriğe atla

BridgeTower ve Streamlit Kullanarak Yapay Zekâ Destekli Bir Görsel Arama Uygulaması Oluşturun

BridgeTower, Streamlit ve Hugging Face Transformers kullanarak yapay zekâ destekli bir görsel arama uygulamasının nasıl oluşturulacağını öğrenin. Multimodal yapay zekâ üzerine adım adım bir eğitim.
Güncel 3 Eki 2026  · 7 dk. oku

Yapay Zeka ile Keşfedin

ChatGPTClaudePerplexity

Bir Gen AI Mühendisi olarak, sürekli okuyup yeni gelişmeleri keşfederek en güncel araç ve teknolojilerden haberdar olmayı öncelik hâline getiriyorum. Yakın zamanda Microsoft araştırmacılarının tanıttığı, BridgeTower adlı bir modelin görme ve dil yeteneklerinin entegrasyonunu basitleştirerek multimodal görevlerin uygulanmasını çok daha kolay hâle getirdiğini anlatan bir araştırma makalesine rastladım.

Bu rehberde, Hugging Face Transformers kütüphanesindeki BridgeTower'ı kullanarak basit ama güçlü bir görsel-metin getirme sistemi nasıl kuracağınızı göstereceğim. Bu eğitim başlangıç seviyesine uygundur ve sizi şu adımlardan geçirecek:

  • Gerekli kütüphanelerin kurulumu.
  • BridgeTower ile görsellerin ve metinlerin işlenmesi.
  • Hem görseller hem de metinler için gömme (embedding) oluşturma.
  • Bu gömmelerin kosinüs benzerliği ile karşılaştırılması.

Eğitimin sonunda, görselleri metin sorgularıyla etkili bir şekilde eşleştirebilen, multimodal yapay zekânın gücünü ve sadeliğini gösteren, tamamen işlevsel bir sisteme sahip olacaksınız.

BridgeTower Nedir?

BridgeTower modeli, Xiao Xu ve diğerlerinin kaleme aldığı BridgeTower: Building Bridges Between Encoders in Vision-Language Representative Learning başlıklı makalede açıklandığı üzere, görme ve dil modellerinin birlikte nasıl çalıştığını iyileştirmeyi amaçlar.

Modelin hem bir görseli hem de bir metin açıklamasını, örneğin "parkta koşan bir köpek" ifadesini anlaması gereken bir görevi hayal edin. 

Genellikle model, görseli ve metni sırasıyla görme ve dil kodlayıcılarıyla ayrı ayrı işler. BridgeTower modeli, bu kodlayıcılar ile çapraz-modal kodlayıcı (görme ve dili birleştiren) arasında bir "köprü" ekleyerek her adımda daha iyi etkileşim kurmalarını sağlar.BridgeTower

Kaynak

Örneğin, köpeğin görseli işlenirken görme kodlayıcı köpeğin şeklini ve hareketini algılayabilir. Bu sırada dil kodlayıcı "koşan" ve "köpek" kelimelerini anlar. 

Köprü, bu iki bilgi parçasının ayrıntılı şekilde etkileşime girmesine olanak tanır ve modelin görsel ve metinsel ipuçlarını daha etkili biçimde ilişkilendirmesine yardımcı olur. Böylece model, fazladan hesaplama gerektirmeden veya yavaşlamadan görsel altyazılama ya da soru yanıtlama gibi görevlerde daha iyi performans gösterir.

Uygulama Klasör Yapısı

Her şeyi temiz ve düzenli tutacağız. Proje dizininiz şu şekilde görünmelidir:

/image-search-app/
│
├── app.py          # Frontend (Streamlit UI)
├── search.py       # Backend logic (embeddings & similarity search)
├── images/         # Directory for uploaded images
│   ├── image1.jpg
│   ├── image2.png
│   ├── image3.jpeg
│
└── requirements.txt  # Python dependencies
  • app.py: Ön yüz ve kullanıcı etkileşimlerini yönetir.
  • search.py: Gömme oluşturma ve arama gerçekleştirme mantığını içerir.
  • images/: Yüklenen görsel dosyalarını saklar.
  • requirements.txt: Gerekli kütüphaneleri listeler.

Kurulum ve Yükleme

Koda dalmadan önce, sorunsuz bir geliştirme ve test süreci için ortamı hazırlayalım. Şu adımları izleyin:

1. Bağımlılıkları yükleyin

Öncelikle Python kurulu olduğundan emin olun (3.7 veya üzeri sürüm önerilir). Ardından, gerekli kütüphaneleri yüklemek için terminalinizde şu komutu çalıştırın:

pip install torch transformers streamlit Pillow
  • torch: Bridgetower modelini oluşturmak ve çalıştırmak için kullanılan derin öğrenme çatısı.
  • transformers: Bridgetower gibi önceden eğitilmiş modelleri sağlayarak verimli metin ve görsel işleme sunar.
  • streamlit: Uygulama için etkileşimli bir kullanıcı arayüzü oluşturmak üzere hafif bir web çatısı.
  • Pillow: Görsel yüklemeleri ve yeniden boyutlandırmayı yönetmek için kullanılan bir görsel işleme kütüphanesi.

2. Örnek görselleri hazırlayın

Uygulamayı test etmek için bazı örnek görselleri /images dizinine yerleştirin. Bu görsellerin JPG, PNG veya JPEG gibi desteklenen formatlarda olduğundan emin olun; bu formatlar yaygın olarak tanınır ve çoğu kütüphane ile uyumludur. 

Modelin metin sorgusuna göre eşleşmeleri doğru şekilde getirebildiğinden emin olmak için çeşitli görseller kullanın.

BridgeTower Temel Mantığı Açıklaması

Uygulamanın temel işlevselliği iki ana bileşene ayrılır: Arka uç (search.py) ve Ön uç (app.py). Her bileşen, uygulamanın sorunsuz çalışmasını sağlamak için kritik bir rol oynar.

Arka uç mantığı (search.py)

Bu dosya, metin ve görsel gömmeleri ile arama mekanizmasının mantığını içerir.

1. Kütüphaneleri içe aktarın

from transformers import BridgeTowerProcessor, BridgeTowerForImageAndTextRetrieval
from PIL import Image
import torch.nn.functional as F
import os
  • BridgeTowerProcessor: Verileri (görseller ve metin) BridgeTower modeli için doğru biçimde hazırlayan bir yardımcı sınıf. Metin için tokenleştirme ve görseller için ön işleme gibi görevleri yerine getirir.
  • BridgeTowerForImageAndTextRetrieval: Özellikle görsel-metin getirme görevleri için tasarlanmış, önceden eğitilmiş bir BridgeTower model sınıfı; bir metin sorgusuna göre en ilgili görseli (veya tersini) aramak için kullanılır.
  • PIL (Python Imaging Library) görsel işlemede kullanılır. Bu bağlamda, görselleri (ör. yeniden boyutlandırma, kırpma) modele vermeden önce açmak ve düzenlemek için kullanılır.
  • torch.nn.functional, etkinleştirme (ReLU, softmax), kayıp (çapraz entropi vb.) ve tensörler üzerinde diğer işlemler gibi çeşitli işlevler sağlar. PyTorch ile sinir ağları üzerinde çalışırken sıklıkla kullanılır.
  • os işletim sistemiyle etkileşim için kullanılır. Dosya okumak, dizinleri kontrol etmek ve yolları yönetmek (ör. görsellerin veya model ağırlıklarının konumunu bulmak) gibi işlemlerde yardımcı olur.

2. Modeli ve işlemciyi yükleyin

processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")
model = BridgeTowerForImageAndTextRetrieval.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
model.to(device)

Bu, gömmeler için gerekli model ve işlemciyi başlatır.

3. En iyi eşleşmeyi bulun

def image_search(query, image_dir):
   image_files = [os.path.join(image_dir, img) for img in os.listdir(image_dir) if img.lower().endswith(('jpg', 'jpeg', 'png'))]
   scores = {}

   for img_path in image_files:
       image = Image.open(img_path).convert("RGB")
       encoding = processor(text=query, images=image, return_tensors="pt").to(device)
       outputs = model(**encoding)
       scores[img_path] = outputs.logits[0, 1].item()

   best_match = max(scores, key=scores.get)
   return best_match

Nasıl çalışır:

  1. image_search işlevi, modeli kullanarak metin sorgusunun gömmesini oluşturur.
  2. Her görsel işlenerek kendi gömmeleri üretilir.
  3. Gömmeler, modelin çıktı logits'leri kullanılarak karşılaştırılır.
  4. Kosinüs benzerliği metin ve görsel gömmeleri arasında hesaplanır.
  5. En yüksek benzerlik skoruna sahip görsel en iyi eşleşme olarak belirlenir ve döndürülür.

Ön yüz arayüzü (app.py)

Bu dosya, kullanıcı dostu bir arayüz sağlamak için Streamlit kullanır.

1. Kütüphaneleri içe aktarın

import streamlit as st
from search import search_best_match
import os

2. Arayüzü oluşturun

st.title("🖼️ AI-Powered Image Search App")
uploaded_files = st.file_uploader("Upload images", accept_multiple_files=True, type=['jpg', 'jpeg', 'png'])

image_folder = 'images'
os.makedirs(image_folder, exist_ok=True)

if uploaded_files: 
    for uploaded_file in uploaded_files:
        with open(os.path.join(image_folder, uploaded_file.name), 'wb') as f:
            f.write(uploaded_file.getbuffer())
        st.image(uploaded_file, caption="Uploaded Image", use_column_width=True)

Kullanıcılar birden fazla görsel yükleyebilir. Görseller images/ klasörüne kaydedilir ve görüntülenir.

3. Arama sorgusu ekleyin

query = st.text_input("Enter your search query:")

if query and uploaded_files:
    best_match, score = search_best_match(image_folder, query)
    st.write("### Most Relevant Image:")
    st.image(best_match, caption=f"Score: {score:.4f}", use_column_width=True)

Kullanıcılar bir arama sorgusu girer. Uygulama en iyi eşleşen görseli arar ve gösterir.

Tam Uygulama: BridgeTower ve Streamlit ile Görsel Arama Uygulaması Oluşturma

1. search.py - Arka Uç Mantığı

from transformers import BridgeTowerProcessor, BridgeTowerForImageAndTextRetrieval
from PIL import Image
import torch
import torch.nn.functional as F
import os

# Load Bridgetower processor and model
processor = BridgeTowerProcessor.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")
model = BridgeTowerForImageAndTextRetrieval.from_pretrained("BridgeTower/bridgetower-base-itm-mlm")

# Search for the best matching image
def image_search(query, image_dir):
   image_files = [os.path.join(image_dir, img) for img in os.listdir(image_dir) if img.lower().endswith(('jpg', 'jpeg', 'png'))]
   scores = {}

   for img_path in image_files:
       image = Image.open(img_path).convert("RGB")
       encoding = processor(text=query, images=image, return_tensors="pt").to(device)
       outputs = model(**encoding)
       scores[img_path] = outputs.logits[0, 1].item()

   best_match = max(scores, key=scores.get)
   return best_match

2. app.py - Streamlit Arayüzü

import streamlit as st
from search import image_search
import os

# Title of the app
st.title("🖼️ Image Search Application with BridgeTower")

# Image upload section
uploaded_files = st.file_uploader("Upload your images", accept_multiple_files=True, type=['jpg', 'jpeg', 'png'])

# Create image folder if not exists
image_folder = 'images'
os.makedirs(image_folder, exist_ok=True)

if uploaded_files:
    for uploaded_file in uploaded_files:
        with open(os.path.join(image_folder, uploaded_file.name), 'wb') as f:
            f.write(uploaded_file.getbuffer())
        st.image(uploaded_file, caption="Uploaded Image", use_column_width=True)

# Text input for query
query = st.text_input("Enter your search query:")

# Display search results
if query and uploaded_files:
    best_match, score = image_search(image_folder, query)
    st.write("### Most Relevant Image:")
    st.image(best_match, caption=f"Similarity Score: {score:.4f}", use_column_width=True)

3. Uygulamayı çalıştırın

streamlit run app.py

BridgeTower ve Streamlit Uygulama Örneği

İşte uygulamanın çalışırken bir örneği! Bir görsel yüklendi ve kullanıcı “cat” arama sorgusunu yazdı. Uygulama görseli ve metni hızla analiz edip BridgeTower modelini kullanarak eşleştirdi. 

En iyi eşleşmeyi buldu ve doğru kedi görselini gösterdi. Bu, uygulamanın doğru sonuçlar vermek için görseller ve metin arasında nasıl iyi bir bağlantı kurduğunu ortaya koyuyor.

Merak burada bitmemeli. Bu tür uygulamaların potansiyeli, şu an uygulananın çok ötesine uzanarak büyüme ve yenilik için heyecan verici fırsatlar açıyor. Kullanıcı deneyimini, performansı ve işlevselliği geliştirmek için imkânlar geniş. Aşağıda, bu tür uygulamaları bir üst seviyeye taşıyabilecek bazı iyileştirmeler öneriyorum.Arama sorgusu cat olan Görsel Arama Uygulaması

Gelecekteki BridgeTower İyileştirmeleri

Oluşturduğumuz uygulamayı çeşitli şekillerde geliştirebilirsiniz, örneğin: 

Daha hızlı görsel aramaları için FAISS indekslemesi ekleyin

Büyük veri kümelerinde görsel aramaların hızını artırmak için FAISS indekslemeyi uygulayın. Bu sayede görselleri özellik vektörlerine dönüştürüp bir indeks oluşturabilir ve benzerlik aramalarını hızlıca gerçekleştirebilirsiniz; böylece veri kümesi büyüse bile getirme verimli kalır.

Uygulamayı Streamlit Cloud veya AWS üzerinde dağıtın

Özellikle Python ve Streamlit ile çalışıyorsanız hızlı ve kolay bir kurulum için uygulamayı Streamlit Cloud üzerinde dağıtın. Alternatif olarak, daha fazla kontrol, ölçeklenebilirlik ve daha yüksek trafiği karşılama olanağı için AWS üzerinde dağıtarak uygulama büyürken daha iyi performans sağlayın.

Görsel yüklemeleri için gerçek zamanlı güncellemeler uygulayın

Yeni görseller yüklendiğinde sayfayı yenilemeye gerek kalmadan tüm kullanıcılarda anında görünmeleri için gerçek zamanlı güncellemeler kurun. WebSockets veya Socket.IO gibi teknolojileri kullanarak bir görsel yüklenir yüklenmez bağlı tüm kullanıcılara güncellemeleri itebilir, böylece uygulamanın etkileşimini ve deneyimini iyileştirebilirsiniz.

Sonuç

BridgeTower, Streamlit ve PyTorch kullanarak yapay zekâ destekli bir görsel arama uygulamasını başarıyla oluşturduk; bu da yapay zekânın dijital içeriklerle etkileşimi nasıl basitleştirip geliştirebileceğini gösteriyor. 

Tam işlevsel olmakla birlikte, FAISS indeksleme ile arama hızını optimize etmek, ölçeklenebilirlik için AWS gibi platformlarda dağıtım yapmak ve daha akıcı bir kullanıcı deneyimi için gerçek zamanlı güncellemeler eklemek gibi geliştirmelere açık. Bu proje, akıllı arama sistemlerinde daha fazla yenilik için sağlam bir temel sunuyor.

Daha fazlasını öğrenmek isterseniz şu kaynakları önerebilirim: 


Bhavishya Pandit's photo
Author
Bhavishya Pandit
LinkedIn
Twitter

GenAI ve veri bilimi üzerine bilgi paylaşarak 20 milyon görüntüleme elde etmiş Kıdemli GenAI Mühendisi ve İçerik Üreticisi.

Konular
Yapay Zeka

Öne Çıkan DataCamp Kursları

Program

Yapay Zeka Uygulamaları Geliştirme

21 sa
OpenAI API, Hugging Face ve LangChain dahil olmak üzere en yeni yapay zeka geliştirici araçlarıyla yapay zeka destekli uygulamalar oluşturmayı öğrenin.
Ayrıntıları GörüntüleRight Arrow
Kursa Başla
Devamını GörRight Arrow
İlgili

blog

Hızlı Sevkiyat İçin Pratik Vibe Kodlama Teknoloji Yığını

Ön uç, arka uç, veritabanları, kimlik doğrulama, depolama, e-posta, test, dağıtım ve izleme için en iyi araçları keşfedin.
Abid Ali Awan's photo

Abid Ali Awan

14 dk.

blog

2026’da En Popüler 40 Yazılım Mühendisi Mülakat Sorusu

Algoritmalar, sistem tasarımı ve davranışsal senaryoları kapsayan bu temel sorularla teknik mülakat sürecine hakim olun. Uzman cevapları, kod örnekleri ve kanıtlanmış hazırlık stratejileri edinin.
Dario Radečić's photo

Dario Radečić

15 dk.

Eğitim

Python'da Listeyi String'e Nasıl Dönüştürürsünüz

Bu hızlı eğitimde, Python'da bir listeyi string'e nasıl dönüştüreceğinizi öğrenin.
Adel Nehme's photo

Adel Nehme

Eğitim

.gitignore Nasıl Kullanılır: Örneklerle Pratik Bir Giriş

Git deponuzu temiz tutmak için .gitignore’u nasıl kullanacağınızı öğrenin. Bu eğitim; temelleri, yaygın kullanım durumlarını ve başlamanıza yardımcı olacak pratik örnekleri kapsar!
Kurtis Pykes 's photo

Kurtis Pykes

8 dk.

Devamını GörDevamını Gör