YOLO ile Görüntü Tanıma: Python’da Başlangıç Rehberi

YOLO Nedir?

YOLO, “You Only Look Once” ifadesinin kısaltmasıdır. Gerçek zamanlı nesne tanıma alanında devrim yaratan bu yöntem, saatler süren görüntü işleme süreçlerini saniyeler içinde gerçekleştirebilir. YOLO, nesneleri tanımak için bir görüntüdeki tüm alanı tek bir ağdan geçirir. Bu, onu diğer nesne tanıma algoritmalarına nazaran son derece hızlı kılar. YOLO’nun temel prensibi, görüntüleri ızgara benzeri bir yapıya bölmek ve her bölümde bulunan nesneleri tahmin etmektir.

Bu teknoloji, özellikle video akışları üzerinde gerçek zamanlı uygulamalarda oldukça etkilidir. Güvenlik sistemleri, otonom araçlar ve akıllı şehir çözümleri gibi birçok farklı alanda kullanılabilir. Yoğun veri ortamlarında bile çalışabilme yeteneği ile YOLO, bilgisayarlara nesneleri hemen tanıma ve ağaçlandırma yetisi kazandırır. Bu yazıda, Python kullanarak YOLO nasıl uygulanır, adım adım inceleyeceğiz.

YOLO’nun en önemli avantajı, karmaşık görüntü tanıma görevlerini hızlı bir şekilde çözebilmesidir. Bu nedenle geliştiriciler ve araştırmacılar arasında popülerlik kazanmıştır. Ayrıca açık kaynak kodlu olması, topluluk desteğiyle birlikte eklenmiş birçok geliştirme ve iyileştirmeler sunmaktadır. Bu da kullanıcıların kendi gereksinimlerine göre YOLO modelini özelleştirmelerine olanak tanır.

Kurulum Adımları

Python ile YOLO çalışabilmek için öncelikle gerekli kütüphaneleri yüklememiz gerekiyor. TensorFlow veya PyTorch gibi derin öğrenme kütüphanelerini kullanarak YOLO modelini eğitebiliriz. İkincisi daha yaygın bir tercih olmakla birlikte, bu yazıda TensorFlow tabanlı bir örnek üzerinde çalışacağız.

Öncelikle, TensorFlow ve diğer gerekli kütüphanelerimizi yükleyelim. Terminal veya komut istemcisinde aşağıdaki komutu çalıştırarak yükleme işlemini gerçekleştirebilirsiniz:

pip install tensorflow opencv-python numpy

Bu komut, TensorFlow çekirdek kütüphanesini, görüntü işleme için OpenCV’yi ve dizilerle çalışmak için NumPy’yi yükleyecektir. Ayrıca, gereken YOLO ağı ile ilgili dosyaları da bilgisayarınıza indirmelisiniz. YOLOv3 modeli, sıkça kullanılan bir versiyonudur ve resmi GitHub deposundan erişebilirsiniz. Projeye girmeden önce, gerekli dosyaları bir dizine eklemeyi unutmayın.

Modelin Yüklenmesi ve Kullanımı

Gerekli kütüphaneleri yükledikten sonra, YOLO modelini nasıl yükleyeceğimizi ve kullanacağımızı inceleyelim. Modelimizi yükleyebilmek için öncelikle ağı ilgili dosyaları ve ağırlıkları doğru bir şekilde tanımlamamız gerekiyor.

Şimdi, daha önce indirdiğimiz YOLO ağıyla ilgili dosyaları yükleyerek başlayalım:

import cv2
import numpy as np

# Model dosyalarının yolu
model_cfg = 'yolov3.cfg'
model_weights = 'yolov3.weights'

# YOLO modelini yükle
net = cv2.dnn.readNetFromDarknet(model_cfg, model_weights)

Yukarıdaki kod, YOLO modelini OpenCV kullanarak yükler. Ardından, modelin çalışabilmesi için önceden eğitilmiş ağırlık dosyalarını doldurmuş olacağız. Şimdi görüntü üzerinde nasıl nesne tespiti yapacağımıza bakalım.

Görüntü Üzerinde Nesne Tespiti

Yüklediğimiz modeli kullanarak bir görüntüde nesne tespiti gerçekleştirebiliriz. Bunun için ilk önce bir görüntü dosyasını OpenCV ile okuyacağız. Ardından, yüklediğimiz modeli kullanarak nesne tespitini gerçekleştireceğiz.

Aşağıda, nesne tespiti yapacak olan Python kodu bulunmaktadır:

# Görüntüyü okuyun
image = cv2.imread('test_image.jpg')
h, w = image.shape[:2]

