import cv2
import time
import serial
import serial.tools.list_ports
my_serial = serial.Serial("COM7", baudrate=9600, timeout = 1.0)
time.sleep(2.0)
def send_buzzer(freq):
sendData = f"BUZZER={freq}\n"
my_serial.write( sendData.encode() )
def main():
cam = cv2.VideoCapture(0)
cam.set(3,640)
cam.set(4,480)
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')
sleep_count = 0
while( cam.isOpened() ):
_, image = cam.read()
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1,minNeighbors= 5,minSize=(50,50),
flags=cv2.CASCADE_SCALE_IMAGE)
if len(faces):
for(x, y, w, h) in faces:
cv2.rectangle(image,(x,y),(x+w,y+h),(255,0,0),2)
face_gray = gray[y:y+h, x:x+w]
face_color = image[y:y+h, x:x+w]
eyes = eye_cascade.detectMultiScale(face_gray, scaleFactor=1.2,
minNeighbors=10)
if len(eyes) == 0 :
if sleep_count < 1000:
sleep_count = sleep_count + 1
if sleep_count >= 1000:
print("BUZZ")
send_buzzer(1000)
else:
if sleep_count >= 20:
sleep_count = sleep_count - 20
send_buzzer(0)
for (ex, ey, ew, eh) in eyes:
cv2.rectangle(face_color, (ex,ey), (ex+ew,ey+eh), (0,255,0),2)
print(sleep_count)
cv2.imshow('result' , image)
if cv2.waitKey(10) == ord('p'):
break
cv2.destroyAllWindows()
if __name__ == '__main__':
ports = list(serial.tools.list_ports.comports())
for p in ports:
if 'Arduino Uno' in p.description:
print(f"{p}포트에 연결하였습니다.")
my_serial = serial.Serial(p.device, baudrate=9600, timeout=1.0)
time.sleep(2.0)
main()
my_serial.close()
추가할만한 코드 : 자리를 비웠을때 카운트가 올라가게 해서 일정 시간(5분)이 경과하면 부저가 올리게 하기