from time import sleep from io import BytesIO import os import serial import sys import json try: import numpy as np from picamera import PiCamera from picamera.array import PiRGBArray import cv2 except Exception as ex: print('[ Error ] some depandincies are missing\n'+ str(ex.args)) sys.exit() def init(): go = True print('Initilizing Camera and cascade components..') try: camera = PiCamera() camera.resolution = (640, 480) sleep(0.2) print('[ OK ] Camera') except: print('[ Error ] Can not initialize PiCamera') go = False try: face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') sleep(1) print('[ OK ] CascadeClassifier') except: print('[ Error ] Can not load cascade File') go = False if (go): print('Starting Photo loop..') start(camera, face_cascade) else: print('closing') #else: #print('Sensors not Satisfied') def start( camera, face_cascade): j = 0 rawCapture = PiRGBArray(camera) #camera.framerate = 32 #rawCapture = PiRGBArray(camera, size=(640, 480)) #for frame in camera.capture_continuous(rawCapture, format="bgr", use_video_port=True): while 1: #try: #camera.capture('img.jpg') #img = cv2.imread('img.jpg',1) camera.capture(rawCapture, format="bgr") img = rawCapture.array gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.2,5) i = 0; for (x,y,w,h) in faces: i += 1 j += 1 roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] person = recognize(roi_gray) if person == 'Hesham' or person == 'Saeed': OpenShifter() print('Sending to Arduino!') cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) cv2.putText(img, person, (x, y), cv2.FONT_HERSHEY_PLAIN, 1.7, (255, 0, 0), 2) cv2.imshow('image',img) cv2.waitKey(100) rawCapture.truncate(0) if cv2.waitKey(1) & 0xFF == ord('q'): cv2.destroyAllWindows() break #except: #print('[ Error ] Unexpected exception') #print('Closing') #break def recognize(image): names = loadNames() face_recognizer = cv2.createLBPHFaceRecognizer() face_recognizer.load('faces/m') img = image.copy() label= face_recognizer.predict(img) print(label) if label[1] > 120: return 'unknown' else: return names[label[0]] def OpenShifter(): try: ser = serial.Serial('/dev/ttyUSB0',9600) #ser.open() ser.write('O') ser.close() except Exception as ex: print('[ Error ] Can not connect to Arduino at /dev/ttyUSB1 ..') def loadNames(): with open("faces/names.json", "r") as read_file: data = json.load(read_file) return list(data) init()