from time import sleep from io import BytesIO import os import serial try: import numpy as np from picamera import PiCamera import cv2 except Exception as ex: print('[ Error ] some depandincies are missing\n'+ str(ex.args)) def init(): go = True print('Initilizing Camera and cascade components..') try: camera = PiCamera() camera.resolution = (640, 480) sleep(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 while True: #try: camera.capture('img.jpg') img = cv2.imread('img.jpg',1) gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.1, 4) 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] #try: #cv2.imwrite('train/'+str(j)+'.jpg',img) #print(j) #except Exception as ex: #print(ex) #print('Drawing on face ', i) 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) if cv2.waitKey(1) & 0xFF == ord('q'): cv2.destroyAllWindows() break #except: #print('[ Error ] Unexpected exception') #print('Closing') #break def train(number): train_path = 'train/' face_recognizer = cv2.createLBPHFaceRecognizer() images = [] labels = [] image_names = os.listdir(train_path) for image_name in image_names: if image_name.startswith("."): continue; image_path = train_path + image_name image = cv2.imread(image_path) gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) images.append(gray) labels.append(number) print('training') face_recognizer.train(images, np.array(labels)) face_recognizer.save('faces/hesham') def recognize(image): subjects = ['','Hesham','Saeed'] face_recognizer = cv2.createLBPHFaceRecognizer() face_recognizer.load('faces/test1') img = image.copy() label= face_recognizer.predict(img) print(label) if label[0] == 1 and int(label[1]) < 120: return 'Hesham' elif label[0] == 2 and int(label[1]) < 90: return 'Saeed' elif label[0] == 3 and int(label[1]) < 120: return 'Hesham2' else: return 'Unknown' def OpenShifter(): try: ser = serial.Serial('/dev/ttyUSB1',9600) #ser.open() ser.write('O') ser.close() except Exception as ex: print('[ Error ] Can not connect to Arduino at /dev/ttyUSB1 .. \n Trying /dev/ttyUSB0') 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/ttyUSB0') init()