Python El İzleme Modülü (Python Hand Tracking)

Python El İzleme Modülü (Python Hand Tracking)

Ara 3, 2023 - 22:17
Eki 17, 2024 - 19:42
 0  123
Python El İzleme Modülü (Python Hand Tracking)
Python el takibi
from cvzone.HandTrackingModule import HandDetector
import cv2

# Video yakalamak için webcam'i başlat
# '2', bilgisayarınıza bağlı üçüncü kamerayı belirtir; '0' genellikle yerleşik kamerayı ifade eder
cap = cv2.VideoCapture(0)

# Belirtilen parametrelerle HandDetector sınıfını başlat
detector = HandDetector(staticMode=False, maxHands=2, modelComplexity=1, detectionCon=0.5, minTrackCon=0.5)

# Webcam'den sürekli olarak kare al
while True:
    # Webcam'den her kareyi yakala
    # 'success', kare başarıyla yakalanırsa True olur, 'img' ise kareyi içerir
    success, img = cap.read()

    # Mevcut karede elleri bul
    # 'draw' parametresi, görüntü üzerinde işaret noktalarını ve el hatlarını çizer
    # 'flipType' parametresi, görüntüyü ters çevirerek bazı tespitleri kolaylaştırır
    hands, img = detector.findHands(img, draw=True, flipType=True)

    # Herhangi bir el tespit edilip edilmediğini kontrol et
    if hands:
        # Tespit edilen ilk el için bilgi
        hand1 = hands[0]  # İlk tespit edilen eli al
        lmList1 = hand1["lmList"]  # İlk elin 21 işaret noktasının listesi
        bbox1 = hand1["bbox"]  # İlk elin etrafındaki sınırlayıcı kutu (x,y,w,h koordinatları)
        center1 = hand1['center']  # İlk elin merkez koordinatları
        handType1 = hand1["type"]  # İlk elin türü ("Sol" veya "Sağ")

        # İlk el için yukarıda olan parmak sayısını say
        fingers1 = detector.fingersUp(hand1)
        print(f'H1 = {fingers1.count(1)}', end=" ")  # Yukarıda olan parmak sayısını yazdır

        # İlk elin belirli işaret noktaları arasındaki mesafeyi hesapla ve görüntüye çiz
        length, info, img = detector.findDistance(lmList1[8][0:2], lmList1[12][0:2], img, color=(255, 0, 255),
                                                  scale=10)

        # İkinci elin tespit edilip edilmediğini kontrol et
        if len(hands) == 2:
            # İkinci el için bilgi
            hand2 = hands[1]
            lmList2 = hand2["lmList"]
            bbox2 = hand2["bbox"]
            center2 = hand2['center']
            handType2 = hand2["type"]

            # İkinci el için yukarıda olan parmak sayısını say
            fingers2 = detector.fingersUp(hand2)
            print(f'H2 = {fingers2.count(1)}', end=" ")

            # Her iki elin işaret parmakları arasındaki mesafeyi hesapla ve görüntüye çiz
            length, info, img = detector.findDistance(lmList1[8][0:2], lmList2[8][0:2], img, color=(255, 0, 0),
                                                      scale=10)

        print(" ")  # Yazdırılan çıktının okunabilirliği için yeni satır

    # Görüntüyü bir pencerede görüntüle
    cv2.imshow("Görüntü", img)

    # Pencereyi açık tut ve her kare için güncelle; kareler arasında 1 milisaniye bekle
    cv2.waitKey(1)

Kodun Açıklaması:

  1. Modül İçe Aktarımı: cvzone kütüphanesinden HandDetector sınıfı ve OpenCV'nin cv2 modülü içe aktarılır. HandDetector, elle izleme işlevselliği sağlar.

  2. Video Yakalama: Webcam'den video akışı başlatılır. cv2.VideoCapture(2) ile üçüncü kamera açılır. 0 ile yerleşik kamera açılabilir.

  3. HandDetector Sınıfı: HandDetector sınıfı, ellerin tespiti için belirli parametrelerle başlatılır. staticMode elle tespit modunu belirler, maxHands maksimum tespit edilecek el sayısını belirler, detectionCon ve minTrackCon ise tespit ve takip güvenilirlik değerlerini ayarlar.

  4. Sonsuz Döngü: Sonsuz bir döngü içinde webcam'den kareler alınır:

    • Her kare yakalanır ve success değişkeni, yakalamanın başarılı olup olmadığını belirtir.
    • findHands yöntemi ile mevcut karede eller tespit edilir ve görüntü üzerinde işaret noktaları çizilir.
  5. Ellerin Analizi:

    • Eğer bir veya iki el tespit edilirse, ilk elin bilgileri alınır (işaret noktaları, sınırlayıcı kutu, merkez noktası, el türü).
    • İlk elin yukarıda olan parmak sayısı sayılır ve konsola yazdırılır.
    • İlk elin belirli işaret noktaları (örneğin, baş parmak ve işaret parmağı) arasındaki mesafe hesaplanır.
  6. İkinci Elin Kontrolü: Eğer ikinci bir el tespit edilirse, benzer bilgiler ikinci el için alınır ve yukarıda olan parmak sayısı yazdırılır. Her iki elin işaret parmakları arasındaki mesafe de hesaplanır.

  7. Görüntü Gösterimi: Tüm işlemler tamamlandıktan sonra görüntü bir pencerede gösterilir. cv2.waitKey(1) ile her kare arasında 1 milisaniye beklenir.

Bu kod, webcam üzerinden gerçek zamanlı olarak elleri tespit eder, parmak sayısını hesaplar ve belirli noktalar arasındaki mesafeleri gösterir.

Bu Yazıya Tepkin Nedir?

like

dislike

love

funny

angry

sad

wow