Compare commits
	
		
			2 Commits
		
	
	
		
			master
			...
			webcam-sup
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 617bb779c0 | |||
| 83de5c2894 | 
@ -1 +1 @@
 | 
				
			|||||||
### Python code to run in Raspberry Pi with PiCamera to recognize certin faces.
 | 
					### Python code to run in Raspberry Pi with PiCamera to recognize certin faces and send a Serial signal 'o' to be received by arduino. 
 | 
				
			||||||
							
								
								
									
										77
									
								
								main.py
									
									
									
									
									
								
							
							
						
						
									
										77
									
								
								main.py
									
									
									
									
									
								
							@ -7,28 +7,51 @@ import sys
 | 
				
			|||||||
import json
 | 
					import json
 | 
				
			||||||
import datetime
 | 
					import datetime
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					piCamAvailable = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
try:
 | 
					try:
 | 
				
			||||||
    import numpy as np
 | 
					    import numpy as np
 | 
				
			||||||
    from picamera import PiCamera
 | 
					    from picamera import PiCamera
 | 
				
			||||||
    from picamera.array import PiRGBArray
 | 
					    from picamera.array import PiRGBArray
 | 
				
			||||||
    import cv2
 | 
					    piCamAvailable = True
 | 
				
			||||||
 | 
					
 | 
				
			||||||
except Exception as ex:
 | 
					except Exception as ex:
 | 
				
			||||||
    print('[ Error ] some depandincies are missing\n'+ str(ex.args))
 | 
					    print('[ Error ] some depandincies are missing\n'+ str(ex.args))
 | 
				
			||||||
 | 
					    piCamAvailable = False;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					try:
 | 
				
			||||||
 | 
					    import cv2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					except Exception as ex:
 | 
				
			||||||
 | 
					    print('Could not load OpenCV\Closing')
 | 
				
			||||||
    sys.exit()
 | 
					    sys.exit()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def init():
 | 
					def init():
 | 
				
			||||||
	go = True
 | 
						go = True
 | 
				
			||||||
	print('Initilizing..')
 | 
						piCam = False
 | 
				
			||||||
	try:
 | 
						WebCam = False
 | 
				
			||||||
		camera = PiCamera()
 | 
						print('Initilizing Camera ..')
 | 
				
			||||||
		camera.resolution = (640, 480)
 | 
						if piCamAvailable:
 | 
				
			||||||
		sleep(0.2)
 | 
							try:
 | 
				
			||||||
		print('[ OK ] Camera')
 | 
								camera = PiCamera()
 | 
				
			||||||
	except:
 | 
								camera.resolution = (640, 480)
 | 
				
			||||||
		print('[ Error ] Can not initialize PiCamera')
 | 
								go = True
 | 
				
			||||||
		go = False
 | 
								piCam = True
 | 
				
			||||||
 | 
								print('[ OK ] Started PiCamera')
 | 
				
			||||||
 | 
							except:
 | 
				
			||||||
 | 
								print('[ Warning ] Could not start PiCamera. Trying Webcam.. ')
 | 
				
			||||||
 | 
								piCam = False
 | 
				
			||||||
 | 
								go = False
 | 
				
			||||||
 | 
						else:
 | 
				
			||||||
 | 
							try:
 | 
				
			||||||
 | 
								camera = cv2.VideoCapture()
 | 
				
			||||||
 | 
								print('[ OK ] WebCamera')
 | 
				
			||||||
 | 
								go = True
 | 
				
			||||||
 | 
								WebCam = True
 | 
				
			||||||
 | 
							except Exception as ex:
 | 
				
			||||||
 | 
								print('[ Error ] Could not start Webcam.. \nExiting')
 | 
				
			||||||
 | 
								go = False
 | 
				
			||||||
 | 
						sleep(0.2)
 | 
				
			||||||
	try:
 | 
						try:
 | 
				
			||||||
		face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 | 
							face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 | 
				
			||||||
		sleep(1)
 | 
							sleep(1)
 | 
				
			||||||
