Skip to content

esephaneli/ai-pullup-tracker

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 

Repository files navigation

🏋️ AI Pull-Up Tracker

Bilgisayar görüşüyle barfiks analizi — otomatik tekrar sayma ve form değerlendirme


Python MediaPipe OpenCV License

· Nasıl Çalışır · Hızlı Başlangıç · Sonuçlar · SSS


📖 Proje Hakkında

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.


🎬 Demo

Ö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.


🧠 Nasıl Çalışır

Video Frame ──→ Pose Tespiti ──→ Sinyal Filtre ──→ Rep Sayma ──→ Çıktı
                (MediaPipe)       (EMA α=0.4)    (State Machine)

1. Pose Tespiti

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ı

2. Sinyal Filtreleme (EMA)

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

3. State Machine ile Rep Sayma

┌───────┐     ┌────────────┐     ┌────────┐     ┌──────────┐
│ 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ı)

4. Kalibrasyon

İlk 60 frame boyunca hareket aralığını öğrenir. Bu sayede farklı kamera mesafeleri ve açıları için otomatik adapte olur.


🚀 Hızlı Başlangıç

Gereksinimler

  • Python 3.10+
  • Web kamerası veya barfiks videosu

Kurulum

# 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

Kullanım

# 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.


📊 Sonuçlar

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)
══════════════════════════════════════════

🎥 Video Çekim Rehberi

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

⚙️ Kalibrasyon & Ayarlar

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 filtreler

🔮 Tam Versiyon — Ek Özellikler

Bu 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.


🛠️ Kendi Versiyonunu Geliştir

Bu kodu başlangıç noktası olarak kullanarak farklı yönlere genişletebilirsin:

Farklı Egzersizler

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ı

Form Analizi Eklemek İçin İpuçları

  • 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

Sinyal İyileştirme

  • 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

🤝 Katkıda Bulunma

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!


📬 İletişim


Bu projeyi beğendiyseniz ⭐ vermeyi unutmayın!

About

ai-pullup-tracker demo

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages