Lig koçları için maç görüntülerinden hızlı, güvenilir ve düşük maliyetli özetler üretmek, analiz sürecini hızlandırır ve takım gelişimine katkı sağlar. Bu rehberde pahalı sistemlere gerek kalmadan ucuz bir kamera, OpenCV ve pratik algoritmalarla nasıl otomatik highlight çıkarabileceğinizi, kritik hataları nasıl işaretleyeceğinizi 5 adımda anlatıyorum. Her bölümde uygulama notları, parametre önerileri ve gerçek saha uygulamasına yönelik ipuçları var.
Giriş: Neden ucuz kamera ve OpenCV?
Profesyonel video altyapıları yüksek maliyet ve karmaşıklık getirir. Ancak lig koçları için çoğu zaman amaç; kritik anları yakalamak, oyuncu hatalarını işaretlemek ve pratik geri bildirim hazırlamaktır. OpenCV gibi açık kaynak araçlar ve uygun konumlandırılmış, temel bir USB/webcam veya ucuz aksiyon kamerası bu işi büyük ölçüde görebilir.
Genel Gereksinimler ve Donanım Önerileri
- Kamera: 720p@60fps veya 1080p@30fps destekleyen USB webcam ya da giriş seviye aksiyon kamera. Daha yüksek fps, hızlı top ve oyuncu hareketlerini daha iyi yakalar.
- Lens ve Konum: Geniş açılı lens (90-120 derece) saha genelini kapatmalı. Tribün arkası orta noktaya yakın, saha merkezine 10-20 metre uzakta montaj ideal.
- Stabilizasyon: Sabit bir tripod veya yüksekliğe ayarlı direk. Rüzgar ve titreşimler analiz sonuçlarını bozar.
- İşlemci/Donanım: Basit bir laptop (i5/Ryzen 5), hafif GPU (opsiyonel) veya Raspberry Pi 4 ile hızlı prototipleme mümkündür. Gerçek zamanlı işleme gerekiyorsa GPU önerilir.
- Depolama & Senkronizasyon: Harici SSD veya SD kart; maç akışıyla zaman damgası senkronizasyonu için saat eşitleme (NTP) veya manuel senkronizasyon noktaları.
Ön Bilgiler: Kalibrasyon ve Sahayı Haritalama
Sahadan güvenilir veriler almak için kamera kalibrasyonu ve homography işlemi kritik. Kamera distorsiyonunu düzeltmek, saha çizgilerini gerçek dünya koordinatlarına çevirmek için 4-6 bilinen nokta ile cv2.getPerspectiveTransform ve cv2.warpPerspective kullanın. Bu adım top ve oyuncu konumunu saha bölümlerine (ör: ceza sahası, orta saha) eşlemeyi sağlar.
5 Adımda Otomatik Maç Özeti ve Hata İşaretleme
Adım 1: Video Yakalama ve Ön İşleme
Video okunurken çözünürlük ve fps dengesi kurun. Gerçek zamanlı değilse yüksek çözünürlük kullanabilirsiniz; ancak işlemci kısıtlı ise 720p tercih edin. Öneri parametreler: 1280x720, 30-60 fps.
- Renk uzayı dönüşümü: cv2.cvtColor ile BGR -> gray veya HSV.
- Gürültü azaltma: Gaussian blur ile küçük titreşimlerin etkisini azaltın.
- Zaman damgası: Her kareye zaman bilgisi ekleyin, dışa aktarımda zaman çizelgesini kolaylaştırır.
Adım 2: Hareket ve Arka Plan Ayrıştırma
Hareketli nesneleri tespit için background subtraction tercih edilir. Ucuz kamerada sabit perspektif olduğunda cv2.createBackgroundSubtractorMOG2 veya KNN yeterli olur.
- Parametre önerisi: history=500, varThreshold=16, detectShadows=True
- Post-processing: Morphological işlemler (erode, dilate) ile küçük parazitleri temizleyin.
- Çıktı: hareketli blob'lar -> oyuncu/top adayları.
Adım 3: Nesne Algılama ve İzleme
Oyuncu ve topu ayırt etmek için iki yöntem karışımı uygulanabilir: hafif bir obje algılayıcı + optik akış/top takip. Ağır modellerden kaçınmak için MobileNet-SSD, YOLOv5n veya benzeri küçük modeller seçin.
- Oyuncu algılama: Klasik contour tabanlı blob algılama ile başla, güven puanı düştüğünde ağ modeline başvur.
- Top takibi: Top genelde küçük ve hızlıdır. Renk segmentasyonu (saha beyaz top) veya HoughCircles ile ilk tespiti yapın. Sonrasında cv2.calcOpticalFlowPyrLK veya Kalman filtresi ile izleyin.
- Örnek pratik: top hızının ani artışı -> şut adayı; topun ceza sahasına girişleri -> kritik an.
Adım 4: Olay Tespiti ve Hata Kriterleri
Highlight oluşturmak için hangi olayların önemli olduğunu önceden tanımlayın. Koçlar genelde şut, gol, tehlikeli pas, pozisyon hatası, bire bir kaybı, top kaybı gibi anları ister.
- Şut/Gol: Top hızında ani artış + topun ceza sahası içinde belirli bir yönde ilerlemesi. Gol tespiti için topun kale çizgisini geçmesi gerekir; kamera açısı yetersizse yüksek kesinlik zor, ancak ceza sahası içi üst düzey şutlar highlight sayılabilir.
- Tehlikeli Pas/Top Kaybı: Topun rakip yarıda kaybedilmesi, top kazanımı sonrası hızlı kontra atak başlangıcı.
- Bireysel Hatalar: Oyuncu pozisyonundan sapma, markaj hatası veya boş bırakılan alanlar. Bu tür hataları tespit için oyuncu konumlarının ideal dizilişle karşılaştırılması gerekir. Bu adımda pitch-mapping (homography) kritik.
Her olay için bir skor fonksiyonu oluşturun. Örneğin şut puanı = 0.5*top_hizi_norm + 0.3*konum_agirligi + 0.2*rakip_alani_icerisinde. Eşiklerinizi saha ve lig seviyesine göre ayarlayın.
Adım 5: Highlight Kesme, Annotasyon ve Dışa Aktarım
Olay anı tespit edildiğinde, kayıtlı ham videodan belirli sınırlar içinde (örneğin 3 saniye öncesi - 5 saniye sonrası) segmentleri kesin. Bu segmentleri ardışık olarak birleştirip küçük açıklamalar ekleyin.
- Overlay: cv2.putText ile oyuncu numarası, olay tipi, zaman damgası ve hata notunu ekleyin. Bounding box veya saha üzerinde çizimlerle hatayı vurgulayın.
- İhracat: cv2.VideoWriter veya ffmpeg ile MP4 çıktısı. Ayrıca her olay için CSV/JSON formatında zaman çizelgesi ve olay meta verisi üretin.
- Ön/Arka tampon: Kesilen segmentlerde akıcılık için birkaç kare overlap bırakın.
Uygulama İpuçları ve Parametre Önerileri
- Gün ışığı ve yapay ışık farkları için adaptif eşikler kullanın. HSV renk alanında ışık değişimlerine karşı daha dayanıklı tespitler yapılır.
- FPS düşürme: Analiz hızlanmalıysa kare atlama stratejisi (her 2. kareyi kullanma) denenebilir ancak top takibi zorlaşır.
- Gerçek zamanlı uyarılar gerekiyorsa düşük gecikmeli pipeline kurun: capture -> hızlı ön işleme -> olay skorlaması -> uyarı. Tam işlemi arka planda kaydederek detaylı özet sonradan oluşturulur.
- Sahaya göre eşik ayarları: amatör liglerde top daha yavaş, geniş toleranslar kullanın. Yarı profesyonel liglerde hız eşiğini yükseltin.
Kısa Pseudo-Kod Örneği
capture = VideoCapture(src) bg = createBackgroundSubtractorMOG2() while True: frame = read_frame() frame_warp = warpPerspective(frame, H) mask = bg.apply(frame_warp) mask = morph_clean(mask) blobs = findContours(mask) detect_players = light_detector(frame_warp) ball = track_ball(frame_warp, prev_ball) events = evaluate_events(blobs, ball, players) if events detected: save_segment(t-3s, t+5s) and annotate
Gerçek Dünya Örnekleri ve Yanılgılar
Bir amatör ligde test ettiğimde, top beyaz ve saha zemin kötü olduğunda Hough dönüşümü hatalı halkalar üretiyordu. Bu durumda top takibini renk + hareket kombinasyonuna çevirmek hatayı azalttı. Başka bir örnek; yağışlı sahada arka plan çıkarıcı sürekli yanlış pozitif üretiyordu. Çözüm: hareket eşiğini artırmak ve uzun süreli history ile stabil arka plan oluşturmak oldu.
Sonuç ve Özet
Ucuz bir kamera ve OpenCV ile lig koçları için etkili bir otomatik özet ve hata işaretleme sistemi kurmak mümkün. Doğru kamera yerleşimi, saha calibrasyonu, top/oyuncu takibi ve iyi tanımlanmış olay kuralları başarılı sonuçların anahtarıdır. Bu rehberde verdiğim 5 adım ve pratik ipuçları, prototip aşamasından faydalı bir analitik araca hızlıca geçmenizi sağlar.
Uygulamaya başlarken küçük bir pilot proje yapın: tek bir maç için tüm pipeline ı çalıştırıp olay eşiklerini ayarlayın. Ardından farklı hava, saha ve lig seviyelerinde parametreleri ince ayar yapın. Sorularınız olursa, kullandığınız kamera modeli, örnek video veya hedef olay tiplerine göre daha spesifik öneriler verebilirim.