-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtrainer.py
More file actions
70 lines (47 loc) · 2.18 KB
/
Copy pathtrainer.py
File metadata and controls
70 lines (47 loc) · 2.18 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
import os
import cv2
import numpy as np
from PIL import Image # for running our image file
def run_trainer():
# eyeDetect =cv2.CascadeClassifier('haarcascade_eye.xml')
recognizer = cv2.face.LBPHFaceRecognizer.create() # recognize faces in camera
path = 'data'
def get_images_with_id(path):
image_path = [os.path.join(path, f) for f in os.listdir(path)]
faces = []
ids = []
for single_image_path in image_path:
faceImage = Image.open(single_image_path).convert('L') # Converting images to grayscale
faceNp = np.array(faceImage, np.uint8)
# eyes = eyeDetect.detectMultiScale(faceNp, 1.5, 14 )
id = int(os.path.split(single_image_path)[-1].split(".")[1])
print(id)
faces.append(faceNp)
ids.append(id)
cv2.imshow("Training", faceNp)
'''
if len(eyes) != 0:
# print ("eye detected")
# g = faceNp[eyes[0,1]: eyes[0,1]+eyes[0,3], eyes[0,0]: eyes[0,0]+eyes[0,2]]
# cv2.imshow("Eye",g)
x, y, x2, y2 = eyes[0,0], eyes[0,1], eyes[0,0] + eyes[0,2], eyes[0,1] + eyes[0,3]
g = faceNp[eyes[0,1]: eyes[0,1]+eyes[0,3], eyes[0,0]: eyes[0,0]+eyes[0,2]]
# print(eyes)
# print (x,y,x2,y2)
# cv2.rectangle(faceNp, (x,y ), (x2,y2), (0, 255, 0), 2)
if eyes.shape[0]==2:
x,y, x2, y2 = eyes[1,0], eyes[1,1],eyes[1,0]+eyes[1,2], eyes[0,1]+eyes[1,3]
g = faceNp[eyes[0,1]: eyes[0,1]+eyes[0,3], eyes[0,0]: eyes[0,0]+eyes[0,2]]
# cv2.rectangle(faceNp, (x,y ), (x2,y2), (0, 255, 0), 2)
# cv2.waitKey(10000)
'''
cv2.waitKey(100)
return np.array(ids),faces
ids, faces = get_images_with_id(path)
recognizer.train(faces, ids)
recognizer.save("recognizer/trainingdata.yml")
cv2.destroyAllWindows()
def main():
run_trainer()
if __name__ == "__main__":
main()