YOLO ile Cihazlarda Nesne Tespiti: Python ve GitHub Kullanımı

Giriş

Yapay zeka ve makine öğrenimi alanında nesne tespiti, birçok uygulama için kritik öneme sahip bir tekniktir. Bu alandaki en popüler yöntemlerden biri de YOLO (You Only Look Once) algoritmasıdır. YOLO, görüntü içindeki nesneleri tek bir işlemde tanıma yeteneği ile hızlı ve etkili bir çözüm sunar. YOLO’yu Python ile kullanarak nesne tespiti uygulaması geliştirmek, hem eğlenceli hem de öğretici bir deneyim olabilir. Bu yazıda, YOLO algoritmasının temel prensiplerini, Python’da nasıl kullanılacağını ve GitHub’daki kaynaklardan nasıl yararlanabileceğinizi öğreneceksiniz.

YOLO Nedir?

YOLO, nesne tespiti için geliştirilmiş bir derin öğrenme algoritmasıdır. Görüntüyü bir bütün olarak ele alarak, her bir nesne için sınıf etiketleri ve koordinat bilgileri çıkarır. Bu, algılamanın hızını artırır ve klasik yöntemlere göre birçok avantaja sahiptir. YOLO, gerçek zamanlı uygulamalar için oldukça uygun bir çözümdür. İlk sürümü 2016 yılında Joseph Redmon tarafından tanıtılmıştır ve sürekli olarak geliştirilmiştir. YOLO’nun farklı sürümleri mevcuttur: YOLOv3, YOLOv4 ve son olarak YOLOv5.

YOLO’nun çalışma mantığı, görüntüyü bir ızgara (grid) şeklinde bölüp, her bir ızgara hücresinin nesne tespiti yapmasını sağlamaktır. Her hücre, görüntüdeki belirli bir alanı temsil ettiğinden, hücre içinde bir nesne tespit edilirse, bu hücre nesnenin koordinatlarını ve olasılık değerlerini hesaplayarak çıktıyı oluşturur. Bu sayede, YOLO algoritması hızlı bir şekilde çalışır ve yüksek doğruluk oranları sunar.

Sonuç olarak, YOLO, hem düşük gecikme süresi hem de yüksek doğruluk ile nesne tespiti için geniş bir uygulama alanına sahiptir. Otomotiv sektöründen güvenlik sistemlerine, yangın algılama sistemlerinden robotik uygulamalara kadar birçok alanda kullanılmaktadır. Şimdi, Python ve GitHub kullanarak YOLO’yu bir projeye entegre etmeyi öğrenelim.

Python ile YOLO Kullanımı

Python, makine öğrenimi ve derin öğrenme alanında en yaygın kullanılan dillerden biridir. Kütüphaneler ve çerçeveler sayesinde, modelinizi kolayca oluşturabilir, eğitebilir ve test edebilirsiniz. YOLO algoritmasını Python ile kullanmak için genellikle OpenCV ve TensorFlow gibi kütüphaneler kullanılır. Bu kütüphaneler, görüntü işleme ve model eğitimi için kapsamlı araçlar sunar.

İlk olarak, gerekli kütüphaneleri yüklemekle başlayalım. Aşağıdaki komut, OpenCV ve diğer gerekli kütüphaneleri yükleyecektir:

pip install opencv-python numpy matplotlib

Bir sonraki adım, YOLO model dosyalarını temin etmektir. GitHub üzerinde birçok açık kaynak proje bulunmaktadır. Örneğin, AlexeyAB/darknet reposu, YOLO’nun en güncel uygulamalarını içerir. Bu repo, YOLO’yu eğitmek ve görüntülerde nesne tespiti yapmak için gereken dosyaları ve yönergeleri sağlamaktadır. Yükleme işlemini GitHub üzerinden gerçekleştirebiliriz:

git clone https://github.com/AlexeyAB/darknet.git

Darknet reposunu klonladıktan sonra, Python kodunu yazarak nesne tespiti gerçekleştirmek için hazırlıklarımızı tamamlayabiliriz. Aşağıdaki adım adım süreci izleyerek YOLO kullanımı ile nesne tespiti uygulamamızda ilerleyelim.

Gerekli Dosyaların İndirilmesi

Darknet reposunu klonladıktan sonra, YOLO modelini çalıştırmak için birkaç dosyaya ihtiyacımız var. Bu dosyalar, konfigürasyon (yolo.cfg), ağırlık dosyası (yolo.weights) ve sınıf etiket dosyası (coco.names) gibi dosyalardır. Aşağıdaki komut, gerekli ağırlık dosyalarını indirmenize yardımcı olacaktır:

wget https://pjreddie.com/media/files/yolov3.weights

Ayrıca, sınıf etiketlerini içeren coco.names dosyasını da indiriyoruz:

wget https://github.com/pjreddie/darknet/blob/master/data/coco.names

Tüm dosyalar hazır olduğunda, YOLO modelimizi bir Python betiği ile çalıştırabiliriz. Aşağıdaki örnek kod parçacığı, YOLO ile bir görüntüde nesne tespiti yapmaktadır:

import cv2
import numpy as np