@ -41,30 +64,42 @@ def init():
 | 
				
			|||||||
	except OSError as ex:
 | 
						except OSError as ex:
 | 
				
			||||||
		print('Found (unknown) folder')
 | 
							print('Found (unknown) folder')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (go):
 | 
						if go:
 | 
				
			||||||
		print('Starting Photo loop..')
 | 
							print('Starting Photo loop..')
 | 
				
			||||||
		print('Known people are '+str(loadNames()))
 | 
							print('Known people are '+str(loadNames()))
 | 
				
			||||||
		start(camera, face_cascade)
 | 
							start(camera, face_cascade, WebCam)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	else:
 | 
						else:
 | 
				
			||||||
		print('closing')
 | 
							print('closing')
 | 
				
			||||||
 | 
					
 | 
				
			||||||
def start( camera, face_cascade):
 | 
					def start( camera, face_cascade, WebCam):
 | 
				
			||||||
	j = 0
 | 
						j = 0
 | 
				
			||||||
	rawCapture = PiRGBArray(camera)
 | 
						if not WebCam:
 | 
				
			||||||
	face_recognizer = cv2.createLBPHFaceRecognizer()
 | 
							rawCapture = PiRGBArray(camera)
 | 
				
			||||||
	face_recognizer.load('faces/h')
 | 
						# face_recognizer = cv2.face.LBPHFaceRecognizer_create() #cv2.face.createLBPHFaceRecognizer()
 | 
				
			||||||
 | 
						face_recognizer = cv2.face_LBPHFaceRecognizer('faces/h')
 | 
				
			||||||
 | 
						# face_recognizer.read('faces/h') # Try on Pi
 | 
				
			||||||
 | 
					    ##WIP
 | 
				
			||||||
 | 
						try:
 | 
				
			||||||
 | 
							face_recognizer.load('faces/h')
 | 
				
			||||||
 | 
						except:
 | 
				
			||||||
 | 
							pass
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	names = loadNames()
 | 
						names = loadNames()
 | 
				
			||||||
	while 1:
 | 
						while 1:
 | 
				
			||||||
		try:
 | 
							try:
 | 
				
			||||||
			camera.capture(rawCapture, format="bgr")
 | 
								if not WebCam:
 | 
				
			||||||
 | 
									camera.capture(rawCapture, format="bgr")
 | 
				
			||||||
 | 
									img = rawCapture.array
 | 
				
			||||||
 | 
								else:
 | 
				
			||||||
 | 
									ret, img = camera.read()
 | 
				
			||||||
		except:
 | 
							except:
 | 
				
			||||||
			print('[ Error ] Can not capture image. Restarting..')
 | 
								print('[ Error ] Can not capture image. Restarting..')
 | 
				
			||||||
			init()
 | 
								init()
 | 
				
			||||||
		img = rawCapture.array
 | 
							#img = rawCapture.array
 | 
				
			||||||
		gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 | 
							gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
 | 
				
			||||||
		faces = face_cascade.detectMultiScale(gray, 1.3,5)
 | 
							faces = face_cascade.detectMultiScale(gray, 1.3,5)
 | 
				
			||||||
		i = 0
 | 
							i = 0;
 | 
				
			||||||
		for (x,y,w,h) in faces:
 | 
							for (x,y,w,h) in faces:
 | 
				
			||||||
			i += 1
 | 
								i += 1
 | 
				
			||||||
			j += 1
 | 
								j += 1
 | 
				
			||||||
@ -110,8 +145,6 @@ def recognize(image,face_recognizer, names):
 | 
				
			|||||||
		print(str(label) + ' >>'+names[label[0]])
 | 
							print(str(label) + ' >>'+names[label[0]])
 | 
				
			||||||
		return names[label[0]]
 | 
							return names[label[0]]
 | 
				
			||||||
 | 
					
 | 
				
			||||||
