OpenCV ile DNN Kullanarak Gerçek Zamanlı Nesne Tanıma

Giriş

Görüntü işleme ve bilgisayarla görme alanı, son yıllarda büyük bir gelişim gösterdi. Sinir ağları ve derin öğrenme ile birleştiğinde, bu teknolojiler nesne tanıma, yüz tanıma ve daha fazlası gibi çeşitli uygulamalara kapı açtı. OpenCV (Open Source Computer Vision Library), bildiğiniz gibi, bu alanlarda en popüler kütüphanelerden biridir.

Bu yazıda, OpenCV’nin DNN (Deep Neural Networks) modülünü kullanarak nasıl gerçek zamanlı nesne tanıma yapabileceğimizi inceleyeceğiz. Python programlama dili ve OpenCV kütüphanesi sayesinde, düşük maliyetle etkili çözümler üretmek mümkün. Eğitimli bir derin öğrenme modelini kullanarak, dilediğimiz nesneleri hızlıca tanıyabiliriz.

Öncelikle DNN modülünün ne olduğunu ve nasıl çalıştığını anlamak önemlidir. Ardından, adım adım bir uygulama geliştireceğiz ve bu aşamaları detaylandırarak, projenizi nasıl gerçekleştirebileceğinizi göstereceğiz.

DNN Modülü Nedir?

DNN modülü, OpenCV’nin derin öğrenme ile ilgili fonksiyonlarını içeren bir bileşenidir. Bu modül, GoogLeNet, YOLO, SqueezeNet gibi önceden eğitilmiş modelleri kullanarak görüntülerdeki nesneleri tanımamıza olanak sağlar. DNN modülü ile, geniş bir veri kümesi üzerinde eğitilmiş olan derin öğrenme modelleri kullanarak, farklı nesneleri başarıyla tanımlayabiliriz.

DNN, modelin çıktısını kullanarak görüntü üzerinde nesneleri bulmak için gereken işlemleri yapar. DNN modülünden yararlanarak, bir görüntüdeki nesne ve onların sınıflarını (örn. köpek, araba, insan) belirlemek oldukça kolaydır. DNN, aynı zamanda birkaç farklı framework ile uyumlu çalışabilir; hem TensorFlow hem de Caffe, bu framework’ler arasında yer alır.

Bununla birlikte, DNN modülünün kullanımı oldukça esnektir. Önceden eğitilmiş modelleri kullanmanın yanı sıra, kendi verilerinizle bir model de eğitebilirsiniz. Bu, nesne tanıma uygulamalarınızda daha yüksek doğruluk oranları elde etmenizi sağlayabilir.

OpenCV DNN Kullanımına Hazırlık

OpenCV ile DNN kullanmadan önce, python ortamınızı kurmanız ve gerekli kütüphaneleri yüklemeniz gerekmektedir. Aşağıdaki adımları takip ederek başlayabilirsiniz:

  1. Python kurulumunu gerçekleştiriniz. Eğer sisteminizde Python yoksa, resmi web sitesinden Python’u indirip kurulumu gerçekleştirin.

  2. Gerekli kütüphaneleri yükleyin. OpenCV, NumPy gibi kütüphaneleri kullanmak için aşağıdaki komutları çalıştırın:

    pip install opencv-python numpy
  3. Görüntü işleme işlemlerine olanak sağlayan OpenCV DNN modülünü kullanabilmek için, uygun bir model dosyacığına (örn. .caffemodel veya .pb uzantılı) ve prototip dosyasına sahip olmalısınız. Bu dosyaları resmi modellerden veya kendi oluşturduğunuz modellerden elde edebilirsiniz.

Yukarıdaki adımları tamamladıktan sonra, OpenCV DNN modülünü kullanmaya hazır olacaksınız.

Gerçek Zamanlı Nesne Tanıma Uygulaması Geliştirme

Gerçek zamanlı nesne tanıma uygulaması geliştirme süreci üç temel adımdan oluşur: modelin yüklenmesi, video akışının yakalanması ve nesne tanımanın yapılması. Şimdi, bu adımları daha ayrıntılı bir şekilde inceleyelim.

Modelin Yüklenmesi

İlk olarak, DNN modülünden yararlanarak bir model yüklememiz gerekiyor. Bunun için OpenCV’deki dnn modülünü kullanacağız. Yüklemek için, model dosyanızın ve prototip dosyanızın yolunu belirtmeniz gerekecek. Aşağıdaki kod örneği, bir modelin nasıl yükleneceğini gösterir:

