#!/usr/bin/python import cv2 import sys import numpy import os
for PIL import Image
size=4 fn_haar='haarcascade_frontalface_default.xml' fn_dir='att_faces'
(images,lables,names,id)=([],[],{},0) for(subdirs,dirs,files)in os.walk(fn_dir): for subdir in dirs: names[id]=subdir subjectpath=os.path.join(fn_dir,subdir) for filename in os.listdir(subjectpath): path=subjectpath+'/'+filename label=id images.append(cv2.imread(path,0)) lables.append(int(label))
id+=1
(im_width,im_height)=(112,92)
(images,lables)=[numpy.array(lis) for lis in [images,lables]]
#model=cv2.face.createEigenFaceRecognizer()
model=cv2.face.createFisherFaceRecognizer()
#model=cv2.face.createLBPHFaceRecognizer()
model.train(images,lables)
haar_cascade=cv2.CascadeClassifier(fn_haar)
webcam=cv2.VideoCapture(0)
while True:
(rval,frame)=webcam.read()
frame=cv2.flip(frame,1,0)
gray=cv2.cvtColor(frame,cv2.COLOR_BGR2GRAY)
mini=cv2.resize(gray,(gray.shape[1]//size,gray.shape[0]//size))
faces=haar_cascade.detectMultiScale(mini)
for i in range(len(faces)):
face_i=faces[i]
(x,y,w,h)=[v*size for v in face_i]
face=gray[y:y+h,x:x+w]
face_resize=cv2.resize(face,(im_width,im_height))
predicition = model.predict(face_resize)
cv2.rectangle(frame,(x,y),(x+w,y+h),(0,255,0),3)
if predicition[1]>x:
cv2.putText(frame,'%s - %.0f' % (names[predicition[0]],predicition[1]),(x-10,y-10),cv2.FONT_HERSHEY_PLAIN,1,(0,255,0))
else:
cv2.putText(frame,'UnKnown',(x-10,y-10),cv2.FAST_FEATURE_DETECTOR_THRESHOLD,1,(0,0,255))
cv2.imshow('Face Recognition',frame)
key=cv2.waitKey(10)
if key == 27:
break