Age Detection with OpenCV, OpenCV'nin DNN modülünü kullanarak bir görüntüde ya da webcam akışında yüzleri bulan, her yüzü bir yaş aralığına (bucket) sınıflandıran ve tahmin edilen aralığı doğrudan kare üzerine çizen küçük bir Python programıdır. Önceden eğitilmiş modellere dayanır ve eğitim kodu içermez.

Sınırlayıcı kutu ve 25 - 32 yaş aralığı etiketi olan bir yüz illüstrasyonu; bir grafiktir, gerçek program çıktısı değildir
Yalnızca illüstrasyon, gerçek program çıktısı değildir: sınırlayıcı kutu ve yaş aralığı olan stilize bir yüz. Gerçek program, kare üzerine bir dikdörtgen ve (25-32) gibi bir metin etiketi ile güven yüzdesini çizer.

Proje ne yapıyor?

Program, --image ile verilen bir görüntüyü alır; görüntü verilmezse varsayılan webcam'e geçer. Tespit ettiği her yüz için sabit sekiz yaş aralığından birini tahmin eder: (0-2), (4-6), (8-12), (15-20), (25-32), (38-43), (48-53) ve (60-100). Sonuç, karenin üzerine bir dikdörtgen ve güven yüzdesi içeren bir etiket olarak çizilir. Görüntü modunda betik ayrıca her yüzün aralığını, güven değerini ve kutu koordinatlarını yazdırır, işaretlenmiş resmi --output ile kaydedebilir ve --no-display ile önizleme penceresini atlayabilir. Webcam modunda q tuşu canlı pencereyi kapatır. Diğer seçenekler: --camera-index, --camera-backend (auto, any, dshow veya msmf), --model-dir, --confidence-threshold ve --padding.

Nasıl çalışıyor?

OpenCV'nin DNN modülüyle önceden eğitilmiş iki ağ yüklenir: bir yüz dedektörü (opencv_face_detector.pbtxt ve opencv_face_detector_uint8.pb) ve bir yaş sınıflandırıcısı (age_deploy.prototxt ve age_net.caffemodel). Her kare dört adımdan geçer:

  1. Kare, yüz dedektörü için 300 x 300'lük bir blob'a dönüştürülür; güven eşiğinin (varsayılan 0,7) altındaki tespitler atılır.
  2. Her yüz kutusuna 20 piksel dolgu (varsayılan) eklenir ve yüz kırpılır.
  3. Kırpılan görüntü, yaş ağı için 227 x 227'lik bir blob'a dönüştürülür ve sekiz çıktıdan en yüksek skorlusu etiket olur.
  4. Dikdörtgen ve güven değeriyle birlikte etiket kare üzerine çizilir.

Model dosyaları depoda yer almaz. models/ klasörüne konur ya da --download-models veya --download-only ile indirilir. Derin sinir ağlarına sade bir giriş için Derin Öğrenme Nedir? yazısına bakabilirsin.

Tasarım kararları neler?

Proje, yaş tahminini tam yaşı bulmaya çalışan bir regresyon olarak değil, yaş aralıkları üzerinde bir sınıflandırma olarak ele alır; README'ye göre ışık, kamera kalitesi, poz, arka plan karmaşası, bulanıklık ve nesne örtmesi (occlusion) belirsizliği artırır. Önceden eğitilmiş modelleri OpenCV'nin DNN modülüyle kullanmak bağımlılıkları numpy ve opencv-python ile sınırlı tutar ve bir eğitim pipeline'ı ihtiyacını ortadan kaldırır; model dosyaları depoya konmak yerine kodda listelenen adreslerden (OpenCV'nin GitHub depoları, learnopencv deposu ve bir Dropbox bağlantısı) isteğe bağlı olarak indirilir. Davranış komut satırından ayarlanabilir: tespit güveni, yüz dolgusu, kamera indeksi ve kamera backend'i. Windows'ta webcam erişimi başarısız olursa backend seçeneği msmf veya dshow'un zorlanmasına izin verir; betik ayrıca webcam ve pencere gösterimini güvenilir kılmayan headless bir OpenCV kurulumu olup olmadığını denetler ve çözümü yazdırır.

Sınırlamaları neler?

README'ye göre model kesin doğum tarihi değil, yaş aralığı tahmin eder ve performansı düşük ışıkta, aşırı poz açılarında, güneş gözlüğü, maske ya da hareket bulanıklığı durumunda düşebilir. Aralıklar sabittir ve sekiz aralık, aralarında kalan bazı yaşları kapsamaz. Tespit güveni eşiğin altında kalan yüzler atılır ve gösterilen güven değeri, yaş ağının kazanan aralık için verdiği skordur. Model dosyaları eksikse betik beklediği dosya adlarını tam olarak listeler. Webcam için OpenCV'nin masaüstü sürümü gerekir: pencere açılıp hemen kapanırsa README, opencv-python-headless paketini kaldırıp opencv-python kurmayı önerir. Depo doğruluk rakamı yayımlamaz; bu yüzden burada da hiçbiri yer almaz.

Denemek veya kodu okumak için nereye bakmalı?

Kaynak kod GitHub'da; requirements.txt numpy ve opencv-python için asgari sürümleri belirtir. Gereksinimleri kur, ardından modelleri indirip bir fotoğraf üzerinde tek komutla çalıştır ya da webcam'i başlat:

pip install -r requirements.txt
python main.py --download-models --image path/to/photo.jpg
python main.py

Bunun gibi başka çalışmalar için Projeler sayfasına bakabilirsin.

Tek cümlelik versiyonu

Age Detection with OpenCV, önceden eğitilmiş bir dedektörle görüntüdeki veya webcam akışındaki yüzleri bulur, önceden eğitilmiş bir yaş ağıyla her birini sekiz yaş aralığından biriyle etiketler ve kesin yaş değil, aralık tahmin eder.