← Yazılara dön
28 Temmuz 2026 · 3 dk okuma

Neden çıktıyı gol değil, şut adayı diye etiketledim

Kalibre edilmemiş görüntüde top yörüngesinden olay çıkarımı, ve sınırı çıktının içinde adlandırmanın onu yokmuş gibi davranmaktan neden ucuz olduğu.

Amatör bir futbol maçının tek geniş açı kayıttan alınmış görüntüsünü işleyip oyuncuların gerçekten istediği şeyi döndüren bir hat geliştiriyorum: kendi golünün on beş saniyelik klibi, otomatik kesilmiş.

Görü kısmı zor kısım değil. YOLO oyuncuları ve topu buluyor. ByteTrack kimlikleri kareler arasında sabit tutuyor, böylece yarım saniye örtülen oyuncu geri geldiğinde yeni bir insan olarak sayılmıyor. Forma renginden KMeans iki takımı ayırıyor. Bunların hiçbiri yeni değil ve hepsi çalışıyor.

Zor olan, neyin olay sayılacağına karar vermek.

Olay, görünüşten değil yörüngeden

Golün görsel bir imzası yok. “Gol” anlamına gelen bir piksel deseni bulunmuyor. Güvenilir şekilde var olan şey, topun hareketindeki değişim: vurulduğunda sert hızlanır, görece düz bir hat izler, sonra ya durur ya yön değiştirir ya da kareden çıkar.

Yani dedektör topa bakmıyor. Kareler boyunca takip edilen ağırlık merkezinden hesaplanan topun zamana göre hızına bakıyor ve eşiğin üstündeki ani artışları işaretliyor. Bu sana şutları verir. Ama aynı zamanda uzaklaştırmaları, sert pasları ve ara sıra kötü bir taç atışını da verir; problem tam olarak bu.

Şutu uzaklaştırmadan ayırmak için kalenin nerede olduğunu bilmen gerekir. Kale ağzına göre hareket yönü ayırt edici özelliktir ve geometriyi bir kez elde ettikten sonra ucuzdur.

Elimde olmayan geometri

Örnek görüntüler elde ve gimbalde çekilmişti. Kamera hareket ediyor. Görüntü koordinatlarıyla saha koordinatları arasında sabit bir homografi yok ve karenin “kale” diyebileceğim sabit bir bölgesi yok.

Tahmin edebilirdim. Kale direklerini tespit et, düzlem uydur, kamera hareketini takip et, kare başına warp uygula. Bu tek başına gerçek bir proje ve prodüksiyonda var olmayan bir problemi çözüyor olurdu, çünkü prodüksiyonda kamera duvara vidalanıyor ve hiç hareket etmiyor.

Ben diğerini yaptım. Olay tespiti fonksiyonu bir kale bölgesi parametresi alıyor. Örnek görüntüde bu parametre yok ve fonksiyon çıktısını şut adayı diye etiketliyor. Sabit kurulumda bölgeyi bir kez veriyorsun ve aynı kod gol üretiyor.

Etiketin koddan önemli olması

Buradaki kod değişikliği önemsiz: bir opsiyonel argüman ve çıktıda farklı bir dize. Altındaki karar öyle değil.

Alternatif şuydu: hız eşiğini demo klipleri çoğunlukla gol çıkacak şekilde ayarla, çıktıya gol de ve teslim et. O sürüm daha iyi demo verir. Aynı zamanda mümkün olan en kötü anda, müşterinin karşısında, ayarın hiç görmediği bir görüntüde patlayan bir hata moduna sahiptir. Üstelik hatadan kod yazarak çıkamazsın, çünkü ayrımı yapmak için gereken bilgi girdide hiç yoktu.

Sınırı çıktının içinde adlandırmak üç iş yapıyor. Aşağı akıştaki hiç kimsenin sayıyı olmadığı bir şey sanmasına izin vermiyor. Özelliğin tamamlanması için neyin değişmesi gerektiğini belgeliyor. Ve sabit kamera geldiğinde iş, yeniden yazım değil bir konfigürasyon değeri oluyor.

Neyi farklı yapardım

Kale bölgesi parametresini, sınır belirginleştikten sonra eklemek yerine ilk gün imzaya yazardım. Bir kısıtın geleceğini bildiğin yere baştan boşluk bırakmak, sonradan oymaktan ucuz ve boşluk boşken hiçbir maliyeti yok.

Hattın geri kalanını aynen korurdum: tespit et, takip et, hareketten olay çıkar, olayın etrafından ffmpeg ile kes, tarayıcı dostu H.264’e kodla ve üstüne ince bir Streamlit arayüzü koy ki teknik olmayan biri video atıp klip alabilsin.

Dürüst özet

Uygulamalı bir görü sisteminde mühendisliğin çoğu modelde değil. Girdinin gerçekten içerdiği bilgiye bakarak çıktının neyi iddia etmesine izin verildiğine karar vermekte. Dürüst bir şut adayı, bazen taç atışı olan bir golden daha değerlidir.

görüntü işlemetakipByteTrackspor analitiği