# 32x32 ızgara oluşturma
blob = cv2.dnn.blobFromImage(image, 0.00392, (416, 416), (0, 0, 0), True, crop=False)
net.setInput(blob)

# Çıkış katmanlarını alma
layer_names = net.getLayerNames()
output_layers = [layer_names[i[0] - 1] for i in net.getUnconnectedOutLayers()]

# İlerleme tahmini yapma
outs = net.forward(output_layers)

Bu kod, belirli bir görüntüyü okur ve YOLO modeline besler. Model, görüntüyü 416×416 boyutlarında bir diziye dönüştürmek için bir “blob” oluşturur. Daha sonra, katmanlardan elde edilen sonuçları alarak her bir nesne için bilgi içerir. Bu aşamada, çıkış katmanlarının hangi nesneleri tespit ettiğinden bahsedelim.

Tespit Sonuçlarının İşlenmesi

Modelimiz tespit sonuçlarını bir dizi içinde döndürecektir. Bu verileri işlerken, her bir nesnenin sınıfı ve güven oranını kullanarak hangi nesnelerin tespit edildiğini belirlememiz gerekecek. Güven sağlam bir sonuç için genelde %50’nin üzerindeki değerler değerlendirilecektir. Bu sonuçları işlemek için aşağıdaki kodu kullanabiliriz:

class_ids = []
scores = []
boxes = []

for out in outs:
    for detection in out:
        scores = detection[5:]
        class_id = np.argmax(scores)
        confidence = scores[class_id]
        if confidence > 0.5:
            center_x = int(detection[0] * w)
            center_y = int(detection[1] * h)
            w = int(detection[2] * w)
            h = int(detection[3] * h)
            x = int(center_x - w / 2)
            y = int(center_y - h / 2)
            boxes.append([x, y, w, h])
            class_ids.append(class_id)
            scores.append(float(confidence))

Bu kod, tespit edilen her nesne için kutular ve sınıf kimlikleri oluşturur. Ayrıca, nesneye ait güven yüzdelerini kaydeder. Bu sayede hangi nesnelerin görüntüde olduğunu anlayabiliriz. Şimdi, tespit edilen nesnelerin görüntü üzerine çizilmesi için gerekli kodu uygulayalım.

Sonuçların Görselleştirilmesi

Son olarak, tespit ettiğimiz nesnelerin hangi nesneler olduğunu ve nerede bulunduklarını görsel olarak görüntülemek için bir fonksiyon yazacağız. Bu fonksiyon, nesne tespitinde kullanılan kutuları görüntü üzerine çizecek ve ne tür nesneler tespit edildiğini belirtmek için etiketler ekleyecektir.

def draw_labels(boxes, class_ids, scores, classes, image):
    for i in range(len(boxes)):
        if scores[i] > 0.5:
            x, y, w, h = boxes[i]
            label = str(classes[class_ids[i]])
            cv2.rectangle(image, (x, y), (x + w, y + h), (255, 0, 0), 2)
            cv2.putText(image, label, (x, y + 30), cv2.FONT_HERSHEY_COMPLEX, 0.5, (255, 0, 0), 2)
    return image

Yukarıdaki fonksiyonu kullanarak, nesneleri tespit ettiğimiz görüntüyü görsel hale getirebiliriz. Sonuçları gösteren kodumuzu yazarak uygulamayı tamamlayacağız:

image = draw_labels(boxes, class_ids, scores, classes, image)
cv2.imshow('Image', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

Sonuç ve Geliştirme Fırsatları

Bu rehberde, Python ile YOLO kullanarak görüntü tanıma uygulamaları oluşturmayı temel adımlarıyla ele aldık. Gerçek zamanlı nesne tanıma özelliği, endüstriyel uygulamalar başta olmak üzere birçok alanda geniş bir yer bulmaktadır. Yazılım geliştiriciler ve veri bilimcileri için derin öğrenme ve yapay zeka alanında önemli bir araçtır.

Sonuçları daha da geliştirmek için, model optimizasyonu, farklı veri setleri ile yeniden eğitme ve daha gelişmiş tekniklerin uygulanması gibi birçok farklı yönü keşfedebilirsiniz. Ayrıca, kullanıcıların kendi projeleri için özelleştirdikleri ve farklı kütüphaneleri birleştirdikleri durumlar da oldukça yaygındır. Her bir proje, geliştiricilere yeni bir şeyler öğrenme fırsatı sunar.

Sonuç olarak, YOLO ile nesne tanıma konusunda temelinizi atmış oldunuz. Aldığınız bu bilgilerle projelerinizi daha da ileriye taşıyabilir, görüntü işleme konusundaki becerilerinizi geliştirebilir ve teknoloji dünyasına katkıda bulunmak için yeni yollar yaratabilirsiniz.

Scroll to Top