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

Güvenlik · Vücut noktaları (Pose)

🚧 Bölge ihlali ve gece kamerası

Depo, şantiye, raylı alan: yasak bölgeye giren kişiyi işaretle.

Güvenlik kameralarının "sanal çit" özelliği: görüntüye bir çokgen çizilir, bir insan o alana girerse alarm verilir. Burada kişiyi vücut noktalarından buluruz ve ayaklarının nerede olduğuna bakarız: kafası bölgenin üstünde görünen ama ayağı dışarıda olan kişi içeride sayılmaz.

Durum: …

Eşikler

Örnek sahne: gece, bir depo avlusunda yürüyen sentetik bir kişi. Gece modu, sahnenin piksellerine gerçekten uygulanır.

Nasıl çalışıyor?

  1. Görüntü iyileştirme (gece modu): her piksel gri tona çevrilir (0,299R + 0,587G + 0,114B), kazançla çarpılır ve gama (1/1,6) uygulanır. Karanlık sahnede ayrıntı ortaya çıkar.
  2. Nokta bulma: MediaPipe Pose ile 33 nokta; görünür noktaların kutusu kişinin çerçevesidir.
  3. Özellik: ayak noktası = iki bileğin (27, 28) ortası; bilekler görünmüyorsa kutunun alt ortası.
  4. Kural: ışın atma (ray casting) testi. Noktadan sağa çekilen yatay ışın çokgen kenarlarını tek sayıda keserse nokta içeridedir.
  5. Kararlılık: 3 kare üst üste içeride → İHLAL; 8 kare üst üste dışarıda → temiz. Bölgede geçen süre ve ihlal sayısı tutulur.

Kendin dene

Bölgeyi kendin çiz: "Bölgeyi çiz" düğmesine bas, görüntüye tıklayarak köşeleri ekle, "Bitti" de. İçbükey (L biçimli) bir bölge dene. Gece modunu kapatıp aç: karanlıkta model ve sen neyi daha iyi görüyorsunuz?

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

bolge_ihlali.py
  1. import cv2, numpy as np, mediapipe as mp
  2. zone = np.array([[180, 300], [460, 280], [560, 460], [120, 460]], np.int32) # piksel
  3. pose = mp.solutions.pose.Pose(model_complexity=0)
  4. cap = cv2.VideoCapture(0)
  5. inside_frames, alarm = 0, False
  6. lut = np.array([255 * min(1, i * 3 / 255) ** (1 / 1.6) for i in range(256)], np.uint8)
  7. while cap.isOpened():
  8. ok, frame = cap.read()
  9. if not ok: break
  10. gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
  11. night = cv2.cvtColor(cv2.LUT(gray, lut), cv2.COLOR_GRAY2BGR) # gece modu: kazanç + gama
  12. h, w = gray.shape
  13. res = pose.process(cv2.cvtColor(frame, cv2.COLOR_BGR2RGB))
  14. inside = False
  15. if res.pose_landmarks:
  16. lm = res.pose_landmarks.landmark
  17. foot = (int((lm[27].x + lm[28].x) / 2 * w), int((lm[27].y + lm[28].y) / 2 * h)) # bileklerin ortası
  18. inside = cv2.pointPolygonTest(zone, foot, False) >= 0 # ışın atma testi
  19. inside_frames = inside_frames + 1 if inside else 0
  20. alarm = inside_frames >= 3
  21. cv2.polylines(night, [zone], True, (0, 0, 255) if alarm else (0, 255, 255), 2)
  22. cv2.imshow("zone", night)
  23. 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ç