Python ile YOLO ve OpenCV Kullanarak Nesne Tespiti

Giriş: YOLO Nedir ve Nasıl Çalışır?

YOLO (You Only Look Once), nesne tanıma alanında devrim yaratan bir algoritmadır. Geleneksel yöntemlerin aksine, YOLO görüntüyü bir bütün olarak analiz ederek nesneleri tanımakta çok daha hızlı ve etkili bir yaklaşım sunar. Bu algoritma, bir görüntüdeki nesneleri tek bir ileri aşamalı sinir ağı ile belirler. Sonuç olarak, nesne tespiti çok daha hızlı ve daha az hesaplama gücü gerektirir. Kısacası, yalnızca bir kez görüntüye bakarak nesneleri sınıflandırma ve konumlandırma işlemi yapar.

YOLO’nun çalışma prensibi, bir görüntüyü, belirli bir sayıda ızgara hücresine böler ve her bir hücre için nesneleri tespit eder. Algoritma, hem nesnenin koordinatlarını hem de hangi nesnenin tespit edildiğini belirtmek için bounding box kullanır. Böylece, bir resimdeki tüm nesnelerin konum ve sınıf bilgileri hızla elde edilebilir.

YOLO, sürekli gelişim gösteren bir teknoloji olduğundan, farklı versiyonları vardır. Bu yazıda, YOLOv5 versiyonunu kullanarak Python ve OpenCV ile nesne tespiti yapmayı inceleyeceğiz. YOLOv5, daha önceki versiyonlara göre daha hızlı ve daha doğru nesne tespit imkanı sunuyor.

OpenCV ile Python Ortamını Hazırlama

OpenCV (Open Source Computer Vision Library), bilgisayarla görme uygulamalarını geliştirmek için kullanılan bir açık kaynak kütüphanesidir. Python ile kolay bir şekilde entegrasyon yapabiliriz. İlk olarak, OpenCV’yi sistemimize yüklememiz gerekiyor. Bu işlemi pip aracılığıyla oldukça basit bir şekilde yapabiliriz:

pip install opencv-python opencv-python-headless

Bunun yanı sıra, YOLOv5 modelimizi kullanabilmek için bazı ekstra kütüphanelere de ihtiyacımız olacak. Aşağıdaki komutları kullanarak gerekli kütüphaneleri yükleyebilirsiniz:

pip install torch torchvision torchaudio

Bu aşamada, Python ortamınızın doğru kurulduğundan emin olun. Artık OpenCV ve YOLO modelimizi kütüphanelerimizi kurduk. Bir sonraki adımda, YOLO modelimizin ağırlıklarını ve konfigürasyon dosyalarını indirmemiz gerekiyor. YOLOv5’in resmi GitHub sayfasından bu dosyaları elde edebiliriz.

YOLOv5 Modelini İndirmek ve Kullanmak

YOLOv5 modelimizi kullanmak için, öncelikle model dosyalarını indireceğiz. Model dosyalarını indirmek için aşağıdaki komutları terminalde çalıştırın:

git clone https://github.com/ultralytics/yolov5.git
cd yolov5
pip install -r requirements.txt

Bu işlem, YOLOv5’in gerekli tüm bağımlılıklarını ve model dosyalarını bilgisayarınıza indirir. Model dosyası indirildikten sonra, bu dosyayı Python projemizde kullanacak şekilde yazılımımıza entegre etmemiz gerekiyor.

YOLOv5, üç ana model ile birlikte gelir: YOLOv5s (en hafif), YOLOv5m ve YOLOv5l (en büyük). Bu yazıda, başlangıç olarak YOLOv5s modelini kullanacağız. Bu model, hem hız hem de doğruluk açısından iyi bir denge sunmaktadır.

Python ile Nesne Tespiti Kodunu Yazma

Şimdi, nesne tespitini gerçekleştirmek için gerekli olan Python kodunu yazalım. Aşağıdaki kod parçacığında, OpenCV kullanarak bir görüntüde nesne tespiti yapılacak:

import cv2
import torch

# YOLOv5 Modelini Yükle
model = torch.hub.load('ultralytics/yolov5', 'yolov5s')

# Görüntüyü Yükle
img = cv2.imread('input.jpg')

# Nesne Tespiti Yap
results = model(img)

# Sonuçları Göster
results.show()

