Python Eye Blinker

Python Eye Blinker

Şbt 22, 2024 - 17:21
Eki 17, 2024 - 00:56
 0  85
Python Eye Blinker
Python Eye blinker
import cv2
import dlib
from imutils import face_utils
from scipy.spatial import distance

def eye_aspect_ratio(eye):
    # Göz oranını hesapla
    A = distance.euclidean(eye[1], eye[5])
    B = distance.euclidean(eye[2], eye[4])
    C = distance.euclidean(eye[0], eye[3])
    ear = (A + B) / (2.0 * C)
    return ear

EAR_THRESHOLD = 0.3  # Göz oranı eşiği
EAR_CONSEC_FRAMES = 3  # Göz kırpma tespiti için gereken çerçeve sayısı

# Dlib'den yüz belirleyici yükle
detector = dlib.get_frontal_face_detector()
predictor = dlib.shape_predictor("shape_predictor_68_face_landmarks.dat")

# Sol ve sağ göz için belirleyici indeksleri tanımla
(lstart, lend) = face_utils.FACIAL_LANDMARKS_IDXS["left_eye"]
(rstart, rend) = face_utils.FACIAL_LANDMARKS_IDXS["right_eye"]

# Video akışını başlat
vs = cv2.VideoCapture(0)
blink_count = 0  # Göz kırpma sayısını tut
blink_flag = False  # Göz kırpma bayrağı

while True:
    ret, frame = vs.read()  # Videodan bir çerçeve oku
    gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)  # Çerçeveyi gri tonlamaya çevir

    # Çerçevede yüzleri tespit et
    faces = detector(gray, 0)

    for face in faces:
        shape = predictor(gray, face)  # Yüz noktalarını tahmin et
        shape = face_utils.shape_to_np(shape)

        # Gözlerin koordinatlarını al
        left_eye = shape[lstart:lend]
        right_eye = shape[rstart:rend]

        # Sol ve sağ göz için göz oranını hesapla
        left_ear = eye_aspect_ratio(left_eye)
        right_ear = eye_aspect_ratio(right_eye)

        # Ortalama göz oranını hesapla
        average_ear = (left_ear + right_ear) / 2.0

        # Gözlerin dış hatlarını çiz
        left_eye_hull = cv2.convexHull(left_eye)
        right_eye_hull = cv2.convexHull(right_eye)
        cv2.drawContours(frame, [left_eye_hull], -1, (0, 255, 0), 1)
        cv2.drawContours(frame, [right_eye_hull], -1, (0, 255, 0), 1)

        # Göz kırpma tespiti
        if average_ear < EAR_THRESHOLD:
            if not blink_flag:  # Göz kırpma başladığında
                blink_count += 1  # Göz kırpma sayısını artır
                blink_flag = True  # Göz kırpma bayrağını ayarla
        else:
            blink_flag = False  # Göz açık olduğunda bayrağı sıfırla

    # Göz kırpma sayısını çerçeveye yaz
    cv2.putText(frame, "Hareketler: {}".format(blink_count), (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.7, (0, 0, 255), 2)

    # Çerçeveyi göster
    cv2.imshow("Frame", frame)

    # 'q' tuşuna basılırsa döngüyü kır
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Kaynakları serbest bırak
vs.release()
cv2.destroyAllWindows()

Kodun Açıklaması:

  1. Kütüphaneler:

    • cv2: OpenCV kütüphanesi, görüntü işleme için kullanılır.
    • dlib: Yüz tespiti ve yüz noktaları için kullanılır.
    • face_utils: Yüz noktalarını numpy dizisine dönüştürmek için kullanılır.
    • distance: İki nokta arasındaki mesafeyi hesaplamak için kullanılır.
  2. eye_aspect_ratio Fonksiyonu:

    • Göz oranını (EAR) hesaplar. Bu, gözün açılıp kapanmasını tespit etmek için kullanılır.
  3. Sabitler:

    • EAR_THRESHOLD: Göz oranı eşiği; bu değer altında göz kırpma olarak kabul edilir.
    • EAR_CONSEC_FRAMES: Göz kırpma tespitinin kararlılığı için gereken çerçeve sayısı.
  4. Yüz ve Göz Tespiti:

    • detector ve predictor ile yüz tespiti ve yüz noktalarının tahmini yapılır.
  5. Video Akışı:

    • cv2.VideoCapture(0): Kamera açılır ve video akışı başlatılır.
    • Sonsuz döngüde her bir çerçeve okunur, gri tonlamaya dönüştürülür ve yüzler tespit edilir.
  6. Göz Kırpma Tespiti:

    • Tespit edilen yüzlerdeki göz noktaları alınır ve göz oranları hesaplanır.
    • Eğer ortalama göz oranı eşiğin altındaysa göz kırpma sayısı artırılır.
  7. Sonuçların Görselleştirilmesi:

    • Gözlerin dış hatları çizilir ve toplam göz kırpma sayısı ekrana yazdırılır.
  8. Döngüden Çıkış:

    • 'q' tuşuna basıldığında döngü sonlandırılır ve kaynaklar serbest bırakılır.

Bu kod, yüz ve göz tespiti yaparak göz kırpma sayısını sayan bir sistem oluşturur.

Bu Yazıya Tepkin Nedir?

like

dislike

love

funny

angry

sad

wow