import cv2 # Opencv kütüphanesi
import dlib
import pyttsx3 # Ses çalma kütüphanesi
from scipy.spatial import distance
import os
kamera = cv2.VideoCapture(0)
yuz_tanimlama = dlib.get_frontal_face_detector()
yuz_tanimlama_dosyasi = dlib.shape_predictor(os.path.dirname(__file__) + "\shape_predictor_68_face_landmarks.dat")
def fnkGozTanimla(goz):
a = distance.euclidean(goz[1], goz[5])
b = distance.euclidean(goz[2], goz[4])
c = distance.euclidean(goz[0], goz[3])
goz_orani = (a+b)/(2*c)
return goz_orani
def fnkKonus(yazi):
sesCal = pyttsx3.init()
sesCal.setProperty("rate", 130)
sesler = sesCal.getProperty('voices')
sesCal.setProperty('voice', sesler[0].id)
sesCal.say(yazi)
sesCal.runAndWait()
while True:
null, img = kamera.read()
gray_scale = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
yuzler = yuz_tanimlama(gray_scale)
for yuz in yuzler:
yuz_isaretleri = yuz_tanimlama_dosyasi(gray_scale, yuz)
solGoz = []
sagGoz = []
# Sag Göz İçin
for n in range(42, 48):
x = yuz_isaretleri.part(n).x
y = yuz_isaretleri.part(n).y
sagGoz.append((x, y))
sonrakiNokta = n+1
if n == 47:
sonrakiNokta = 42
x2 = yuz_isaretleri.part(sonrakiNokta).x
y2 = yuz_isaretleri.part(sonrakiNokta).y
cv2.line(img, (x, y), (x2, y2), (0, 255, 0), 1)
# Sol Göz İçin
for n in range(36, 42):
x = yuz_isaretleri.part(n).x
y = yuz_isaretleri.part(n).y
solGoz.append((x, y))
sonrakiNokta = n+1
if n == 41:
sonrakiNokta = 36
x2 = yuz_isaretleri.part(sonrakiNokta).x
y2 = yuz_isaretleri.part(sonrakiNokta).y
cv2.line(img, (x, y), (x2, y2), (255, 255, 0), 1)
oran = (fnkGozTanimla(solGoz)+fnkGozTanimla(sagGoz))/2
oran = round(oran, 2)
if oran < 0.25:
cv2.putText(img, "Yorgunluk Belirtisi Saptandi.", (50, 100),
cv2.FONT_HERSHEY_PLAIN, 2, (21, 56, 210), 3)
cv2.putText(img, "Dikkat Uyanmalisin!", (50, 450),
cv2.FONT_HERSHEY_PLAIN, 2, (21, 56, 212), 3)
fnkKonus("Dikkat Uyanmalisin!")
cv2.imshow("Yorgunluk / Uykusuzluk Ölçer", img)
if(cv2.waitKey(1) & 0xFF== ord('q')):
break
kamera.release()
cv2.destroyAllWindows()
Veri dosyası yukarıdaki kodları kaydettiğiniz klasörün içinde olsun.
Yukarıdaki örnekte “sesler[0].id” kodu 0 id numarasına sahip sesi kullanır.
Aşağıdaki kod bilgisayarınızda kullanabileceğiniz sesleri listeler. Yukarıdaki kodda 0 sayısını değiştirerek var olan sesleri deneyebilirsiniz.
import pyttsx3
sesCal = pyttsx3.init()
sesler = sesCal.getProperty('voices')
for ses in sesler:
print("Voice:")
print(" - ID: %s" % ses.id)
print(" - İsim: %s" % ses.name)
print(" - Dil: %s" % ses.languages)
print(" - Cinsiyet: %s" % ses.gender)
print(" - Yaş: %s" % ses.age)