# YOLO dosyalarının yolları
configPath = 'yolo.cfg'
weightsPath = 'yolo.weights'
labelsPath = 'coco.names'

# sınıf etiketlerini yükle
with open(labelsPath, 'r') as f:
    labels = f.read().strip().split('\n')

# YOLO ağı yükle
net = cv2.dnn.readNetFromDarknet(configPath, weightsPath)

# görüntü yükle
image = cv2.imread('input.jpg')
height, width = image.shape[:2]

# görüntüyü bir blob'a dönüştür
blob = cv2.dnn.blobFromImage(image, 1/255.0, (416, 416), swapRB=True, crop=False)
net.setInput(blob)
output_layers = net.getUnconnectedOutLayersNames()
outputs = net.forward(output_layers)

Nesne Tespit Sonuçlarının İşlenmesi

Yukarıdaki kod parçasında, görüntüyü yükledikten sonra YOLO ağına giriş olarak vermek için bir blob nesnesine dönüştürdük. Şimdi, nesne tespit sonuçlarını işlemek için kodlarımıza devam edelim:

boxes = []
confidences = []
class_ids = []

for output in outputs:
    for detection in output:
        scores = detection[5:]
        class_id = np.argmax(scores)
        confidence = scores[class_id]
        if confidence > 0.5:
            center_x = int(detection[0] * width)
            center_y = int(detection[1] * height)
            w = int(detection[2] * width)
            h = int(detection[3] * height)

            # kutunun koordinatları
            x = int(center_x - w / 2)
            y = int(center_y - h / 2)

            boxes.append([x, y, w, h])
            confidences.append(float(confidence))
            class_ids.append(class_id)

Yukarıdaki kod, tespit edilen her bir nesne için güven derecesini kontrol eder ve belirli bir eşik değerinin üzerinde ise nesnenin koordinatlarını ve boyutunu kutunun içine alır. Sonrasında, bu nesne kutularını görüntü üzerinde gösterelim:

indices = cv2.dnn.NMSBoxes(boxes, confidences, score_threshold=0.5, nms_threshold=0.4)

for i in indices:
    box = boxes[i]
    (x, y, w, h) = box
    label = str(labels[class_ids[i]])
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 255, 0), 2)
    cv2.putText(image, label, (x, y - 5), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

Bu kod eklenerek, tespit edilen nesneleri görüntü üzerine çizebilir ve etiketlerini ekleyebilirsiniz. Son olarak, sonuçları gösterelim:

cv2.imshow('Nesne Tespiti', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

GitHub’da Proje Yayınlama

Geliştirdiğiniz YOLO nesne tespiti projesini GitHub’da paylaşmak, hem diğerleriyle etkileşimde bulunmak hem de topluluk tarafından geri bildirim almak için harika bir yoldur. Projenizi paylaşmak için öncelikle bir GitHub hesabına ihtiyacınız var. Eğer bir hesabınız yoksa, GitHub üzerinden ücretsiz bir hesap oluşturabilirsiniz.

Hesabınızı oluşturduktan sonra, yeni bir depo (repository) oluşturun. Depoyu oluşturduktan sonra, komut satırında projenizi bu depoya yüklemek için aşağıdaki adımları izleyin:

git init
 git add .
git commit -m 'İlk Yükleme'
git remote add origin 
git push -u origin main

Bu komutlar ile projenizi GitHub’a yükleyebilir ve herkesin erişimine açabilirsiniz. Projenizin açıklamasını ve talimatlarını README dosyası içinde belirtmek, kullanıcıların projenizi daha iyi anlamasına yardımcı olacaktır. Ayrıca, projeye katkıda bulunmak isteyenler için katkı kurallarını (CONTRIBUTING.md) da eklemeyi unutmayın.

Yüklemenin ardından, projenizi sosyal medya veya teknik forumlar aracılığıyla tanıtarak daha fazla kişinin ulaşmasını sağlayabilirsiniz. GitHub’daki projelerinizi geliştirmek, yeni özellikler eklemek ve başkalarının katkılarıyla zenginleştirmek size yeni deneyimler kazandıracaktır.

Sonuç

Bu yazıda, YOLO algoritmasını Python ile kullanarak nesne tespiti uygulaması geliştirmenin adımlarını ele aldık. YOLO’nun hızlı ve etkili yapısı, onu hem amatör geliştiriciler hem de profesyonel uygulamalar için cazip kılıyor. Projeleri GitHub üzerinde paylaşarak, topluluğun desteğini almak ve kendi bilgi birikiminizi artırmak mümkündür.

Python ile gelişmiş projelere yönelmek, birlikte çalışma, öğrenme ve paylaşma fırsatları sunar. Kendi projelerinizi geliştirip, bu yazıda sunduğumuz adımları uygulayarak nesne tespiti alanında ilerlemek cesaretinizi artıracaktır. Ayrıca, Python ve makine öğrenimi ile ilgili daha fazla kaynak ve topluluk projeleri için GitHub’ı keşfetmeye devam etmenizi öneririm.

Unutmayın, öğrenme süreci ve projelerinizi geliştirme süreci sürekli devam eden bir yolculuktur. YOLA ÇIKIN VE YENİ FIRSATLAR YAKALAYIN!

Scroll to Top