AI-For-Beginners/translations/tr/lessons/4-ComputerVision/06-IntroCV/README.md

9.4 KiB
Raw Blame History

Bilgisayarlı Görüye Giriş

Bilgisayarlı Görü, bilgisayarların dijital görüntüleri yüksek seviyede anlamasını sağlamayı amaçlayan bir disiplindir. Bu oldukça geniş bir tanımdır çünkü anlama birçok farklı şeyi ifade edebilir; bir resimdeki nesneyi bulmak (nesne tespiti), ne olduğunu anlamak (olay tespiti), bir resmi metinle açıklamak veya bir sahneyi 3D olarak yeniden oluşturmak gibi. İnsan görüntüleriyle ilgili özel görevler de vardır: yaş ve duygu tahmini, yüz tespiti ve tanımlama, 3D duruş tahmini gibi.

Ders Öncesi Test

Bilgisayarlı görünün en basit görevlerinden biri görüntü sınıflandırmasıdır.

Bilgisayarlı görü genellikle yapay zekanın bir dalı olarak kabul edilir. Günümüzde, bilgisayarlı görü görevlerinin çoğu sinir ağları kullanılarak çözülmektedir. Bu bölümde, bilgisayarlı görü için kullanılan özel bir sinir ağı türü olan evrişimli sinir ağlarını daha ayrıntılı olarak öğreneceğiz.

Ancak, bir görüntüyü sinir ağına göndermeden önce, birçok durumda görüntüyü iyileştirmek için bazı algoritmik teknikler kullanmak mantıklı olabilir.

Görüntü işleme için kullanılabilecek birkaç Python kütüphanesi bulunmaktadır:

  • imageio farklı görüntü formatlarını okumak/yazmak için kullanılabilir. Ayrıca video karelerini görüntülere dönüştürmek için faydalı bir araç olan ffmpeg'i destekler.
  • Pillow (PIL olarak da bilinir) biraz daha güçlüdür ve morfing, palet ayarlamaları gibi bazı görüntü manipülasyonlarını destekler.
  • OpenCV C++ ile yazılmış güçlü bir görüntü işleme kütüphanesidir ve görüntü işleme için de facto standart haline gelmiştir. Python arayüzü oldukça kullanışlıdır.
  • dlib birçok makine öğrenimi algoritmasını, bilgisayarlı görü algoritmalarını da içeren bir C++ kütüphanesidir. Python arayüzü vardır ve yüz ve yüz özellikleri tespiti gibi zorlu görevler için kullanılabilir.

OpenCV

OpenCV görüntü işleme için de facto standart olarak kabul edilir. C++ ile yazılmış birçok faydalı algoritma içerir. OpenCV'yi Python'dan da çağırabilirsiniz.

OpenCV öğrenmek için iyi bir yer bu Learn OpenCV kursudur. Müfredatımızda amacımız OpenCV'yi öğrenmek değil, onun ne zaman ve nasıl kullanılabileceğine dair bazı örnekler göstermektir.

Görüntü Yükleme

Python'da görüntüler NumPy dizileriyle kolayca temsil edilebilir. Örneğin, 320x200 piksel boyutundaki gri tonlamalı bir görüntü 200x320 boyutunda bir dizi olarak saklanır ve aynı boyuttaki renkli bir görüntü 200x320x3 (3 renk kanalı için) şekline sahip olur. Bir görüntüyü yüklemek için aşağıdaki kodu kullanabilirsiniz:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpeg')
plt.imshow(im)

Geleneksel olarak, OpenCV renkli görüntüler için BGR (Mavi-Yeşil-Kırmızı) kodlamasını kullanır, diğer Python araçları ise daha geleneksel olan RGB (Kırmızı-Yeşil-Mavi) kodlamasını kullanır. Görüntünün doğru görünmesi için, NumPy dizisindeki boyutları değiştirerek veya bir OpenCV fonksiyonunu çağırarak RGB renk uzayına dönüştürmeniz gerekir:

im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

Aynı cvtColor fonksiyonu, bir görüntüyü gri tonlamaya veya HSV (Ton-Doygunluk-Değer) renk uzayına dönüştürmek gibi diğer renk uzayı dönüşümleri için de kullanılabilir.

OpenCV'yi kullanarak video karelerini tek tek yükleyebilirsiniz - bunun bir örneği OpenCV Notebook egzersizinde verilmiştir.

Görüntü İşleme

Bir görüntüyü sinir ağına beslemeden önce, birkaç ön işleme adımı uygulamak isteyebilirsiniz. OpenCV birçok şey yapabilir, bunlar arasında:

  • im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS) kullanarak görüntüyü yeniden boyutlandırma.
  • im = cv2.medianBlur(im,3) veya im = cv2.GaussianBlur(im, (3,3), 0) kullanarak görüntüyü bulanıklaştırma.
  • Görüntünün parlaklık ve kontrastını değiştirmek, bu Stackoverflow notundaıklandığı gibi NumPy dizisi manipülasyonlarıyla yapılabilir.
  • Eşikleme kullanarak cv2.threshold/cv2.adaptiveThreshold fonksiyonlarını çağırmak, genellikle parlaklık veya kontrast ayarlamaya tercih edilir.
  • Görüntüye farklı dönüşümler uygulamak:
    • Affine dönüşümler, görüntüye döndürme, yeniden boyutlandırma ve eğme işlemlerini birleştirmeniz gerektiğinde ve görüntüdeki üç noktanın kaynak ve hedef konumlarını bildiğinizde faydalı olabilir. Affine dönüşümler paralel çizgileri paralel tutar.
    • Perspektif dönüşümler, görüntüdeki dört noktanın kaynak ve hedef konumlarını bildiğinizde faydalı olabilir. Örneğin, bir akıllı telefon kamerasıyla bir dikdörtgen belgeyi bir açıdan çekerseniz ve belgenin kendisinin dikdörtgen bir görüntüsünü oluşturmak isterseniz.
  • Optik akış kullanarak görüntü içindeki hareketi anlamak.

Bilgisayarlı Görü Kullanım Örnekleri

OpenCV Notebook içinde, bilgisayarlı görünün belirli görevleri gerçekleştirmek için nasıl kullanılabileceğine dair bazı örnekler veriyoruz:

  • Braille kitabının bir fotoğrafını ön işleme. Eşikleme, özellik tespiti, perspektif dönüşümü ve NumPy manipülasyonlarını kullanarak bireysel Braille sembollerini bir sinir ağı tarafından daha fazla sınıflandırma için ayırmaya odaklanıyoruz.
Braille Görüntüsü Braille Görüntüsü Ön İşlenmiş Braille Sembolleri

Görüntü OpenCV.ipynb dosyasından alınmıştır.

  • Video içinde hareketi kare farkı kullanarak tespit etme. Kamera sabit ise, kamera akışından gelen kareler birbirine oldukça benzer olmalıdır. Kareler diziler olarak temsil edildiğinden, iki ardışık kare için bu dizileri çıkararak piksel farkını elde edebiliriz; bu fark statik kareler için düşük olmalı ve görüntüde önemli bir hareket olduğunda artmalıdır.

Video kareleri ve kare farkları görüntüsü

Görüntü OpenCV.ipynb dosyasından alınmıştır.

  • Optik Akış kullanarak hareket tespiti. Optik akış, video karelerindeki bireysel piksellerin nasıl hareket ettiğini anlamamıza olanak tanır. İki tür optik akış vardır:

    • Yoğun Optik Akış, her pikselin nereye hareket ettiğini gösteren vektör alanını hesaplar.
    • Seyrek Optik Akış, görüntüdeki bazı belirgin özellikleri (örneğin kenarları) alır ve bunların kareden kareye olan hareket yolunu oluşturur.

Optik Akış Görüntüsü

Görüntü OpenCV.ipynb dosyasından alınmıştır.

✍️ Örnek Not Defterleri: OpenCV OpenCV'yi Deneyin

OpenCV Notebook ile OpenCV'yi keşfederek bazı deneyler yapalım.

Sonuç

Bazen, hareket tespiti veya parmak ucu tespiti gibi nispeten karmaşık görevler yalnızca bilgisayarlı görü ile çözülebilir. Bu nedenle, bilgisayarlı görünün temel tekniklerini ve OpenCV gibi kütüphanelerin neler yapabileceğini bilmek çok faydalıdır.

🚀 Meydan Okuma

AI Show'dan bu videoyu izleyerek Cortic Tigers projesini ve bilgisayarlı görü görevlerini bir robot aracılığıyla demokratikleştirmek için blok tabanlı bir çözüm nasıl oluşturduklarını öğrenin. Bu alana yeni başlayanları yönlendiren benzer projeler hakkında araştırma yapın.

Ders Sonrası Test

İnceleme ve Kendi Kendine Çalışma

Optik akış hakkında daha fazla bilgi edinmek için bu harika eğitimi okuyun.

Ödev

Bu laboratuvarda, basit jestlerle bir video çekeceksiniz ve amacınız optik akış kullanarak yukarı/aşağı/sol/sağ hareketlerini çıkarmaktır.

Avuç İçi Hareketi Kare