Bu kod, öncelikle YOLOv5 modelini yükler ve ardından belirttiğiniz bir görüntüyü okur. Model üzerinde nesne tespit işlemi yapıldıktan sonra, sonuçları ekrana getirir. Burada, ‘input.jpg’ dosya adını kendi çalıştığınız dosya adıyla değiştirin.

Yukarıdaki adımlarda görüldüğü gibi, Python kodu oldukça basit ve anlaşılır. YOLOv5’i kullanmak için yalnızca birkaç satır kod yeterlidir. İleri düzeyde çalışmalar yapmak isterseniz, sonuçları kullanarak daha fazla işlem yapabilir ve tespit edilen nesneleri üzerinde ek işlemler gerçekleştirebilirsiniz.

OpenCV ile Nesne Tespiti Sonuçlarının Görselleştirilmesi

Görüntüdeki tespit edilen nesneleri görselleştirmek için OpenCV’nin sağladığı fonksiyonları kullanabiliriz. Aşağıdaki kod ile yüzeydeki dikdörtgenleri ve sınıf isimlerini ekrana yazdırıyoruz:

for *xyxy, conf, cls in results.xyxy[0]:
    label = f'{model.names[int(cls)]} {conf:.2f}'
    cv2.rectangle(img, (int(xyxy[0]), int(xyxy[1])), (int(xyxy[2]), int(xyxy[3])), (255, 0, 0), 2)
    cv2.putText(img, label, (int(xyxy[0]), int(xyxy[1] - 10)), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 0, 0), 2)

cv2.imshow('Nesne Tespiti Sonuçları', img)
cv2.waitKey(0)

Bu kodda, nesne tespiti sonuçlarını döngü ile işliyoruz. Her tespit edilen nesne için bounding box çiziyoruz ve üzerinde nesnenin sınıf adını ve güven puanını gösteriyoruz. Bu aşama, eğitimli modelimizin sonuçlarını gözlemlemek için oldukça faydalıdır.

OpenCV’nin sağladığı bu görselleştirme imkanları sayesinde, nesne tespiti çalışmalarınızı daha anlamlı hale getirebilirsiniz. Kullanıcı arayüzü mantığını ve uygulama deneyimini daha iyi hale getirmek için bu görselleştirmeleri özelleştirebilirsiniz.

İleri Düzey Özellikler ve İyileştirmeler

Yalnızca temel nesne tespitinin ötesine geçmek istiyorsanız, bu alanda yapabileceğiniz birkaç ileri düzey özellik bulunmaktadır. Örneğin, tespit edilen nesnelerin izlenmesi, tespitlerin kaydedilmesi veya farklı nesne türlerinin tanımlanması gibi konular üzerine çalışabilirsiniz.

Bunun yanı sıra, gerçek zamanlı nesne tespiti yaparak kameradan alınan görüntüler üzerinde analizler gerçekleştirebilirsiniz. Bu, daha dinamik sistemler geliştirmek için harika bir fırsat sunar. Aşağıda, bir webcam’den görüntü alarak nesne tespiti yapmanın temel bir örneğini bulabilirsiniz:

cap = cv2.VideoCapture(0)
while cap.isOpened():
    ret, frame = cap.read()
    results = model(frame)
    results.show()
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

Bu kod, webcam’den sürekli olarak görüntü alır ve her frame üzerinde nesne tespiti yapar. İzleme işlemi sırasında ‘q’ tuşuna bastığınızda döngüden çıkarak programı sonlandırmış olursunuz.

Sonuç ve Öneriler

Bu yazıda, Python ile YOLO ve OpenCV kullanarak nesne tespiti yapmanın temel adımlarını ele aldık. YOLO algoritmasının hızlı ve etkin bir nesne tanıma çözümü sunduğunu vurguladık. Ayrıca, OpenCV’nin sağladığı görselleştirme imkanları ile kullanıcı deneyimini geliştirdik.

Nesne tespiti konusuna ilk adımı attıysanız, bu teknolojilerle birlikte daha fazla uygulama geliştirerek becerilerinizi geliştirmeye devam edebilirsiniz. Önerim, farklı veri setleri kullanarak modelinizi eğitmek veya nesne izleme gibi daha ileri düzey senaryolar üzerinde çalışmaktır.

Python ve OpenCV ile geliştirdiğiniz projelerde bu bilgileri kullanarak daha karmaşık uygulamalar oluşturabilir, toplulukla paylaştığınızda ilgi çekici sonuçlar pozisyonunuza katkı sağlar. Her zaman denemeler yaparak ve yeni yöntemler keşfederek öğrenmeye devam edin!

Scroll to Top