Macademia'nın robotik ve mühendislik programı · ücretsiz seviye tespiti ve kişisel öğrenme yolu

Sağlık · Yüz noktaları (Face Mesh)

❤️ Kameradan nabız (rPPG)

Yüz rengindeki görünmez değişimden kalp atışını tahmin et.

Kalp her attığında yüzdeki kılcal damarlara biraz daha kan gelir ve deri, gözle görülmeyecek kadar az, yeşil ışığı daha çok soğurur. Uzaktan fotopletismografi (rPPG) bu küçük değişimi kamerayla ölçer. Sinyal çok zayıftır (piksel değerinde 1–2 birim), bu yüzden binlerce pikselin ortalaması alınır ve sinyal işleme yapılır.

Not: Eğitim amaçlıdır, tıbbi değildir. Teşhis ya da sağlık kararı için kullanma; ölçüm ışığa, harekete ve ten rengine göre hatalı olabilir.

Durum: …

Eşikler

Örnek sahne: çizilmiş bir yüz, derisinin yeşil kanalı gözle görülmeyecek kadar az (±2 birim) 68 atım/dk ile değişir; üstüne ışık titremesi, yavaş parlaklık kayması ve küçük baş hareketi eklenmiştir. Ölçüm, çizilen piksellerden gerçekten yapılır.

Nasıl çalışıyor?

  1. Nokta bulma: MediaPipe Face Mesh ile 478 yüz noktası; alın noktası (151) çevresinde, yüz genişliğinin %36 × %14'ü kadar bir ölçüm alanı (ROI). Alın, az hareket eden ve saçsız bir bölgedir.
  2. Ham sinyal: her karede ROI içindeki piksellerin yeşil kanal ortalaması ve zamanı kaydedilir.
  3. Ön işleme: 30 Hz'e eşit aralıklı yeniden örnekleme, normalize etme (g / ortalama − 1), 0,7–3 Hz bant geçiren süzgeç (42–180 atım/dk dışını atar; ileri-geri uygulanır, faz kaymaz).
  4. Frekans analizi: Hann pencereli Fourier dönüşümü ile 0,5 atım/dk adımlarla güç spektrumu; en yüksek tepe parabolik aradeğerlemeyle inceltilir. BPM = tepe frekansı × 60.
  5. Güven: tepe gücünün bandın geri kalanına oranı (SNR). SNR düşükse sonuç gösterilir ama "zayıf sinyal" uyarısı verilir.

Kendin dene

Kamera modunda iyi ışıkta, kıpırdamadan 15 sn bekle; sonra parmağını bileğine koyup 15 sn say ve ×4 yap. Başını sallarken ya da ışığı kısınca SNR'ye ne oluyor? Analiz penceresini 6 sn'ye indir: sonuç daha hızlı ama daha oynak.

Python karşılığı (OpenCV / MediaPipe)

nabiz_rppg.py
  1. import cv2, numpy as np, mediapipe as mp
  2. from scipy.signal import butter, filtfilt
  3. face = mp.solutions.face_mesh.FaceMesh(max_num_faces=1)
  4. cap = cv2.VideoCapture(0); FS = cap.get(cv2.CAP_PROP_FPS) or 30
  5. greens = []
  6. while cap.isOpened():
  7. ok, frame = cap.read()
  8. if not ok: break
  9. h, w = frame.shape[:2]
  10. res = face.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
  11. if res.multi_face_landmarks:
  12. lm = res.multi_face_landmarks[0].landmark
  13. fw = abs(lm[454].x - lm[234].x) * w # yüz genişliği
  14. cx, cy = lm[151].x * w, lm[151].y * h # alın
  15. x0, y0 = int(cx - 0.18 * fw), int(cy - 0.07 * fw)
  16. roi = frame[y0:y0 + int(0.14 * fw), x0:x0 + int(0.36 * fw)]
  17. greens.append(roi[:, :, 1].mean()) # yeşil kanal (BGR'de 1)
  18. if len(greens) >= FS * 10:
  19. x = np.array(greens[-int(FS * 10):]); x = x / x.mean() - 1
  20. b, a = butter(2, [0.7, 3.0], btype="band", fs=FS)
  21. y = filtfilt(b, a, x) * np.hanning(len(x))
  22. freqs = np.fft.rfftfreq(len(y) * 8, 1 / FS); power = np.abs(np.fft.rfft(y, len(y) * 8)) ** 2
  23. band = (freqs >= 0.7) & (freqs <= 3.0)
  24. bpm = freqs[band][power[band].argmax()] * 60
  25. cv2.putText(frame, f"{bpm:.0f} BPM (tibbi degil)", (20, 40), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2) # not medical
  26. cv2.imshow("rppg", frame)
  27. if cv2.waitKey(1) == 27: break

🔒 Kamera görüntüsü yalnız bu cihazda işlenir; hiçbir yere gönderilmez ve kaydedilmez. Sekmeden ya da sayfadan çıkınca kamera kapanır.

Esc
  • PanelAna sayfaSayfa
  • ModüllerTüm modüllerSayfa
  • ParçalarParça ansiklopedisiSayfa
  • Mühendislik yoluBüyükler için robotik: 128 parça, 7 seviyeSayfa
  • Robotik dersi (ESOF 323)Üniversite robotik dersi, 14 haftaSayfa
  • Drone dersiBüyükler için: parça, simülasyon, yazılım; 10 üniteSayfa
  • Blok atölyesiSerbest blok programlamaAraç
  • Devre laboratuvarıSanal Arduino ve devreAraç
  • Robot arenasıSanal robot sürüşüAraç
  • OyunlarBloklarla 8 öğretici oyunAraç
  • Mikro Kart atölyesiSanal LED kartı bloklarla programlaAraç
  • Robot atölyesiMikro Kart'ı robota tak, bloklarla görev yapAraç