Elde Ne Var? — Görüntü İşleme
Görüntü işleme alanında bilgi edinmek ve uzmanlaşmak için yapay zekâ ile birlikte tasarladığım, hâlâ devam eden bir proje. Webcam görüntüsü üzerinde el algılamaya dayanan, tamamı yerelde — bulut, internet ve API olmadan — çalışan üç Python uygulamasından oluşuyor: eli 21 eklem noktasıyla çizen temel algılayıcı, parmak jestleriyle fareyi süren kontrol uygulaması ve asıl hedef olan "Elde Ne Var?" — elde tutulan nesneyi bulup Türkçe adını ekrana yazan ve sesli söyleyen uygulama.
- Yıl
- 2026
- Kategori
- Görüntü İşleme
- Kullanılan teknolojiler
- Python · OpenCV · MediaPipe · SigLIP2 · ONNX Runtime · TFLite · NumPy


Genel bakış
Bu proje, görüntü işlemeyi ders düzeyinde bilmekten çıkıp gerçekten uygulayabilmek için yapay zekâ ile birlikte tasarladığım, üzerinde çalışmaya devam ettiğim bir çalışma. Ortak bir altyapıyı paylaşan üç uygulamadan oluşuyor: kameradaki eli bulup 21 eklem noktasını çizen El Algılama, parmak jestleriyle Windows faresini süren El ile Fare (bir parmak imleç, başparmak değdirme tıklama, iki parmak kaydırma, üç parmak sağ tık) ve asıl hedefim olan Elde Ne Var?.
Üçüncü uygulamanın boru hattı şöyle işliyor: her kare MediaPipe HandLandmarker'dan geçiyor ve yaklaşık 12 milisaniyede elin iskeleti çıkarılıyor. Elin çevresinden, el boyunun 2,8 katı büyüklüğünde kare bir odak bölgesi kırpılıp 320×320'ye ölçekleniyor. Bu kırpım önce EfficientDet-Lite0'a gidiyor — "nerede?" sorusunu yanıtlıyor, aday kutular öneriyor. Ardından SigLIP2 devreye girip "ne?" sorusunu yanıtlıyor. Sonuç yaklaşık 0,7 saniyelik bir kararlılık penceresinden geçtikten sonra ekrana yazılıyor ve seslendiriliyor.
Projenin en belirleyici kararı bu iş bölümü oldu. İlk sürümde nesnenin adını da dedektör veriyordu ve elde ne varsa "diş fırçası" ya da "cep telefonu" çıkıyordu; karenin çoğunu el kapladığında dedektörün sınıflandırma başlığı, eğitildiği veri kümesinin "elle tutulan şey" sınıflarına kayıyor. Artık dedektör yalnızca nerede olduğunu söylüyor, ismi ayrı bir model koyuyor.
İkinci belirleyici karar kapalı sözlükten açık sözlüğe geçmekti. Önceki modelin bin sabit sınıfı vardı; "kalem", "şarj kablosu", "kart" gibi nesneler eşik ayarıyla düzelecek şeyler değil, sözlükte karşılığı olmadığı için yapısal olarak tanınamıyorlardı. SigLIP2 görüntü ile metni aynı uzaya gömdüğü için sözlük 176 satırlık bir listeye dönüştü — yeni bir nesne eklemek model eğitmek değil, listeye bir satır yazmak demek. Listeye "boş el", "parmak", "kol", "arka plan" gibi negatif sınıflar da ekledim; bunlar kazandığında sonuç sessizlik oluyor, yani karar bir eşikten değil modelin kendisinden geliyor. Güven düşük ama tamamen zayıf değilse etiket gri "belki: …" olarak yazılıyor ve seslendirilmiyor.
Performans tarafında birkaç ayrıntı işi değiştirdi. GPU hızlandırma için CUDA yerine ONNX Runtime + DirectML kullandım; büyük SigLIP modelinde çıkarım süresi 2175 milisaniyeden 78 milisaniyeye indi. Kamera arka ucunu Media Foundation'a çevirmek akışı 20 FPS'ten 30 FPS'e taşıdı. OpenCV'nin fontları Türkçe karakter basamadığı için yazıları Pillow ile, önbelleğe alınmış gerçek fontla çiziyorum. Ses için ek paket yerine Windows SAPI kullanıyorum; her seferinde yeni süreç açmak yarım saniye sürdüğünden tek süreç açık tutulup metin standart girdiden gönderiliyor. Kamera okuma ve tanıma ayrı iş parçacıklarında çalışıyor, böylece görüntü 30 FPS akarken tanıma yaklaşık 13 Hz'de dönebiliyor.
En çok öğrendiğim kısım ise tahminle değil ölçümle ilerlemek oldu. Kendi kameramla 184 karelik etiketli bir küme topladım, isabeti ölçen ve eşikleri ızgara tarayan iki ayrı betik yazdım. Ölçüm üç grubu ayrı raporluyor, çünkü asıl soru "isabet yüzde kaç" değil "hangi türden hata yapıyoruz". Toplam isabet %32'den %65'e çıktı; ama pratikte en önemli satır şu: sesli söylenen yanlış isim sayısı 19'dan 5'e indi, kalan hataların çoğu artık yanlış isim değil sessizlik.
Ölçüm bir yandan da neyin işe yaramadığını kanıtladı: ten rengi maskesiyle "el dolu mu" kontrolü, el piksellerini maskelemek (ince bir nesne yumrukla tutulduğunda nesnenin kendisi siliniyordu), CLAHE ve gama gibi ön işlemler, test-time augmentation… hiçbiri kazandırmadı. En çarpıcı bulgu ise şu oldu: aynı nesne ve aynı kodla, tek değişken çekim koşulu olduğunda telefonun isabeti %20'den %85'e çıktı — modeldeki bütün çalışma o nesnede %5 kazandırmıştı. Kamerayı düzgün tutmak, model iyileştirmesinden daha çok fark ediyor. Proje geliştirilmeye devam ediyor; kodu yakında GitHub'da paylaşacağım.
Öne çıkanlar
- 01Tamamen yerelde çalışma — bulut, internet ve API bağımlılığı yok
- 02"Nerede?" ve "ne?" sorularını iki ayrı modele bölen boru hattı
- 03Açık sözlük: yeni nesne eklemek model eğitmek değil, listeye bir satır yazmak
- 04Negatif sınıflarla "elde bir şey yok" diyebilme ve emin olmadığında susma
- 05ONNX Runtime + DirectML ile GPU hızlandırma: 2175 ms → 78 ms
- 06184 karelik etiketli kümede ölçüm: toplam isabet %32 → %65, sesli yanlış isim 19 → 5