🧠 Yapay Zeka Orta

Bilgisayarla Görü ve OpenCV ile Görüntü İşlemeye Giriş

Bilgisayarlar resimleri nasıl görür? OpenCV nedir, gri tonlama, kenar algılama ve canlı web kamerasından Python ile yüz tanıma projesi kodları.

İnsanlar çevrelerindeki dünyayı algılarken duyularının neredeyse %80'ini gözleri aracılığıyla kullanır. Bir odadaki sandalyeyi görmek, arkadaşımızın yüzünü kalabalıkta seçmek veya kırmızı ışık yandığında frene basmak bizim için son derece zahmetsiz reflekslerdir. Ancak bir bilgisayar için bir kamera görüntüsü yalnızca milyonlarca sıradan sayıdan (sayısal matrislerden) ibarettir. Peki bir bilgisayara veya robota "göz ve görme yetisi" nasıl kazandırılır? İşte bu alana **Bilgisayarla Görü (Computer Vision)** ve bu alanın dünyadaki açık ara 1 numaralı kütüphanesine **OpenCV (Open Source Computer Vision Library)** adı verilir. Bu rehberde, dijital görüntülerin mantığını ve Python OpenCV ile yüz/nesne tanımayı inceliyoruz.

---

1. Bilgisayarlar Resimleri Nasıl Görür?

Bir bilgisayar ekrandaki sevimli kedi resmine baktığında kediyi değil, piksellerden oluşan dev bir sayı tablosunu görür:

  • **Piksel (Pixel):** Dijital bir görüntünün en küçük yapı taşıdır.
  • **Gri Tonlamalı (Grayscale) Resimler:** Her piksel 0 (Tam Siyah) ile 255 (Tam Beyaz) arasında tek bir sayı ile temsil edilir.
  • **Renkli (RGB / BGR) Resimler:** Her piksel 3 farklı katmandan (Kanal / Channel) oluşur: **Kırmızı (Red)**, **Yeşil (Green)** ve **Mavi (Blue)**.
  • Örneğin $1920 imes 1080$ çözünürlüğündeki Full HD bir fotoğraf, bilgisayarın belleğinde $1080$ satır, $1920$ sütun ve $3$ renk derinliğinde, yani toplamda **6.220.800 adet sayısal hücreden** oluşan dev bir 3 boyutlu tensördür!
  • ---

    2. OpenCV Kütüphanesi Nedir ve Neden Standarttır?

    Intel tarafından 2000 yılında başlatılan OpenCV, C++ ve Python dilleriyle çalışan, donanım ivmelendirmeli ve açık kaynaklı dünyanın en gelişmiş görüntü işleme kütüphanesidir:

  • **Platform Bağımsızdır:** Windows, Linux, Android ve Raspberry Pi üzerinde sorunsuz çalışır.
  • **Hafif ve Hızlıdır:** C/C++ çekirdeği sayesinde saniyede 60 kare (FPS) canlı video akışlarını anlık işleyebilir.
  • **Zengin Algoritma Desteği:** Kenar algılama, nesne takibi, yüz tanıma, optik karakter tanıma (OCR) ve derin öğrenme modellerini çalıştırma (DNN modülü) yeteneklerine sahiptir.
  • ---

    3. Temel Görüntü İşleme Adımları

    Bir robotun kamera görüntüsünü anlamlandırabilmesi için görüntü genellikle şu filtrelerden geçirilir:

    1. **Gri Tona Çevirme (`cv2.cvtColor`):** Renk bilgisi gereksiz veri yükü yaratır; resmi siyah-beyaza çevirmek işlem yükünü 3 kat azaltır.

    2. **Bulanıklaştırma (Gaussian Blur):** Kamera sensöründen gelen karlanmayı ve elektriksel parazitleri yumuşatır.

    3. **Kenar Algılama (Canny Edge Detection):** Piksel parlaklığının aniden değiştiği sınırları bularak cisimlerin dış hatlarını (çizgilerini) ortaya çıkarır.

    4. **Renk Maskeleme (HSV Eşikleme):** Örneğin çizgi izleyen bir robotta sadece sarı şeritleri veya kırmızı topu takip etmek için belirli renk tonları filtrelenir.

    ---

    4. Python ve OpenCV ile Canlı Web Kamerasından Yüz Algılama

    Aşağıdaki kod, bilgisayarınızın web kamerasını açarak ekran karşısındaki insan yüzlerini gerçek zamanlı olarak yeşil bir dikdörtgen içine alan tam bir Python OpenCV programıdır:

    import cv2
    
    # Önceden eğitilmiş Haar Cascade yüz tanıma modelini yükle
    yuz_siniflandirici = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
    
    # Web kamerasını başlat (0: Varsayılan kamera)
    kamera = cv2.VideoCapture(0)
    
    print("Kamera açıldı! Çıkmak için klavyeden 'q' tuşuna basın.")
    
    while True:
        # Kameradan bir kare oku
        basarili, kare = kamera.read()
        if not basarili:
            break
    
        # Görüntüyü gri tona çevir (Daha hızlı işlem için)
        gri = cv2.cvtColor(kare, cv2.COLOR_BGR2GRAY)
    
        # Yüzleri algıla (Ölçekleme faktörü ve komşuluk sayısı)
        yuzler = yuz_siniflandirici.detectMultiScale(gri, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
    
        # Algılanan her yüzün etrafına yeşil bir dikdörtgen çiz
        for (x, y, w, h) in yuzler:
            cv2.rectangle(kare, (x, y), (x + w, y + h), (0, 255, 0), 2)
            cv2.putText(kare, "Insan Yuzu", (x, y - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 255, 0), 2)
    
        # Ekranda göster
        cv2.imshow('RobotKodla - OpenCV Canli Yuz Algilama', kare)
    
        # 'q' tuşuna basılırsa döngüden çık
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    # Temizlik yap
    kamera.release()
    cv2.destroyAllWindows()

    ---

    5. Robotik Dünyasındaki Uygulamaları

  • **Top Takip Eden Robot:** Kameradaki kırmızı renk maskelemesi ile topun merkez koordinatı ($X, Y$) bulunur; robot top merkeze gelene kadar tekerleklerini döndürür.
  • **Otonom Şerit Takibi:** Yoldaki beyaz ve sarı şeritlerin eğimi Canny algoritmasıyla hesaplanarak aracın direksiyon açısı ayarlanır.
  • **Fabrika Kalite Kontrol:** Üretim bandından geçen şişelerin kapaklarının takılı olup olmadığı saniyenin yüzde birinde denetlenir.
  • ---

    Sonuç

    Bilgisayarla görü, yapay zekaya dünyayı anlama gözü kazandıran en büyüleyici teknoloji alanıdır. OpenCV ile atılan bu ilk adımlar, ileride otonom araçlar ve yapay zeka destekli robotik projeler geliştirmenizin anahtarını sunacaktır.