import cv2
net = cv2.dnn.readNetFromTensorflow('model.pb', 'config.pbtxt')

Burada ‘model.pb’ yüklemek istediğimiz model dosyası, ‘config.pbtxt’ ise prototip dosyasını temsil etmektedir. Bu işlemi tamamladıktan sonra, modelimizi kullanmaya hazır hale getirmiş olacağız.

Video Akışının Yakalanması

Nesne tanıma uygulamamızda, video akışını yakalamak için OpenCV’nin VideoCapture sınıfını kullanacağız. Bu sınıf sayesinde webcam veya harici bir kamera akışını yakalayabilirsiniz. Aşağıda, webcam ile video akışını nasıl yakalayacağınızı gösteren bir örnek bulunmaktadır:

cap = cv2.VideoCapture(0)

Burada ‘0’, bilgisayarınızdaki varsayılan kamerayı ifade eder. Eğer harici bir kamera kullanıyorsanız, farklı bir indeks numarası belirtmeniz gerekebilir. Video akışını yakaladıktan sonra, döngü ile her bir kareyi işleyebiliriz.

Nesne Tanımanın Yapılması

Artık video akışını yakaladığımıza göre, tanıma işlemini gerçekleştirebiliriz. Her bir karede, DNN modelimizi kullanarak nesne tanıma işlemini gerçekleştireceğiz. Aşağıda, bu işlemin nasıl yapılacağını gösteren bir örnek bulunmaktadır:

while True:
    ret, frame = cap.read()
    blob = cv2.dnn.blobFromImage(frame, 0.007843, (224, 224), 127.5)
    net.setInput(blob)
    detections = net.forward()

Bu kod parçasında, ‘cv2.dnn.blobFromImage’ fonksiyonu ile çerçeveyi işleme alıyoruz. Daha sonra modelimize bu işlenmiş resmi veriyoruz ve ‘net.forward()’ komutu ile tahminleri alıyoruz.

Sonuçları Görselleştirme

Tanıma sonucunda elde edilen verileri görselleştirebiliriz. Her bir nesne için, nesne sınıfını ve güven puanını ekrana grafiksel olarak yerleştirebiliriz. Bu işlem için aşağıdaki kod örneğini kullanabilirsiniz:

for i in range(detections.shape[2]):
    confidence = detections[0, 0, i, 2]
    if confidence > 0.5:
        class_id = int(detections[0, 0, i, 1])
        label = f'Class: {class_id}, Confidence: {confidence}'
        cv2.putText(frame, label, (10, 30 + i * 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)

Bu döngü ile, modelimizin tahmin ettiği sınıf kimliğini (class_id) ve güven oranını (confidence) çerçeve üzerinde gösterebiliriz.

Yapının Tamamlanması

Son olarak, sürekli döngüyü kırmak ve kaynakları serbest bırakmak için bir çıkış durumu oluşturmalıyız. Aşağıdaki kod ile uygulamamızın sona ermesini sağlayabiliriz:

    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
cap.release()
cv2.destroyAllWindows()

Yukarıdaki kodu ekleyerek uygulamanızın düzgün bir şekilde kapanmasını sağlamış olacaksınız.

Sonuç ve Öneriler

OpenCV DNN ile gerçek zamanlı nesne tanıma uygulaması geliştirmek oldukça eğlenceli ve öğretici bir deneyimdir. Bu yazıda, adım adım bir nesne tanıma uygulaması yaratmanın temel süreçlerini inceledik. Modelleri kullanarak, çeşitli nesnelere dair bilgiler elde etmek mümkündür. Kendi projelerinizde bu uygulamayı geliştirebilir, farklı veri kümesi ve modeller ile denemeler yapabilirsiniz.

Özellikle DNN modülünü kullanarak kendi modelinizi eğitmek, daha spesifik nesneleri tanımak açısından faydalı olacaktır. Kendi verilerinizi kullanarak, Türkiye’de bulunan yerel nesneleri veya özel gereksinimlerinizi bir araya getirip, modelinizi özelleştirebilirsiniz.

Uygulama sonrasında, geliştirdiğiniz nesne tanıma uygulamasıyla ilgili deneyimlerinizi paylaşmayı unutmayın. Açık kaynak topluluğunda yer almak, diğer geliştiricilerin projelerinden faydalanmak ve kendi projelerinizi paylaşıma açmak büyük bir motivasyon kaynağıdır.

Scroll to Top