Bilgisayar görüşüyle barfiks analizi — otomatik tekrar sayma ve form değerlendirme
· Nasıl Çalışır · Hızlı Başlangıç · Sonuçlar · SSS
AI Pull-Up Tracker, tek bir video kaydından barfiks tekrarlarını otomatik sayan ve her tekrarı analiz eden bir bilgisayar görüşü sistemidir.
MediaPipe Pose ile vücuttaki 33 anahtar noktayı takip eder, state machine algoritması ile tekrarları güvenilir şekilde sayar ve form kalitesini değerlendirir.
📌 Not: Bu repo, projenin sadeleştirilmiş eğitim versiyonunu içerir. Temel pipeline'ı (pose tespiti → sinyal filtreleme → rep sayma) öğrenmek ve kendi versiyonunuzu geliştirmek için tasarlanmıştır.
Tam proje ayrıca form skorlama (0–100), kipping tespiti, omuz simetri analizi, split-screen görselleştirme ve detaylı istatistik raporu içerir.
| Özellik | Değer |
|---|---|
| Tespit edilen rep | 7 |
| Ortalama rep süresi | 1.212s |
| En hızlı tekrar | Rep 3 — 0.808s |
| En yavaş tekrar | Rep 1 — 2.188s |
| Form skoru (tam versiyon) | 65/100 |
Rep 1'in en yavaş olması ilginç — vücut henüz ısınmamış. 3. tekrarda zirve performans, sonrasında kademeli düşüş. Displacement grafiğinde bu pattern net olarak görünüyor.
Video Frame ──→ Pose Tespiti ──→ Sinyal Filtre ──→ Rep Sayma ──→ Çıktı
(MediaPipe) (EMA α=0.4) (State Machine)
MediaPipe Pose Landmarker ile her frame'de vücuttaki 33 noktayı tespit eder. Barfiks analizi için kritik olan 6 noktayı kullanır:
Omuz (L/R) → Dikey hareket takibi
Dirsek (L/R) → Kol açısı hesaplama
Bilek (L/R) → Bar referansı
Raw landmark verileri gürültülü olabilir. Exponential Moving Average filtresi bunu düzeltir:
filtered = α × raw + (1-α) × previous
# α = 0.4 → gürültü ile duyarlılık arasında optimum denge┌───────┐ ┌────────────┐ ┌────────┐ ┌──────────┐
│ IDLE │ ──→ │ PULLING_UP │ ──→ │ AT_TOP │ ──→ │ LOWERING │
└───────┘ └────────────┘ └────────┘ └──────────┘
▲ │
└────────────────────────────────────────────────┘
+1 rep ✓
Neden state machine?
- Basit threshold karşılaştırması yarım tekrarları sayar — state machine saymaz
- Her durumun net geçiş kuralları var, gürültüden etkilenmez
- Rep yalnızca tam iniş tamamlandığında sayılır (yarım çekim koruması)
İlk 60 frame boyunca hareket aralığını öğrenir. Bu sayede farklı kamera mesafeleri ve açıları için otomatik adapte olur.
- Python 3.10+
- Web kamerası veya barfiks videosu
# Repo'yu klonla
git clone https://github.com/esephaneli/ai-pullup-tracker.git
cd ai-pullup-tracker
# Bağımlılıkları yükle
pip install mediapipe opencv-python numpy
# Çalıştır
python main.py --input video.mp4# Temel kullanım (ekranda göster)
python main.py --input barfiks.mp4
# Çıktı videosu kaydet
python main.py --input barfiks.mp4 --output sonuc.mp4💡 İpucu: Model dosyası (~30MB) ilk çalıştırmada otomatik indirilir.
Sistemin kendi test videom üzerindeki çıktısı:
══════════════════════════════════════════
SONUÇLAR
══════════════════════════════════════════
Toplam Rep: 7
Ortalama Süre: 1.212s
En Hızlı: Rep 3 — 0.808s
En Yavaş: Rep 1 — 2.188s
Form Skoru: 65/100 (tam versiyon)
══════════════════════════════════════════
En iyi sonuçlar için:
| Kriter | Önerilen |
|---|---|
| Kamera açısı | Arkadan, tüm vücut görünecek şekilde |
| Mesafe | Baş ve ayaklar kadraj içinde |
| Aydınlatma | İyi aydınlatılmış ortam |
| Kamera | Sabit (tripod önerilir) |
| FPS | 30+ |
| Kıyafet | Arka planla kontrast oluşturan renkler |
Eğer rep sayımı doğru değilse pullup_tracker_simplified.py içindeki eşik değerlerini ayarlayın:
UP_THRESHOLD = 0.35 # Düşür → "yukarıda" algılaması kolaylaşır
DOWN_THRESHOLD = 0.70 # Yükselt → "aşağıda" algılaması kolaylaşır
CALIBRATION_FRAMES = 60 # İlk 2 saniyelik kalibrasyon penceresi
MIN_REP_DURATION = 0.5 # Çok hızlı "rep"leri filtrelerBu repo'daki sadeleştirilmiş versiyonun üzerine, tam proje şunları içerir:
| Özellik | Açıklama |
|---|---|
| 🎯 Form Skorlama | Her rep için 0–100 puan (4 kriter) |
| 🔄 Kipping Tespiti | Kalça açısı değişim hızını analiz eder |
| ⚖️ Simetri Analizi | Sol/sağ omuz Y farkını ölçer |
| 📈 Canlı Grafik | Split-screen: video + displacement grafiği |
| 🎨 Renk Kodlu İskelet | Yeşil=iyi form, Kırmızı=kötü form |
| 📋 Detaylı Rapor | Rep bazlı süre, form, hız istatistikleri |
| 😴 Yorgunluk Analizi | Hangi rep'te performans düştüğünü gösterir |
Tam proje hakkında sorularınız varsa LinkedIn üzerinden iletişime geçebilirsiniz.
Bu kodu başlangıç noktası olarak kullanarak farklı yönlere genişletebilirsin:
Squat → Kalça Y koordinatı + diz açısı
Deadlift → Omuz Y + kalça açısı
Push-up → Omuz Y (yere yakın kamera)
Shoulder Press → Bilek Y koordinatı
- Eklem açısı: 3 landmark arasındaki açıyı hesapla (ör: omuz-dirsek-bilek → dirsek açısı)
- Kipping: Kalça açısının frame bazlı değişim hızını izle
- Simetri: Sol ve sağ taraf landmark Y farkını karşılaştır
- EMA yerine Butterworth low-pass filtre dene
- Birden fazla landmark'ın ağırlıklı ortalamasını al
- Kalman filtresi daha sofistike ama bu proje için overkill olabilir
Sorularınız için linkedin üzerinden bana danışabilirsiniz.
Eğer bu projeyi kendi egzersizinizde adapte ettiyseniz, sonuçlarınızı paylaşın — görmek isterim!
- LinkedIn: [www.linkedin.com/in/emrehan-şephanelioğlu-101a22235]
- E-posta: [e.sephanelioglu@gmail.com]
Bu projeyi beğendiyseniz ⭐ vermeyi unutmayın!