#def DrawSquares(image,gray,faces,color):
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
def OpenShifter():
 | 
					def OpenShifter():
 | 
				
			||||||
	try:
 | 
						try:
 | 
				
			||||||
		ser = serial.Serial('/dev/ttyUSB0',9600)
 | 
							ser = serial.Serial('/dev/ttyUSB0',9600)
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										209
									
								
								trainer.py
									
									
									
									
									
								
							
							
						
						
									
										209
									
								
								trainer.py
									
									
									
									
									
								
							@ -7,127 +7,122 @@ import os
 | 
				
			|||||||
import sys
 | 
					import sys
 | 
				
			||||||
import json
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
picCount = 0
 | 
					picCount = 0
 | 
				
			||||||
new = False
 | 
					new = False
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					 | 
				
			||||||
def start():
 | 
					def start():
 | 
				
			||||||
    print('Starting training..')
 | 
						print('Starting training..')
 | 
				
			||||||
    label = int(input('Label (Integer): '))
 | 
						label = int(input('Label (Integer): '))
 | 
				
			||||||
    name = str(raw_input('Person name: '))
 | 
						name = str(raw_input('Person name: '))
 | 
				
			||||||
    picCount = int(input('Number of Photos: '))
 | 
						picCount = int(input('Number of Photos: '))
 | 
				
			||||||
    global new
 | 
						global new 
 | 
				
			||||||
    new = promptNew()
 | 
						new = promptNew()
 | 
				
			||||||
    if new:
 | 
						if new:
 | 
				
			||||||
        newFileName = str(raw_input('New File name: '))
 | 
							newFileName = str(raw_input('New File name: '))
 | 
				
			||||||
        oldFileName = newFileName
 | 
							oldFileName = newFileName
 | 
				
			||||||
    else:
 | 
						else:
 | 
				
			||||||
        print('Found in faces:')
 | 
							print('Found in faces:')
 | 
				
			||||||
        print(os.listdir('faces/'))
 | 
							print(os.listdir('faces/'))
 | 
				
			||||||
        oldFileName = str(raw_input('Old File name: '))
 | 
							oldFileName = str(raw_input('Old File name: '))
 | 
				
			||||||
        newFileName = str(raw_input('New File name: '))
 | 
							newFileName = str(raw_input('New File name: '))
 | 
				
			||||||
    clearTrainFolder()
 | 
						clearTrainFolder()
 | 
				
			||||||
    dum = input('Press any key to start capture..')
 | 
						dum = input('Press any key to start capture..')
 | 
				
			||||||
    capture(picCount)
 | 
						capture(picCount)
 | 
				
			||||||
    addPerson(label, newFileName, oldFileName)
 | 
						addPerson(label, newFileName, oldFileName)
 | 
				
			||||||
    addName(name)
 | 
						addName(name)
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def clearTrainFolder():
 | 
					def clearTrainFolder():
 | 
				
			||||||
    print('clearing train folder')
 | 
						print('clearing train folder')
 | 
				
			||||||
    filelist = [f for f in os.listdir('train/') if f.endswith(".jpg")]
 | 
						filelist = [ f for f in os.listdir('train/') if f.endswith(".jpg") ]
 | 
				
			||||||
    for f in filelist:
 | 
						for f in filelist:
 | 
				
			||||||
        os.remove(os.path.join('train/', f))
 | 
							os.remove(os.path.join('train/', f))
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def addPerson(label, newFileName, oldFileName):
 | 
					def addPerson(label, newFileName, oldFileName):
 | 
				
			||||||
    try:
 | 
						try:
 | 
				
			||||||
        # faceFilePath = '/faces/hesham-saeed2'
 | 
							#faceFilePath = '/faces/hesham-saeed2'
 | 
				
			||||||
        faceFile = 'faces/' + oldFileName
 | 
							faceFile = 'faces/'+ oldFileName
 | 
				
			||||||
        face_recognizer = cv2.createLBPHFaceRecognizer()
 | 
							face_recognizer = cv2.createLBPHFaceRecognizer()
 | 
				
			||||||
        global new
 | 
							global new
 | 
				
			||||||
        if new:
 | 
							if new:
 | 
				
			||||||
            print('new file. skipping load function')
 | 
								print 'new file. skipping load function'
 | 
				
			||||||
        else:
 | 
							else:
 | 
				
			||||||
            print('loading old file')
 | 
								print 'loading old file'
 | 
				
			||||||
            face_recognizer.load(faceFile)
 | 
								face_recognizer.load(faceFile)
 | 
				
			||||||
    except:
 | 
						except:
 | 
				
			||||||
        print('[ Error ] Problem in init/loading LBPHfacerecognizer')
 | 
							print('[ Error ] Problem in init/loading LBPHfacerecognizer')
 | 
				
			||||||
        sys.exit()
 | 
							sys.exit()
 | 
				
			||||||
    images = []
 | 
						images = []
 | 
				
			||||||
    labels = []
 | 
						labels = []
 | 
				
			||||||
    image_names = os.listdir('train/')
 | 
						image_names = os.listdir('train/')
 | 
				
			||||||
    for image_name in image_names:
 | 
						for image_name in image_names:
 | 
				
			||||||
        if image_name.startswith('.'):
 | 
							if image_name.startswith('.'):
 | 
				
			||||||
            continue;
 | 
								continue;
 | 
				
			||||||
        image_path = 'train/' + image_name
 | 
							image_path = 'train/' + image_name
 | 
				
			||||||
        image = cv2.imread(image_path)
 | 
							image = cv2.imread(image_path)
 | 
				
			||||||
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 | 
							gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
 | 
				
			||||||
        face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 | 
							face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml')
 | 
				
			||||||
        faces = face_cascade.detectMultiScale(gray, 1.3, 5)
 | 
							faces = face_cascade.detectMultiScale(gray, 1.3, 5)
 | 
				
			||||||
        for (x, y, w, h) in faces:
 | 
							for (x,y,w,h) in faces:
 | 
				
			||||||
            images.append(gray[y:y + h, x:x + w])
 | 
								images.append(gray[y:y+h, x:x+w])
 | 
				
			||||||
            labels.append(label)
 | 
								labels.append(label)
 | 
				
			||||||
            cv2.imshow('face', gray[y:y + h, x:x + w])
 | 
								cv2.imshow('face',gray[y:y+h, x:x+w])
 | 
				
			||||||
            cv2.waitKey(100)
 | 
								cv2.waitKey(100)
 | 
				
			||||||
            print('Learning ' + image_name)
 | 
								print('Learning '+ image_name)
 | 
				
			||||||
    if new:
 | 
						if new:
 | 
				
			||||||
        face_recognizer.train(images, np.array(labels))
 | 
							face_recognizer.train(images, np.array(labels))
 | 
				
			||||||
    else:
 | 
						else:
 | 
				
			||||||
        face_recognizer.update(images, np.array(labels))
 | 
							face_recognizer.update(images, np.array(labels))
 | 
				
			||||||
    face_recognizer.save('faces/' + newFileName)
 | 
						face_recognizer.save('faces/'+newFileName)
 | 
				
			||||||
    print('Updated and saved file in faces/' + newFileName)
 | 
						print('Updated and saved file in faces/'+newFileName) 
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def capture(count):
 | 
					def capture(count):
 | 
				
			||||||
    try:
 | 
						try:
 | 
				
			||||||
        print('Initializing camera')
 | 
							print('Initializing camera')
 | 
				
			||||||
        camera = PiCamera()
 | 
							camera = PiCamera()
 | 
				
			||||||
        camera.resolution = (640, 480)
 | 
							camera.resolution = (640, 480)
 | 
				
			||||||
        print('[ OK ] Camera')
 | 
							print('[ OK ] Camera')
 | 
				
			||||||
        sleep(2)
 | 
							sleep(2)
 | 
				
			||||||
    except:
 | 
						except:
 | 
				
			||||||
        print('[ Error ] Can not initialize PiCamera')
 | 
							print('[ Error ] Can not initialize PiCamera')
 | 
				
			||||||
        sys.exit()
 | 
							sys.exit()
 | 
				
			||||||
    for i in range(1, count + 1):
 | 
						for i in range(1, count+1):
 | 
				
			||||||
        pic = 'train/' + str(i) + '.jpg'
 | 
							pic = 'train/'+str(i)+'.jpg'
 | 
				
			||||||
        camera.capture(pic)
 | 
							camera.capture(pic)
 | 
				
			||||||
        photo = cv2.imread(pic, 1)
 | 
							photo = cv2.imread(pic,1)
 | 
				
			||||||
        cv2.imshow('Photo', photo)
 | 
							cv2.imshow('Photo',photo)
 | 
				
			||||||
        print('Captured ' + str(i) + '\nPath ' + pic)
 | 
							print('Captured '+str(i)+'\nPath '+ pic)
 | 
				
			||||||
        cv2.waitKey(100)
 | 
							cv2.waitKey(100)
 | 
				
			||||||
        sleep(1)
 | 
							sleep(1)
 | 
				
			||||||
    cv2.destroyAllWindows()
 | 
						cv2.destroyAllWindows()
 | 
				
			||||||
    print('Done!')
 | 
						print('Done!')
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def promptNew():
 | 
					def promptNew():
 | 
				
			||||||
    filemode = raw_input('Make new File? (y/n): ')
 | 
						filemode = raw_input('Make new File? (y/n): ')
 | 
				
			||||||
    if filemode == 'y':
 | 
						if filemode == 'y':
 | 
				
			||||||
        return True
 | 
							return True
 | 
				
			||||||
    elif filemode == 'n':
 | 
						elif filemode == 'n':
 | 
				
			||||||
        return False
 | 
							return False
 | 
				
			||||||
    else:
 | 
						else:
 | 
				
			||||||
        print('incorrect input')
 | 
							print('incorrect input')
 | 
				
			||||||
        promptNew()
 | 
							promptNew()
 | 
				
			||||||
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
def addName(newName):
 | 
					def addName(newName):
 | 
				
			||||||
    with open("faces/names.json", "r") as read_file:
 | 
					 | 
				
			||||||
        exist = False
 | 
					 | 
				
			||||||
        namesJson = json.load(read_file)
 | 
					 | 
				
			||||||
        names = list(namesJson)
 | 
					 | 
				
			||||||
        i = 0
 | 
					 | 
				
			||||||
        for name in names:
 | 
					 | 
				
			||||||
            if newName == name:
 | 
					 | 
				
			||||||
                exist = True
 | 
					 | 
				
			||||||
                print('name already in names list with index ' + str(i))
 | 
					 | 
				
			||||||
            i += 1
 | 
					 | 
				
			||||||
        if not exist:
 | 
					 | 
				
			||||||
            names.append(newName)
 | 
					 | 
				
			||||||
            print('Added ' + newName + 'to names.json file')
 | 
					 | 
				
			||||||
    with open("faces/names.json", "w") as write_file:
 | 
					 | 
				
			||||||
        json.dump(names, write_file)
 | 
					 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
 | 
						with open("faces/names.json", "r") as read_file:
 | 
				
			||||||
 | 
							exist = False
 | 
				
			||||||
 | 
							namesJson = json.load(read_file)
 | 
				
			||||||
 | 
							names = list(namesJson)
 | 
				
			||||||
 | 
							i = 0
 | 
				
			||||||
 | 
							for name in names:
 | 
				
			||||||
 | 
								if newName == name:
 | 
				
			||||||
 | 
									exist = True
 | 
				
			||||||
 | 
									print('name already in names list with index '+str(i))
 | 
				
			||||||
 | 
								i += 1
 | 
				
			||||||
 | 
							if not exist:
 | 
				
			||||||
 | 
								names.append(newName)
 | 
				
			||||||
 | 
								print('Added '+newName+'to names.json file')
 | 
				
			||||||
 | 
						with open("faces/names.json","w") as write_file:
 | 
				
			||||||
 | 
							json.dump(names,write_file)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
start()
 | 
					start()
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user